Skip to content

ci: Benchmark without a qlog #68

ci: Benchmark without a qlog

ci: Benchmark without a qlog #68

Workflow file for this run

name: Bench
on:
push:
pull_request:
workflow_call:
env:
CARGO_PROFILE_BENCH_BUILD_OVERRIDE_DEBUG: true
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
TOOLCHAIN: nightly
jobs:
bench:
name: Benchmark
runs-on: self-hosted
defaults:
run:
shell: bash
steps:
- name: Install Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: $TOOLCHAIN
components: rustfmt
- name: Install sccache
uses: mozilla-actions/[email protected]
- name: Configure Rust
run: |
echo "RUSTFLAGS=-C link-arg=-fuse-ld=lld -C link-arg=-Wl,--no-rosegment" >> "$GITHUB_ENV"
echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
echo "RUSTC_WRAPPER=sccache" >> "$GITHUB_ENV"
cargo install flamegraph
- name: Checkout
uses: actions/checkout@v4
- name: Fetch NSS and NSPR
run: |
hg clone https://hg.mozilla.org/projects/nspr "$NSPR_DIR"
hg clone https://hg.mozilla.org/projects/nss "$NSS_DIR"
echo "NSS_DIR=$NSS_DIR" >> "$GITHUB_ENV"
echo "NSPR_DIR=$NSPR_DIR" >> "$GITHUB_ENV"
env:
NSS_DIR: ${{ github.workspace }}/nss
NSPR_DIR: ${{ github.workspace }}/nspr
- name: Build
run: cargo +$TOOLCHAIN bench --features bench --no-run
# Disable turboboost, hyperthreading and use performance governor.
- name: Prepare machine
run: sudo /root/bin/prep.sh
# Pin the benchmark run to core 0 and run all benchmarks at elevated priority.
- name: Benchmark
run: |
/usr/bin/nice -n -20 taskset -c 0 \
cargo +$TOOLCHAIN bench --features bench | tee output.txt
# Pin the transfer benchmark to core 0 and run it at elevated priority inside perf.
- name: Perf transfer benchmark
run: |
/usr/bin/nice -n -20 taskset -c 0 \
cargo +$TOOLCHAIN flamegraph -v -F 997 --features bench --bench transfer -- \
--bench --exact "Run multiple transfers with varying seeds"
# Re-enable turboboost, hyperthreading and use powersave governor.
- name: Restore machine
run: sudo /root/bin/unprep.sh
if: success() || failure()
- name: Download previous benchmark results
uses: actions/cache@v4
with:
path: ./cache
key: ${{ runner.os }}-benchmark
# TODO: Wait for this action to be allowlisted. And then figure out how to only upload
# benchmark data when the main branch is being updated (e.g., if: ${{ github.ref == "refs/heads/main" }})
# - name: Store current benchmark results
# uses: benchmark-action/github-action-benchmark@v1
# with:
# tool: 'cargo'
# output-file-path: output.txt
# external-data-json-path: ./cache/benchmark-data.json
# fail-on-alert: true
# github-token: ${{ secrets.GITHUB_TOKEN }}
# comment-on-alert: true
# summary-always: true
- name: Convert perf data
run: |
perf script -i perf.data -F +pid | zstd > perf.ff.data.zst
zstd perf.data
- name: Archive perf data
uses: actions/upload-artifact@v4
with:
name: ${{ github.head_ref || github.ref_name }}-perf
path: "*.zst"
compression-level: 0