diff --git a/.forgejo/workflows/pgo-binary.yml b/.forgejo/workflows/pgo-binary.yml index 13a9fde..876ab69 100644 --- a/.forgejo/workflows/pgo-binary.yml +++ b/.forgejo/workflows/pgo-binary.yml @@ -85,7 +85,7 @@ jobs: run: | /tmp/riptide-pgo/riptide --help - - name: Train PGO profile + - name: Train PGO profile part 1 shell: sh env: LLVM_PROFILE_FILE: /tmp/riptide-pgo/profiles/%m-%p.profraw @@ -93,22 +93,38 @@ jobs: set -eu SITEMAP_URL='https://riptide-pgo.blitzw.in/sitemaps/sitemap.xml' + SITEMAP_URL_2='https://riptide-pgo.blitzw.in/sitemaps2/sitemap.xml' - printf 'Training with sitemap: <%s>\n' "$SITEMAP_URL" + printf 'Training round 1 with sitemap: <%s>\n' "$SITEMAP_URL" timeout 10m \ - /tmp/riptide-pgo/riptide \ - --sitemap "$SITEMAP_URL" \ - --output /tmp/pgo-urls.txt \ - --scheme https \ - --workers 16 \ - --timeout-secs 30 + /tmp/riptide-pgo/riptide \ + --sitemap "$SITEMAP_URL" \ + --output /tmp/pgo-urls.txt \ + --scheme https \ + --workers 16 \ + --timeout-secs 30 test -s /tmp/pgo-urls.txt - echo "Training input:" + echo "Training round 1 input:" wc -l /tmp/pgo-urls.txt + printf 'Training round 2 with sitemap: <%s>\n' "$SITEMAP_URL_2" + + timeout 10m \ + /tmp/riptide-pgo/riptide \ + --sitemap "$SITEMAP_URL_2" \ + --output /tmp/pgo-urls-2.txt \ + --scheme https \ + --workers 16 \ + --timeout-secs 30 + + test -s /tmp/pgo-urls-2.txt + + echo "Training round 2 input:" + wc -l /tmp/pgo-urls-2.txt + echo "Generated profiles:" find /tmp/riptide-pgo/profiles \ -name '*.profraw' \ @@ -120,9 +136,9 @@ jobs: -name '*.profraw' \ -type f \ -print -quit - )" + )" - - name: Merge PGO profiles + - name: Merge Round 1 of PGO profiles shell: sh run: | set -eu @@ -135,14 +151,100 @@ jobs: test -s /tmp/riptide-pgo.profdata - - name: Build optimized Linux binary + - name: Build Linux binary 2 + shell: sh + run: | + set -eu + + RUSTFLAGS=" + -C target-feature=+crt-static + -C profile-use=/tmp/riptide-pgo.profdata + " cargo build \ + --release \ + --target "$LINUX_TARGET" + + mkdir -p riptide-pgo-2 + + cp \ + "target/$LINUX_TARGET/release/riptide" \ + riptide-pgo-2/riptide + + chmod +x riptide-pgo-2/riptide + + - name: Train PGO profile + shell: sh + env: + LLVM_PROFILE_FILE: /tmp/riptide-pgo/profiles/%m-%p.profraw + run: | + set -eu + + SITEMAP_URL='https://riptide-pgo.blitzw.in/sitemaps/sitemap.xml' + SITEMAP_URL_2='https://riptide-pgo.blitzw.in/sitemaps2/sitemap.xml' + + printf 'Training round 1 with sitemap: <%s>\n' "$SITEMAP_URL" + + timeout 10m \ + /tmp/riptide-pgo2/riptide \ + --sitemap "$SITEMAP_URL" \ + --output /tmp/pgo-urls3.txt \ + --scheme https \ + --workers 16 \ + --timeout-secs 30 + + test -s /tmp/pgo-urls3.txt + + echo "Training round 1 input:" + wc -l /tmp/pgo-urls3.txt + + printf 'Training round 2 with sitemap: <%s>\n' "$SITEMAP_URL_2" + + timeout 10m \ + /tmp/riptide-pgo2/riptide \ + --sitemap "$SITEMAP_URL_2" \ + --output /tmp/pgo-urls-4.txt \ + --scheme https \ + --workers 16 \ + --timeout-secs 30 + + test -s /tmp/pgo-urls-4.txt + + echo "Training round 2 input:" + wc -l /tmp/pgo-urls-4.txt + + echo "Generated profiles:" + find /tmp/riptide-pgo2/profiles \ + -name '*.profraw' \ + -type f \ + -print + + test -n "$( + find /tmp/riptide-pgo2/profiles \ + -name '*.profraw' \ + -type f \ + -print -quit + )" + + - name: Merge Round 2 of PGO profiles + shell: sh + run: | + set -eu + + LLVM_PROFDATA="${{ steps.llvm.outputs.LLVM_BIN }}/llvm-profdata" + + "$LLVM_PROFDATA" merge \ + -o /tmp/riptide-pgo2.profdata \ + /tmp/riptide-pgo2/profiles/*.profraw + + test -s /tmp/riptide-pgo.profdata + + - name: Build finalized Linux binary shell: sh run: | set -eu RUSTFLAGS=" -C target-feature=+crt-static - -C profile-use=/tmp/riptide-pgo.profdata + -C profile-use=/tmp/riptide-pgo2.profdata " cargo build \ --release \ --target "$LINUX_TARGET"