From d55df9e5fdbc5619a823dc3942ea1c4c96ab3fd3 Mon Sep 17 00:00:00 2001 From: Daniel Hodges Date: Wed, 12 Feb 2025 07:32:03 -0500 Subject: [PATCH] build: Add script for pgo/lto builds --- pgo-lto.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 pgo-lto.sh diff --git a/pgo-lto.sh b/pgo-lto.sh new file mode 100755 index 000000000..38bf2fa05 --- /dev/null +++ b/pgo-lto.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -eou pipefail + +PGO_TMPDIR=${1:-/tmp/pgo-data} +SCHED=${2:-scx_rustland} +PGO_DUR=${3:-30} + +rm -rf "$PGO_TMPDIR" +mkdir -p "$PGO_TMPDIR" + +RUSTFLAGS="-C profile-generate=$PGO_TMPDIR -C link-arg=-lgcov" \ + cargo build --release --bin "$SCHED" + +echo "Running sched to generate PGO" +for i in {0..3}; do + sudo "./target/release/$SCHED" & + sleep "$PGO_DUR" + sudo kill -9 $! || echo "$SCHED already dead" + sleep 1 +done + +# Merge the `.profraw` files into a `.profdata` file +llvm-profdata merge --failure-mode=warn \ + -o "$PGO_TMPDIR/merged.profdata" \ + "$PGO_TMPDIR" + +# Use the `.profdata` file for guiding optimizations +RUSTFLAGS="-Cprofile-use=$PGO_TMPDIR/merged.profdata" \ + cargo build --release --bin "$SCHED" +