1. 23 12月, 2020 1 次提交
    • 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