Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
50a568a
benchcoin: add tooling
willcl-ark Dec 23, 2025
e02107e
don't compare to master in prs
willcl-ark Jan 7, 2026
15d5723
only run single bins in prs
willcl-ark Jan 7, 2026
45eec4c
rebase at 0100 GMT
willcl-ark Jan 8, 2026
8721de5
make charts taller
willcl-ark Jan 8, 2026
fece8da
update machine configs and charts
willcl-ark Jan 8, 2026
02f3ffb
fix nightly chart display and machine spec detection
willcl-ark Jan 9, 2026
c576ee4
chart: make chart series dynamic and unique
willcl-ark Jan 9, 2026
e8edc38
rename history file
willcl-ark Jan 9, 2026
9404f57
use better colours in charts
willcl-ark Jan 9, 2026
8c63bee
don't use inline html
willcl-ark Jan 10, 2026
ee95e61
use commit date in chart data points
willcl-ark Jan 12, 2026
4a61ed0
use nix flake in both publish workflow steps
willcl-ark Jan 13, 2026
22c3cfd
fix nightly-history mismatch
willcl-ark Jan 13, 2026
e066383
fix instrumented suffixes in reports
willcl-ark Jan 13, 2026
3e6bec3
add clickable plotly links
willcl-ark Jan 13, 2026
321bb08
use corect path in index
willcl-ark Jan 13, 2026
65ac9b0
use scatter plot for leveldb compaction
willcl-ark Jan 14, 2026
b59ea9a
add debug logs to artifacts
willcl-ark Jan 14, 2026
097ddab
dynamic charts test
willcl-ark Jan 14, 2026
cc9095f
fix theme render order
willcl-ark Jan 14, 2026
833fbf8
add ruff and ty to flake
willcl-ark Jan 14, 2026
fa00d49
add ty.toml
willcl-ark Jan 14, 2026
2d958f7
add ruff.toml
willcl-ark Jan 14, 2026
ff14496
support a full IBD PR run
willcl-ark Jan 14, 2026
a7157ea
Generate static debug.log plots during report generation
willcl-ark Feb 24, 2026
7da70c7
Replace client-side debug.log charts with static images
willcl-ark Feb 24, 2026
08ef37e
Update bench/README.md to reflect current CLI interface
willcl-ark Feb 24, 2026
5ea33b9
Stop publishing debug.log.gz to gh-pages, link to CI artifacts instead
willcl-ark Feb 24, 2026
be1b2d4
Wait for Pages deployment before commenting on PR
willcl-ark Feb 24, 2026
81b957d
Sort PR results index numerically instead of lexicographically
willcl-ark Feb 24, 2026
fa5cdfc
set prune height to 1_000_000MB
willcl-ark Feb 25, 2026
f1dccd1
Include prune in nightly chart series key
willcl-ark Feb 26, 2026
9cb908e
Fix numeric sort crash on pr-main directory
willcl-ark Feb 26, 2026
acfa586
Restore debug log extraction for PNG plot generation
willcl-ark Feb 28, 2026
896efb3
use local bitcoin node to test region network issues
willcl-ark Mar 4, 2026
e402e28
pin nightly benchmark job order: 450 before 32000
willcl-ark Mar 5, 2026
a9d2d61
run fstrim before each benchmark for consistent SSD performance
willcl-ark Mar 5, 2026
a67b186
Revert "use local bitcoin node to test region network issues"
willcl-ark Mar 5, 2026
e6def88
fstrim the mount point, not a subdirectory
willcl-ark Mar 5, 2026
65edcc8
show manual nightly re-runs as scatter points on chart
willcl-ark Mar 6, 2026
b318990
Compare PR benchmarks against median of last 7 nightly runs
willcl-ark Mar 13, 2026
51fd6b8
merge manual nightly runs into their series on the chart
willcl-ark Mar 13, 2026
8956c2a
Add assumevalid=0 benchmark runs to PR workflow
willcl-ark Mar 17, 2026
43ba564
validation: collect block inputs in CoinsViewOverlay before ConnectBlock
andrewtoth Mar 7, 2026
619dd70
coins: track last accessed input using m_input_tail
andrewtoth Mar 7, 2026
fb34b4b
coins: introduce QuickHashHasher
andrewtoth Mar 7, 2026
1a284c6
coins: filter inputs spending outputs of same block in ProcessInput
andrewtoth Mar 7, 2026
0fb5a8c
coins: add ready flag to InputToFetch
andrewtoth Mar 7, 2026
404cbd3
coins: stop fetching before mutating base
andrewtoth Mar 7, 2026
67fa640
validation: add -inputfetchthreads configuration option
andrewtoth Apr 14, 2026
d520e55
coins: introduce thread pool in CoinsViewOverlay
andrewtoth Mar 8, 2026
9ba8f3a
coins: fetch inputs in parallel
andrewtoth Mar 7, 2026
34766ac
doc: update CoinsViewOverlay docstring to describe parallel fetching
andrewtoth Mar 7, 2026
444f775
test: add unit tests for CoinsViewOverlay::StartFetching
andrewtoth Mar 7, 2026
77bdb8c
fuzz: update harnesses to cover CoinsViewOverlay::StartFetching
andrewtoth Mar 7, 2026
b633d6e
fuzz: add coins_view_stacked fuzz harness to test concurrent leveldb …
andrewtoth Mar 13, 2026
6a8c5fd
consensus: add MIN_TXIN_SERIALIZED_SIZE and MAX_INPUTS_PER_BLOCK
andrewtoth Apr 30, 2026
bb89cd4
temp commit
andrewtoth Apr 30, 2026
ba094f2
coins: use SaltedTxidHasher for m_txids
andrewtoth Apr 30, 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