7.6 KiB
Criterion Benchmarks
This file records the Criterion-backed benchmark suite for
aria2-rust-pro.
Purpose
This project needs a repeatable benchmark surface in addition to assertion-style regression tests. This suite converts the existing synthetic BT/RPC pressure patterns into Criterion benchmarks so later tranches can compare revisions and resource-limit tuning with the same workload shape.
Bench Target
- crate:
crates/aria2-rust-pro-tests - bench:
rpc_pressure
Current Coverage
The current suite measures nine deterministic scenarios:
rpc_tell_status_pressure- 64-task and 128-task BT-like dispatcher loads
- repeated
aria2.tellStatuscalls under runtime tick churn
rpc_mixed_pressure- 96-task and 192-task BT-like dispatcher loads
- mixed
aria2.tellStatus,aria2.tellActive, andaria2.tellGlobalStatbatches
runtime_snapshot_pressure- 64 / 128 / 256 download in-memory engine setups
- repeated scheduler runs plus
runtime_instrumentation_snapshot()capture
rpc_speed_limit_pressure- 32-task and 64-task BT-like dispatcher loads
- active
changeGlobalOption/changeOptionspeed caps - repeated
tellStatusplustellGlobalStatunder clamped runtime speeds
scheduler_backpressure_pressure- 64-task and 128-task in-memory engine setups
- mixed active/waiting/error groups
- repeated scheduler runs plus runtime instrumentation under differing
disk-cachebudgets
live_http_transfer_contention_pressure- loopback live HTTP transfer via
ReqwestHttpConnectorandConnectorBackedDownloader - 16 KiB segmented HTTP downloads that force bootstrap
206plus follow-up range requests - comparison between a loose-cap runtime and a tight
max-overall-download-limitruntime so execution-layer throttling is measured instead of only inferred from RPC snapshots
- loopback live HTTP transfer via
live_http_multi_download_contention_pressure- three concurrent loopback live HTTP downloads
- each download still uses the existing CLI/runtime wiring, but all three contend against one local segment server at once
- compares loose-cap vs tight-cap runtime configuration under aggregate multi-download contention
rpc_shared_runtime_fairness_pressure- three-way and four-way BT-like dispatcher loads inside one runtime
- one constrained gid completes, then the remaining active gids are expected to inherit a larger share of the global speed cap
- verifies same-runtime cross-download rebalancing rather than only per-download segment throttling or separate parallel invocations
live_http_shared_runtime_multi_download_pressure- three loopback live HTTP downloads registered into one invocation/runtime
- uses the shared CLI runtime path rather than separate parallel invocations
- compares loose-cap vs tight-cap runtime configuration for same-runtime live transfer behavior
- now also includes a six-download
tight_cap_6wayvariant so shared-runtime cap behavior is measured beyond the original 3-download / 16 KiB shape - now also includes
cache_pressure_6way_256k, which raises per-download transfer size while constrainingdisk-cacheso shared-runtime cache pressure is represented in the same benchmark family
Commands
Canonical local report refresh:
rtk cargo run --manifest-path .\xtask\Cargo.toml -- perf collect-local-comparison
pwsh ./scripts/perf/collect_local_comparison.ps1
Compile-only verification:
rtk cargo bench --manifest-path .\Cargo.toml -p aria2-rust-pro-tests --bench rpc_pressure --no-run
Short local run:
rtk cargo bench --manifest-path .\Cargo.toml -p aria2-rust-pro-tests --bench rpc_pressure -- --sample-size 10 --measurement-time 0.05 --warm-up-time 0.05
First Short Run Snapshot
Short local run on this workspace produced the following indicative timings:
rpc_tell_status_pressure/tell_status/641.3318 ms .. 1.3459 ms- throughput
190.21 Kelem/s .. 192.22 Kelem/s
rpc_tell_status_pressure/tell_status/1282.8581 ms .. 2.8726 ms- throughput
178.24 Kelem/s .. 179.14 Kelem/s
rpc_mixed_pressure/mixed_rpc/9659.918 us .. 64.561 us- throughput
278.81 Kelem/s .. 300.41 Kelem/s
rpc_mixed_pressure/mixed_rpc/19278.663 us .. 83.252 us- throughput
216.21 Kelem/s .. 228.82 Kelem/s
runtime_snapshot_pressure/runtime_snapshot/648.3619 us .. 9.0689 us
runtime_snapshot_pressure/runtime_snapshot/12815.452 us .. 17.835 us
runtime_snapshot_pressure/runtime_snapshot/25631.072 us .. 33.087 us
rpc_speed_limit_pressure/speed_limit/3264.896 us .. 66.191 us- throughput
181.29 Kelem/s .. 184.91 Kelem/s
rpc_speed_limit_pressure/speed_limit/6490.733 us .. 93.649 us- throughput
128.14 Kelem/s .. 132.26 Kelem/s
scheduler_backpressure_pressure/backpressure/6410.917 us .. 12.478 us- throughput
5.1290 Melem/s .. 5.8625 Melem/s
scheduler_backpressure_pressure/backpressure/12819.792 us .. 21.039 us- throughput
6.0839 Melem/s .. 6.4673 Melem/s
live_http_transfer_contention_pressure/live_http_transfer/loose_cap38.640 ms .. 39.143 ms- throughput
408.76 KiB/s .. 414.07 KiB/s
live_http_transfer_contention_pressure/live_http_transfer/tight_cap41.793 ms .. 48.988 ms- throughput
326.61 KiB/s .. 382.83 KiB/s
These are not cross-machine release numbers. They are the first local benchmark local benchmark anchor so later tuning and regressions can be compared against a stable local benchmark driver. The new live HTTP group is still loopback-local rather than internet-realistic, but it now exercises the segmented execution path with real socket I/O instead of only scheduler-facing synthetic churn.
live_http_multi_download_contention_pressure/multi_live_http_transfer/loose_cap105.63 ms .. 106.46 ms- throughput
450.86 KiB/s .. 454.43 KiB/s
live_http_multi_download_contention_pressure/multi_live_http_transfer/tight_cap105.13 ms .. 105.52 ms- throughput
454.90 KiB/s .. 456.56 KiB/s
rpc_shared_runtime_fairness_pressure/shared_runtime_fairness/three_way_rebalance70.687 us .. 72.082 us- throughput
166.48 Kelem/s .. 169.76 Kelem/s
rpc_shared_runtime_fairness_pressure/shared_runtime_fairness/four_way_rebalance95.853 us .. 96.893 us- throughput
165.13 Kelem/s .. 166.92 Kelem/s
live_http_shared_runtime_multi_download_pressure/shared_runtime_live_http_transfer/loose_cap107.57 ms .. 108.23 ms- throughput
443.49 KiB/s .. 446.23 KiB/s
live_http_shared_runtime_multi_download_pressure/shared_runtime_live_http_transfer/tight_cap118.77 ms .. 120.35 ms- throughput
398.83 KiB/s .. 404.14 KiB/s
live_http_shared_runtime_multi_download_pressure/shared_runtime_live_http_transfer/tight_cap_6way234.36 ms .. 236.30 ms- throughput
406.26 KiB/s .. 409.63 KiB/s
live_http_shared_runtime_multi_download_pressure/shared_runtime_live_http_transfer/cache_pressure_6way_256k96.98 ms .. 99.12 ms- throughput
15.133 MiB/s .. 15.466 MiB/s
Intended Next Extension
This suite now mixes synthetic pressure and local loopback transfer. The next tranche should attach:
- comparisons against the C++ aria2 reference and current Pro Core
- further larger or more realistic same-runtime live transfer workloads beyond the new 6-download tight-cap and cache-pressure anchors
- stronger disk-cache and backpressure scenarios with larger transfer/runtime contention
- original C++ aria2 / current Pro Core comparison notes
- memory and file-descriptor measurements recorded beside benchmark output