diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 72b835f843..02521361c8 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -9,7 +9,7 @@ env: RUST_BACKTRACE: 1 TOOLCHAIN: nightly RUSTFLAGS: -C link-arg=-fuse-ld=lld -C link-arg=-Wl,--no-rosegment, -C force-frame-pointers=yes - PERF_CMD: record -o perf.data -F997 --call-graph fp -g + PERF_OPT: record -F997 --call-graph fp -g jobs: bench: @@ -67,7 +67,8 @@ jobs: mv target/criterion target/criterion-bench mv target/criterion-transfer-profile target/criterion || true taskset -c 0 nice -n -20 \ - cargo "+$TOOLCHAIN" flamegraph -v -c "$PERF_CMD" --features bench --bench transfer -- \ + cargo "+$TOOLCHAIN" flamegraph -o transfer.svg -v -c "$PERF_OPT -o transfer.perf" \ + --features bench --bench transfer -- \ --bench --exact "Run multiple transfers with varying seeds" --noplot # And now restore the directories. mv target/criterion target/criterion-transfer-profile @@ -75,22 +76,21 @@ jobs: - name: Profile client/server transfer run: | - { mkdir server; \ - cd server; \ + for CC in newreno cubic; do + TMP=$(mktemp -d) taskset -c 0 nice -n -20 \ - cargo "+$TOOLCHAIN" flamegraph -v -c "$PERF_CMD" \ - --bin neqo-server -- --db ../test-fixture/db "$HOST:4433" || true; } & - mkdir client; \ - cd client; \ + cargo "+$TOOLCHAIN" flamegraph -o "server-$CC.svg" -v -c "$PERF_OPT -o server-$CC.perf" \ + --bin neqo-server -- --cc "$CC" "$HOST:4433" & time taskset -c 1 nice -n -20 \ - cargo "+$TOOLCHAIN" flamegraph -v -c "$PERF_CMD" \ - --bin neqo-client -- --output-dir . "https://$HOST:4433/$SIZE" - killall -INT neqo-server - cd ${{ github.workspace }} - [ "$(wc -c < client/"$SIZE")" -eq "$SIZE" ] || exit 1 + cargo "+$TOOLCHAIN" flamegraph -o "client-$CC.svg" -v -c "$PERF_OPT -o client-$CC.perf" \ + --bin neqo-client -- --output-dir "$TMP" --cc "$CC" "https://$HOST:4433/$SIZE" + pkill -U bench -o -x -INT neqo-server + [ "$(wc -c < "$TMP/$SIZE")" -eq "$SIZE" ] || exit 1 + rm -rf "$TMP" + done env: HOST: localhost - SIZE: 1073741824 # 1 GB + SIZE: 536870912 # 512 MB # Re-enable turboboost, hyperthreading and use powersave governor. - name: Restore machine @@ -99,20 +99,23 @@ jobs: - name: Convert for profiler.firefox.com run: | - perf script -i perf.data -F +pid > transfer.perf & - perf script -i client/perf.data -F +pid > client.perf & - perf script -i server/perf.data -F +pid > server.perf & + perf script -i transfer.perf -F +pid > transfer.fx.perf & + for CC in newreno cubic; do + for PEER in client server; do + perf script -i "$PEER-$CC.perf" -F +pid > "$PEER-$CC.fx.perf" & + done + done wait - mv flamegraph.svg transfer.svg - mv client/flamegraph.svg client.svg - mv server/flamegraph.svg server.svg rm neqo.svg - name: Generate perf reports run: | - perf report -i perf.data --no-children --stdio > transfer.perf.txt & - perf report -i client/perf.data --no-children --stdio > client.perf.txt & - perf report -i server/perf.data --no-children --stdio > server.perf.txt & + perf report -i transfer.perf --no-children --stdio > transfer.perf.txt & + for CC in newreno cubic; do + for PEER in client server; do + perf report -i "$PEER-$CC.perf" --no-children --stdio > "$PEER-$CC.txt" & + done + done wait - name: Format results as Markdown