Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
15b085e
benchcoin: add tooling
willcl-ark Dec 23, 2025
6fbb169
don't compare to master in prs
willcl-ark Jan 7, 2026
2fbc59f
only run single bins in prs
willcl-ark Jan 7, 2026
1b1a22e
rebase at 0100 GMT
willcl-ark Jan 8, 2026
519eccb
make charts taller
willcl-ark Jan 8, 2026
b4afda9
update machine configs and charts
willcl-ark Jan 8, 2026
9a52aa7
fix nightly chart display and machine spec detection
willcl-ark Jan 9, 2026
5a1a5ba
chart: make chart series dynamic and unique
willcl-ark Jan 9, 2026
c28a522
rename history file
willcl-ark Jan 9, 2026
65380f5
use better colours in charts
willcl-ark Jan 9, 2026
b55c49e
don't use inline html
willcl-ark Jan 10, 2026
92aaf50
use commit date in chart data points
willcl-ark Jan 12, 2026
f49c083
use nix flake in both publish workflow steps
willcl-ark Jan 13, 2026
c2bb5f4
fix nightly-history mismatch
willcl-ark Jan 13, 2026
9f52749
fix instrumented suffixes in reports
willcl-ark Jan 13, 2026
7db5f8d
add clickable plotly links
willcl-ark Jan 13, 2026
ce7d03a
use corect path in index
willcl-ark Jan 13, 2026
5710e5a
use scatter plot for leveldb compaction
willcl-ark Jan 14, 2026
708dad5
add debug logs to artifacts
willcl-ark Jan 14, 2026
10d788b
dynamic charts test
willcl-ark Jan 14, 2026
886de6f
fix theme render order
willcl-ark Jan 14, 2026
77ae8c2
add ruff and ty to flake
willcl-ark Jan 14, 2026
54ae2c6
support a full IBD PR run
willcl-ark Jan 14, 2026
80ebcd3
Generate static debug.log plots during report generation
willcl-ark Feb 24, 2026
5c89d46
Replace client-side debug.log charts with static images
willcl-ark Feb 24, 2026
100ac43
Update bench/README.md to reflect current CLI interface
willcl-ark Feb 24, 2026
6c8b11d
Stop publishing debug.log.gz to gh-pages, link to CI artifacts instead
willcl-ark Feb 24, 2026
a6e93df
Wait for Pages deployment before commenting on PR
willcl-ark Feb 24, 2026
a945f10
Sort PR results index numerically instead of lexicographically
willcl-ark Feb 24, 2026
36469da
set prune height to 1_000_000MB
willcl-ark Feb 25, 2026
c340991
Include prune in nightly chart series key
willcl-ark Feb 26, 2026
e611e26
Fix numeric sort crash on pr-main directory
willcl-ark Feb 26, 2026
db4978a
Restore debug log extraction for PNG plot generation
willcl-ark Feb 28, 2026
6ec133e
use local bitcoin node to test region network issues
willcl-ark Mar 4, 2026
f468997
pin nightly benchmark job order: 450 before 32000
willcl-ark Mar 5, 2026
5c5b104
run fstrim before each benchmark for consistent SSD performance
willcl-ark Mar 5, 2026
989dbd1
Revert "use local bitcoin node to test region network issues"
willcl-ark Mar 5, 2026
081b20a
fstrim the mount point, not a subdirectory
willcl-ark Mar 5, 2026
28d3cd4
show manual nightly re-runs as scatter points on chart
willcl-ark Mar 6, 2026
3ccd371
Compare PR benchmarks against median of last 7 nightly runs
willcl-ark Mar 13, 2026
6fa2431
merge manual nightly runs into their series on the chart
willcl-ark Mar 13, 2026
5abe850
Add assumevalid=0 benchmark runs to PR workflow
willcl-ark Mar 17, 2026
2d8f225
validation: collect block inputs in CoinsViewOverlay before ConnectBlock
andrewtoth Mar 7, 2026
6a527ad
coins: filter same-block spends in StartFetching
andrewtoth May 1, 2026
009193a
consensus: add MIN_TXIN_SERIALIZED_SIZE and MAX_INPUTS_PER_BLOCK
andrewtoth Apr 30, 2026
2cfcb34
coins: add ready flag to InputToFetch
andrewtoth May 1, 2026
466c521
coins: stop fetching before mutating base
andrewtoth Mar 7, 2026
8a1b472
validation: add -inputfetchthreads configuration option
andrewtoth Apr 14, 2026
3a91a79
coins: introduce thread pool in CoinsViewOverlay
andrewtoth Mar 8, 2026
1e25a05
coins: fetch inputs in parallel
andrewtoth May 2, 2026
124489d
doc: update CoinsViewOverlay docstring to describe parallel fetching
andrewtoth Mar 7, 2026
055f150
test: add unit tests for CoinsViewOverlay::StartFetching
andrewtoth Mar 7, 2026
c73590e
fuzz: update harnesses to cover CoinsViewOverlay::StartFetching
andrewtoth Mar 7, 2026
07a4d80
fuzz: add coins_view_stacked fuzz harness to test concurrent leveldb …
andrewtoth Mar 13, 2026
71021cd
consensus: Use Coin span in GetP2SHSigOpCount
sedited Apr 18, 2025
5db54d4
consensus: Use Coin span in GetTransactionSigOpCost
sedited Apr 18, 2025
e8af61c
consensus: Use Coin span in CheckTxInputs
sedited Apr 18, 2025
1e8e369
validation: Consolidate AccessCoins calls in PreChecks
sedited Mar 24, 2026
4b96931
validation: Use vector of outputs instead of CCoinsViewCache in Check…
sedited Apr 18, 2025
4016fc7
validation: Add SpendBlock function
sedited Apr 19, 2025
792bf5f
validation: Move SetBestBlock out of ConnectBlock
sedited Apr 20, 2025
e94d7ff
validation: Move coin existence and spend check to SpendBlock
sedited Apr 18, 2025
141dcd4
doc: Add docstrings for ConnectBlock and SpendBlock
sedited Apr 21, 2025
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