LCU14 BURLINGAME
Andrew McDermott, LCU14
LCU14-301: Hadoop and OpenJDK on ARM servers
● AARCH64 port of OpenJDK● Based on same codebase as x86 OpenJDK● 95%+ code in common with Oracle JDK● Same performance within a few % as Oracle JDK● Goal is to track all x86 optimisations / features● No support for ARMv7 or earlier or for 32 bit on ARMv8
● Three releases are supported● JDK7
● The current production release used today by most applications● Released as part of Fedora, Ubuntu, Debian and others● Supported in IcedTea (the main repository for distros building JDK7)
● JDK8● FCS release in April● Starting to go into distros alongside JDK7● Maintained as a branch in the OpenJDK repository (http://openjdk.java.net)
● JDK9● Next development - Due for release Q2 next year● AARCH64 port will be upstreamed into JDK9
OpenJDK on ARMv8
● Supported hotspot technologies● Server (C2) JIT
● Heavyweight optimising compiler - but slow to startup● Client (C1) JIT
● Lightweight compiler - quick startup - better for interactive environments● Tiered compilation
● Compiles 1st with C1, then if necessary with C2● Profiling information gathered by C1 code used in C2 compilation● The is the default execution model● Best quality code but can be quite memory intensive
● Assembler Template Interpreter● Assembler code for each Java bytecode generated from a template● Java code initially executed by template interpreter● Once hotspot is determined from profiling compiled with C1 or C2
● Pure C ‘Zero’ Interpreter● Mainly for reference / benchmarking, not enabled in production builds
OpenJDK on ARMv8
● Daily building and testing● Testing on APM boards greatly extended. Testing on AMD board starting
● Tests results available from http://openjdk.linaro.org/ ● JTREG (hotspot, langtools & jdk) on both client and server -- ~18000 tests● SPECjbb2013 performance regression test● Hadoop Terasort performance regression test● JCStress test● The test results are also posted daily to the aarch64-port-dev mailing list
● Testing on foundation model in LAVA has been abandoned● Consuming too many resources in the Lab (needed 2 foundation models 100% of the time
just to keep up with the tests)
CI and nightly tests
CI and nightly testsServer results from Aug 22 2014
ARM64 x86
Pass Fail Error Pass Fail Error
Hotspot 562 2 0 562 2 0
langtools 3004 0 11 2979 0 25
JDK 5283 181 46 5273 232 5
Totals 8849 183 57 8814 234 30
CI and nightly tests
● Daily native build of Hadoop from source● Daily benchmark testing
● Client and server run of Terasort to test for performance regression
● Single node testing only.
● Looking at multinode testing
● Optimisation focused on optimising OpenJDK for Hadoop● +24% improvement since FCS release in April
● Some optimisation on Hadoop directly● CRC optimisation using SIMD
● Pushed to list but not yet adopted upstream
Hadoop Testing / Optimisation
● Release of both JDK8 and JDK7● Images available to download from http://openjdk.linaro.org
● Security Updates● Two sets of security patches released by Oracle
● We have tracked and merged them into the AArch64 JDK8 and JDK7 trees
● JDK8 UpdatesOpenJDK JDK8 Updates tracked and merged into AARCH64 JDK8
Current AARCH64 tree is JDK8 Update u40_b04
Updates since LCA14
● Optimisations completed● Biased locking (bias the lock towards the current thread)
● String optimisation (string copy, comparison, string search)● String search implemented using simplified Boyer-Moore algorithm
● ISO Array encode/decode● Optimised conversion of strings to/from ISO-5589 using Neon
● Intrinsic optimisation● Optimised array copy, compare and initialisation, and also MathExact
● CRC optimisation (implemented using CRC instruction extensions)
● AES encryption● Implement AES encrypt/decrypt using crypto instruction extensions
● Memory barrier optimisation● Elide memory barriers when possible, +72% improvement on Java Dhrystone!● Smaller improvements on other benchmarks (+18% on kXML and +6% on Chess)
● Many more low level performance improvements
Update since LCA14
● JDK9● JEP (Java Enhancement Proposal) filed for merge of AARCH64 to JDK9● Staging repository created and AARCH64 port of JDK9 pushed to staging
● A57 Juno/AMD● Verification that OpenJDK works correctly on A53 and A57
● Working also on the AMD platform to verify OpenJDK on AMD’s A57 platform
● OpenJDK fully functional on both Juno/AMD
● Distro Support● Supporting distro maintainers (Ubuntu/Debian/Fedora) - updates, dealing with bug
reports and resolving issues with testing
Updates since LCA14
● Daily building and testing● Testing on APM boards greatly extended. Testing on AMD board starting
● Tests results available from http://openjdk.linaro.org/ ● JTREG (hotspot, langtools & jdk) on both client and server -- ~18000 tests● SPECjbb2013 performance regression test● Hadoop Terasort performance regression test● JCStress test● The test results are also posted daily to the aarch64-port-dev mailing list
● Testing on foundation model in LAVA has been abandoned● Consuming too many resources in the Lab (needed 2 foundation models 100% of the time
just to keep up with the tests)
Updates since LCA14
● JDK7● Backport optimisations / bug fixes to JDK7● Track security updates● No support for 32 bit in JDK7
● JDK8● Track JDK8 updates (currently at JDK8 u20b04)● Continue optimisation work
● JDK9● Double commit patches from JDK8 development● Track JDK9 tip into staging repository● Push JEP forward and merge staging repository into trunk
● Continue with release and testing on member platforms● JCK
● Distros will run the JCK and be concerned about the certification● Linaro will run the JCK internally for testing
Next steps for OpenJDK/AArch64
More about Linaro Connect: connect.linaro.org Linaro members: www.linaro.org/membersMore about Linaro: www.linaro.org/about/