• M
    Utilize PGO for rustc linux dist builds · a448f88b
    Mark Rousskov 提交于
    This implements support for applying PGO to the rustc compilation step (not
    standard library or any tooling, including rustdoc). Expanding PGO to more tools
    is not terribly difficult but will involve more work and greater CI time
    commitment.
    
    For the same reason of avoiding greater time commitment, this currently avoids
    implementing for platforms outside of x86_64-unknown-linux-gnu, though in
    practice it should be quite simple to extend over time to more platforms. The
    initial implementation is intentionally minimal here to avoid too much work
    investment before we start seeing wins for a subset of Rust users.
    
    The choice of workloads to profile here is somewhat arbitrary, but the general
    rationale was to aim for a small set that largely avoided time regressions on
    perf.rust-lang.org's full suite of crates. The set chosen is libcore, cargo (and
    its dependencies), and a few ad-hoc stress tests from perf.rlo. The stress tests
    are arguably the most controversial, but they benefit those cases (avoiding
    regressions) and do not really remove wins from other benchmarks.
    
    The primary next step after this PR lands is to implement support for PGO in
    LLVM. It is unclear whether we can afford a full LLVM rebuild in CI, though, so
    the approach taken there may need to be more staggered. rustc-only PGO seems
    well affordable on linux at least, giving us up to 20% wall time wins on some
    crates for 15 minutes of extra CI time (1 hour up from 45 minutes).
    
    The PGO data is uploaded to allow others to reuse it if attempting to reproduce
    the CI build or potentially, in the future, on other platforms where an
    off-by-one strategy is used for dist builds at minimal performance cost.
    a448f88b
Dockerfile 3.7 KB