HKG15-203: TCWG 2015 Roadmap Review
Transcript of HKG15-203: TCWG 2015 Roadmap Review
Presented by
Date
Event
HKG15-203: TCWG 2015 Roadmap Review
Ryan S. ArnoldEngineering Manager
Linaro Toolchain Working Group
February 10, 2015
Linaro Connect HKG15
TCWG 2015 Roadmap Review
● TCWG Priorities● High Level Roadmaps - GNU & LLVM● ONGOING efforts
○ Linaro Toolchain Products○ GNU Toolchain○ LLVM Toolchain
● GNU Toolchain Development - Specifics● LLVM Toolchain Development - Specifics
2015 TCWG Priorities1. GNU Toolchain Development2. Toolchain Releases3. LLVM Development4. Member Requests
Strategy: Align development effort toward 80% development and 20% products.
Methodology: Be more efficient through automation.
LC-HKG15 LC-next
Oct ‘14 Nov ‘14 Dec ‘14 Jan ‘15 Feb ‘15 Oct ‘15Apr ‘15 Jun ‘15 Aug ‘15 Apr ‘16 Oct ‘16 Apr ‘17 Oct ‘17
Benchmark Automation Enablement
ILP32 Toolchain Integration
GCC Thread Sanitizer for Aarch64
Upstream NEON Intrinsics Tests
Libm Performance Investigations
GDB for Android on ARM64
Multiple GDB watchpoint support for ARM
Watchpoint Support for Aarch64
GDB Testsuite Coverage Improvements
Aarch32 Binary Toolchains
x86_64 Binary Toolchains
Native Binary Toolchains
GCC Modularization
Non-stop debugging for Aarch64
Linaro Toolchain Quarterly Binary Releases, Monthly Linaro GCC Source releases (including backports), Release Validation, Periodic GNU Toolchain Package Releases (glibc, binutils, GDB),
ONGOING: GNU Toolchain Maintenance (bug fixing), Monthly GCC Benchmarking, GCC Performance Development, System Library Performance,Toolchain Validation Automation Improvements
GNU Toolchain Roadmap long-term due to minimal investment
LLVM Toolchain RoadmapLC-HKG15 LC-next
Oct ‘14 Nov ‘14 Dec ‘14 Jan ‘15 Feb ‘15 Oct ‘15Apr ‘15 Jun ‘15 Aug ‘15 Apr ‘16 Oct ‘16 Apr ‘17 Oct ‘17
ONGOING:LLVM community releases, LLVM community maintenance, LLVM Buildbots, LLVM Libraries, LLVM Linux Kernel
LLVM Linker (LLD) for ELF on Aarch64 and Aarch32
LLDB for Aarch64
LLVM Thread Sanitizer for Aarch64
LLD Buildbot Enablement
Sanitizer Bots
LLDB Buildbot Enablement
LLVM Linux Kernel
LLVM Performance
Other Sanitizers (undef, address, etc) for Aarch64
LLVM Incubation for Aarch64
long-term due to lack of staffing
long-term due to minimal investment
TCWG Ongoing Efforts● GNU Toolchain Ongoing Efforts
○ Linaro Toolchain Products■ Monthly Linaro GCC Source releases (including backports)■ Linaro Toolchain Quarterly Binary Releases■ Periodic GNU Toolchain Package Releases (glibc, binutils, GDB)■ Linaro GNU Toolchain Release Validation■ Monthly Toolchain Benchmarking
○ Development■ GNU Toolchain Maintenance (bug fixing)■ GCC Performance Development■ System Library Performance Improvements■ Toolchain Validation Automation Improvements
● LLVM Toolchain Ongoing Efforts○ LLVM community releases○ LLVM community maintenance○ LLVM Buildbots○ LLVM Libraries○ LLVM Linux Kernel
Linaro Toolchain Products for 2015
● Source Package Releases○ Linaro GCC 4.9 Maintenance Quarterly Source Release○ Linaro GCC 5.0 Backports Monthly Source Release○ Linaro Glibc (as-needed) Source Releases○ Linaro Binutils (as-needed) Source Releases○ Linaro GDB (as-needed) Source Releases
● Quarterly Binary Releases○ Linaro GCC 4.9 Maintenance Quarterly Binary Release○ Linaro GCC 5.0 Backports Quarterly Binary Release
Confidential
TCWG Toolchain Release Schedule (planned)
May Aug Nov Feb
May Jun Jul Aug Sep Oct Nov Dec Jan Feb
Feb May Aug Nov FebLinaro GCC 4.9 (binary)
Linaro GCC 5.0 (source)
Feb May Aug Nov FebMarLinaro GCC 4.9 (source)
Linaro GCC 5.0 (binary)
Feb
FebLinaro GCC 4.8 (source)
Linaro GCC 4.8 (binary)
2015 2016
Apr
Last Linaro GCC 4.8 maintenance quarterly binary release
First Linaro GCC 4.9 maintenance quarterly binary release
First Linaro GCC 5.0 quarterly stable binary release
Possible first Linaro GCC 5.0 source release
● Target - 25 backports a month● Reality - 25+ backports a month● Objective - increase efficiency of
backporting to provide greater flexibility w/rt staffing other initiatives while continuing to hit backport targets.
Linaro GCC Stable Backporting Effort
● Method○ early in product release life-cycle
■ Backport based on consecutive revisions○ late in product release life-cycle
■ Backport more selectively based upon suspected performance gains
○ respin when releases when necessary
Linaro GCC Stable Backporting Effort(continued)
Linaro GCC 4.9 Backports statsRelease Version
Number of Backports
Comment
2014.04 0 First Linaro GCC 4.9 Release based on FSF GCC 4.9.0
2014.05 5 Limited Backports Available for backporting
2014.06 41 Used for first ARMv8 Linaro Release
2014.07 65 Including 1 respin of 2014.06
2014.08 39
2014.09 30 LCU14
2014.10 33
2014.11 2 Linaro Lab Move. 2 backports for A53 errata fixes
2014.12 51
2015.01 33
Sum: 299 + FSF Branch Merge each release
Linaro Validation Automation● Automate backporting using backflip (best-case)● Backport(s) triggers gerrit review
○ triggers jenkins automated validation on myriad of targets■ triggers automated update of pass/fail regression information in gerrit
● triggers jenkins backport benchmark automation○ triggers performance regression information in gerrit
○ All backports together create a release■ release triggers jenkins automated release benchmarking
○ Release that passes performance regression testing triggers the binary toolchain build.
● From the first backport to quarterly binary release the build environment is held as constant as possible and the resulting toolchain is made available.
Linaro GCC Automated Benchmarking
● Activities:○ Release Benchmarking (SPEC2K6)○ Automated Regression Benchmarking for each backport○ Investigative Benchmarking for performance improvements○ Pre-commit Benchmarking for upstreaming○ Development Benchmarking to prove efficacy of patches
● Reality:○ We’re looking forward to improved hardware becoming available in 2015
■ hardware stability (ARMv8 maturing & options)■ system images (automation ready out-of-the box)
GCC Performance● Areas & Examples:
○ Member/Stakeholder Identified Performance Improvements■ Zero-Sign Extension Elimination using Value-Range-Propagation Pass in GCC
Middle End■ Drop in Stream Benchmark Performance■ Libvpx Neon Intrinsics Usage
○ Linaro GCC 4.9/5.0 Toolchain Performance Regressions■ Compare month over month performance results and triage into bugzilla
○ Feature Exploitation■ Auto-vectorization using NEON
○ Comparing relative gains between Aarch64 and x86_64■ LTO instruction counts on Aarch64 vs x86_64.
LLVM Community Stewardship
● LLVM Maintenance● LLVM Buildbots● LLVM Releases● LLVM Libraries● LLVM & GCC Liaison● LLVM Linux Kernel
GNU Toolchain Development - Specifics
Efforts of interest:● GCC Modularization● GDB Test-Suite Coverage for Arch32/Aarch64● ILP32 Toolchain Integration and Benchmarking● GCC Thread Sanitizer for Aarch64
Not mentioned are the ONGOING GCC Performance efforts described earlier.
GCC Modularization● Description:
This is a long-term, low-investment effort to decouple the GCC front, middle, and back ends from each other to enable a single compiler driver to compile code for several different backends.
● Objective(s):○ Header file flattening○ Include File Reduction○ Turn Target Macros into target hooks○ Split tree.[hc]
● Reason(s):○ Reduce unique instances of toolchain products to reduce maintenance and release costs.○ Deploy/Update a single toolchain instance to in-field products to reduce complexity,
support, delivery, etc.○ Provide use experience for arm/Aarch64 that matches experience for other architectures.
● Status: Staffed
○ Create front-end interface○ Replace TYPE nodes with Gimple wrappers○ Enhance Gimple builders○ Remove gimplification
GDB Test-Suite Coverage for Arch32/Aarch64● Description:
Cover GDB test-suite gaps in the following:
● Objective(s):○ Parity between x86[64] and Aarch[32|64]○ Parity between Aarch32 and Aarch64○ Mix-mode debuggings (e.g., thumb & arm interlaced)○ Improving known and discovered failures for Aarch32 and Aarch64○ Address debug info bugs○ Available feature testing
● Reason(s):Guarantee high-quality debugging support on arm/Aarch64.
● Status: Staffed
ILP32 Toolchain Integration and Benchmarking● Description:
Produce a Linaro based ILP32 toolchain from upstreamed/pending sources to investigate performance characteristics as compared to Aarch32.
● Objective(s):○ Enable ABE to build ILP32 toolchain○ Benchmark ILP32 vs Aarch32 on Juno○ Identify gaps and plan accordingly
■ Upstream state of Linux Kernel and Glibc support■ Investigate performance improvement opportunities
● Reason(s):Investigate performance characteristics of ILP32.
● Status: Staffed
GCC Thread Sanitizer for Aarch64
● Description:Implement thread sanitizer for Aarch64
● Objective(s):○ Enable GCC configury for TSAN.○ Port TSAN to Aarch64 for a variety of Virtual Address Spaces○ Upstream port/enablement into LLVM○ Upstream port/enablement into GCC
● Reason(s):Member desire for powerful analysis tools.
● Status: Staffed
LLVM Toolchain Development - Specifics
Efforts of interest:● LLVM Linker● LLDB● LLVM Benchmarking● LLVM Performance
LLVM Linker - LLD
● Description:This is the effort to port the LLVM Linker LLD to the ELF ABI for Aarch64 and prepare it for eventual inclusion into the LLVM Toolchain.
● Objective(s):○ Base ELF enablement for Aarch64 (ELF sections, Symbols, ARM & Aarch64 Relocations,
Name Mangling).○ Interoperability of binaries linked with LLD and binutils ld.○ LTO Support○ Features in MCLinker missing in LLD○ Make LLDB linked objects compatible with oldest ABI in the linking group.
● Reason(s):○ Broad adoption of LLVM toolchain requires an integrated link-editor.
● Status: Staffed
LLDB
● Description:This describes an effort to implement arm and Aarch64 debugging support for the ELF ABI in LLDB.
● Objective(s):○ arm native debugging (it’s easier right away than cross)○ x86_64 -> arm remote debugging○ LLDB debugging itself○ x86_64 native debugging○ x86_64 -> aarch64 remote debugging
● Reason(s):○ Support most common existing devices and move to support next generation of common
devices.○ Broad adoption of LLVM toolchain requires an integrated link-editor.
● Status: Staffed
LLVM Benchmarking
● Description:This describes an effort implement benchmarking automation with the LLVM toolchain and to analyze and triage the results into regressions and/or opportunities.
● Objective(s):○ ABE enablement for LLVM Builds○ ABE enablement for LLVM Benchmarking○ Jenkins triggers for LLVM Builds○ Jenkins triggers for LLVM Benchmarking○ Procedures for triaging issues into regression and opportunities.
● Reason(s):This is a prerequisite to any in-depth LLVM Performance effort.
● Status: Partially Staffed
LLVM Performance
● Description:This describes an effort to improve performance of LLVM and make it competitive with GCC on arm and Aarch64 by responding to ongoing benchmarking investigations into the following areas:
● Objective(s):○ EEMBC○ SPEC2K○ SPEC2K6○ Auto-vectorization
● Reason(s):● Status: Not Staffed