Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f2c9664
benchcoin: add tooling
willcl-ark Dec 23, 2025
8ad21e9
don't compare to master in prs
willcl-ark Jan 7, 2026
737ba98
only run single bins in prs
willcl-ark Jan 7, 2026
28ac510
rebase at 0100 GMT
willcl-ark Jan 8, 2026
c00c168
make charts taller
willcl-ark Jan 8, 2026
dd9231c
update machine configs and charts
willcl-ark Jan 8, 2026
03f43d3
fix nightly chart display and machine spec detection
willcl-ark Jan 9, 2026
0d63628
chart: make chart series dynamic and unique
willcl-ark Jan 9, 2026
2cf0f0f
rename history file
willcl-ark Jan 9, 2026
1acf489
use better colours in charts
willcl-ark Jan 9, 2026
11928f1
don't use inline html
willcl-ark Jan 10, 2026
c6ce7d9
use commit date in chart data points
willcl-ark Jan 12, 2026
9bf5428
use nix flake in both publish workflow steps
willcl-ark Jan 13, 2026
bbffd5a
fix nightly-history mismatch
willcl-ark Jan 13, 2026
2a72282
fix instrumented suffixes in reports
willcl-ark Jan 13, 2026
626d33b
add clickable plotly links
willcl-ark Jan 13, 2026
0823859
use corect path in index
willcl-ark Jan 13, 2026
8a60e67
use scatter plot for leveldb compaction
willcl-ark Jan 14, 2026
c02c963
add debug logs to artifacts
willcl-ark Jan 14, 2026
747e76f
dynamic charts test
willcl-ark Jan 14, 2026
f95908c
fix theme render order
willcl-ark Jan 14, 2026
31b8170
add ruff and ty to flake
willcl-ark Jan 14, 2026
dbe1874
add ty.toml
willcl-ark Jan 14, 2026
d4fc44d
add ruff.toml
willcl-ark Jan 14, 2026
4658fb0
support a full IBD PR run
willcl-ark Jan 14, 2026
e1d867e
Generate static debug.log plots during report generation
willcl-ark Feb 24, 2026
e7f8317
Replace client-side debug.log charts with static images
willcl-ark Feb 24, 2026
0d4d793
Update bench/README.md to reflect current CLI interface
willcl-ark Feb 24, 2026
e3a17a7
Stop publishing debug.log.gz to gh-pages, link to CI artifacts instead
willcl-ark Feb 24, 2026
31d067f
Wait for Pages deployment before commenting on PR
willcl-ark Feb 24, 2026
5c87949
Sort PR results index numerically instead of lexicographically
willcl-ark Feb 24, 2026
4f210f3
set prune height to 1_000_000MB
willcl-ark Feb 25, 2026
9600279
Include prune in nightly chart series key
willcl-ark Feb 26, 2026
afe90d3
Fix numeric sort crash on pr-main directory
willcl-ark Feb 26, 2026
d16cb61
Restore debug log extraction for PNG plot generation
willcl-ark Feb 28, 2026
8e6d857
use local bitcoin node to test region network issues
willcl-ark Mar 4, 2026
23f01a2
pin nightly benchmark job order: 450 before 32000
willcl-ark Mar 5, 2026
45be580
run fstrim before each benchmark for consistent SSD performance
willcl-ark Mar 5, 2026
3407df0
Revert "use local bitcoin node to test region network issues"
willcl-ark Mar 5, 2026
c856fd6
fstrim the mount point, not a subdirectory
willcl-ark Mar 5, 2026
8750a7b
show manual nightly re-runs as scatter points on chart
willcl-ark Mar 6, 2026
ef49957
Compare PR benchmarks against median of last 7 nightly runs
willcl-ark Mar 13, 2026
d9b4828
merge manual nightly runs into their series on the chart
willcl-ark Mar 13, 2026
52bcc0e
Add assumevalid=0 benchmark runs to PR workflow
willcl-ark Mar 17, 2026
de32701
Add BIP68 fast-path: skip entire BIP68 coin iteration and SequenceLoc…
willcl-ark Apr 24, 2026
ff7fbfc
Eliminate redundant HaveInputs() call in CheckTxInputs: merge missing…
willcl-ark Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/README.md
169 changes: 169 additions & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
name: Benchmark
on:
pull_request:
branches:
- master

jobs:
build-binary:
runs-on: [self-hosted, linux, x64]
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Build PR binary
run: |
HEAD_SHA=$(git rev-parse HEAD)
echo "HEAD_SHA=${HEAD_SHA}" >> "$GITHUB_ENV"
nix develop --command python3 bench.py build \
-o ${{ runner.temp }}/binaries \
${HEAD_SHA}:pr

- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: bitcoind-binaries
path: ${{ runner.temp }}/binaries/

benchmark:
needs: build-binary
strategy:
matrix:
# Matrix entries from configs/pr.toml: dbcache=[450,32000] x instrumentation=[uninstrumented,instrumented]
name: [450-uninstrumented, 450-instrumented, 32000-uninstrumented, 32000-instrumented]
runs-on: [self-hosted, linux, x64]
timeout-minutes: 600
env:
ORIGINAL_DATADIR: /data/pruned-840k
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Download binaries
uses: actions/download-artifact@v4
with:
name: bitcoind-binaries
path: ${{ runner.temp }}/binaries

- name: Set binary permissions
run: |
chmod +x ${{ runner.temp }}/binaries/pr/bitcoind

- name: Run benchmark
run: |
nix develop --command python3 bench.py run \
--benchmark-config bench/configs/pr.toml \
--matrix-entry ${{ matrix.name }} \
--datadir $ORIGINAL_DATADIR \
--tmp-datadir ${{ runner.temp }}/datadir \
--output-dir ${{ runner.temp }}/output \
pr:${{ runner.temp }}/binaries/pr/bitcoind

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: result-${{ matrix.name }}
path: ${{ runner.temp }}/output/results.json

- name: Upload flamegraphs
uses: actions/upload-artifact@v4
with:
name: flamegraph-${{ matrix.name }}
path: ${{ runner.temp }}/output/*-flamegraph.svg
if-no-files-found: ignore

- name: Upload debug logs
uses: actions/upload-artifact@v4
with:
name: debug-logs-${{ matrix.name }}
path: ${{ runner.temp }}/output/*-debug.log
if-no-files-found: ignore

- name: Write context metadata
env:
GITHUB_CONTEXT: ${{ toJSON(github) }}
RUNNER_CONTEXT: ${{ toJSON(runner) }}
run: |
mkdir -p ${{ runner.temp }}/contexts
echo "$GITHUB_CONTEXT" | nix develop --command jq "del(.token)" > ${{ runner.temp }}/contexts/github.json
echo "$RUNNER_CONTEXT" > ${{ runner.temp }}/contexts/runner.json

- name: Upload context metadata
uses: actions/upload-artifact@v4
with:
name: run-metadata-${{ matrix.name }}
path: ${{ runner.temp }}/contexts/

benchmark-noav:
needs: build-binary
strategy:
matrix:
name: [450-uninstrumented, 32000-uninstrumented]
runs-on: [self-hosted, linux, x64]
timeout-minutes: 600
env:
ORIGINAL_DATADIR: /data/pruned-840k
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Download binaries
uses: actions/download-artifact@v4
with:
name: bitcoind-binaries
path: ${{ runner.temp }}/binaries

- name: Set binary permissions
run: |
chmod +x ${{ runner.temp }}/binaries/pr/bitcoind

- name: Run benchmark
run: |
nix develop --command python3 bench.py run \
--benchmark-config bench/configs/pr-noassumevalid.toml \
--matrix-entry ${{ matrix.name }} \
--datadir $ORIGINAL_DATADIR \
--tmp-datadir ${{ runner.temp }}/datadir \
--output-dir ${{ runner.temp }}/output \
pr:${{ runner.temp }}/binaries/pr/bitcoind

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: result-noav-${{ matrix.name }}
path: ${{ runner.temp }}/output/results.json

- name: Upload flamegraphs
uses: actions/upload-artifact@v4
with:
name: flamegraph-noav-${{ matrix.name }}
path: ${{ runner.temp }}/output/*-flamegraph.svg
if-no-files-found: ignore

- name: Upload debug logs
uses: actions/upload-artifact@v4
with:
name: debug-logs-noav-${{ matrix.name }}
path: ${{ runner.temp }}/output/*-debug.log
if-no-files-found: ignore

- name: Write context metadata
env:
GITHUB_CONTEXT: ${{ toJSON(github) }}
RUNNER_CONTEXT: ${{ toJSON(runner) }}
run: |
mkdir -p ${{ runner.temp }}/contexts
echo "$GITHUB_CONTEXT" | nix develop --command jq "del(.token)" > ${{ runner.temp }}/contexts/github.json
echo "$RUNNER_CONTEXT" > ${{ runner.temp }}/contexts/runner.json

- name: Upload context metadata
uses: actions/upload-artifact@v4
with:
name: run-metadata-noav-${{ matrix.name }}
path: ${{ runner.temp }}/contexts/
Loading
Loading