This commit enables profile-guided optimizations (PGO) in the Scylla build. A full LLVM PGO requires 3 builds: 1. With -fprofile-generate to generate context-free (pre-inlining) profile. This profile influences inlining, indirect-call promotion and call graph simplifications. 2. With -fprofile-use=results_of_build_1 -fcs-profile-generate to generate context-sensitive (post-inlining) profile. This profile influences post-inline and codegen optimizations. 3. With -fprofile-use=merged_results_of_builds_1_2 to build the final binary with both profiles. We do all three in one ninja call by adding release-pgo and release-cs-pgo "stages" to release. They are a copy of regular release mode, just with the flags described above added. With the full course, release objects depend on the profile file produced by build/release-cs-pgo/scylla, while release-cs-pgo depends on the profile file generated by build/release-pgo/scylla. The stages are orthogonal and enabled with separate options. It's recommended to run them both for full performance, but unfortunately each one adds a full build of scylla to the compile time, so maybe we can drop one of them in the future if it turns out e.g. that regular PGO doesn't have a big effect. It's strongly recommended to combine PGO with LTO. The latter enables the entire class of binary layout optimizations, which for us is probably the most important part of the entire thing.
3 lines
88 B
Bash
Executable File
3 lines
88 B
Bash
Executable File
#!/bin/bash -xue
|
|
exec python3 -u "$(dirname "$(realpath "$0")")"/pgo.py train_full "$@"
|