HKG15-203: TCWG 2015 Roadmap Review

26
Presented by Date Event HKG15-203: TCWG 2015 Roadmap Review Ryan S. Arnold Engineering Manager Linaro Toolchain Working Group February 10, 2015 Linaro Connect HKG15

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