PerformanceToolStabil
Benchmark Runner
Performance-Benchmarks mit statistischer Analyse, Regressionserkennung und CI-Integration.
Benchmark schreiben
benchmarks/sort_bench.velinvelin
use bench
@Benchmark
fn bench_quicksort() {
let data = generate_random_array(10000);
bench.iter(|| {
quicksort(data.clone())
});
}
@Benchmark
fn bench_mergesort() {
let data = generate_random_array(10000);
bench.iter(|| {
mergesort(data.clone())
});
}
@Benchmark(iterations = 1000)
fn bench_binary_search() {
let sorted = (0..10000).collect();
bench.iter(|| {
binary_search(sorted, 5000)
});
}Ausführen
# Alle Benchmarks ausführen
velin-bench run
# Bestimmte Benchmarks
velin-bench run --filter "sort"
# Mit Baseline vergleichen
velin-bench run --baseline main
# JSON-Output
velin-bench run --format json > results.jsonBeispiel-Output
Benchmark Results
=================
bench_quicksort
Time: 2.34 ms ± 0.12 ms
Ops/s: 427.35 ops/sec
Memory: 1.2 MB peak
bench_mergesort
Time: 3.12 ms ± 0.08 ms
Ops/s: 320.51 ops/sec
Memory: 2.4 MB peak
bench_binary_search
Time: 0.45 µs ± 0.02 µs
Ops/s: 2,222,222 ops/sec
Memory: 0 B allocated
Comparison vs baseline (main):
bench_quicksort: -5.2% faster ✓
bench_mergesort: +2.1% slower ⚠
bench_binary_search: unchangedFeatures
Warmup
Automatisches Aufwärmen vor Messung
Statistik
Mean, Median, Std Dev, Percentiles
Regression
Erkennt Performance-Verschlechterungen
Vergleich
Vergleich zwischen Git-Branches
CPU Cycles
Hardware Performance Counters
CI Gates
Blockiert Merges bei Regression
Konfiguration
velin.tomltoml
[tools.benchmark]
# Standardanzahl Iterationen
iterations = 100
# Warmup-Durchläufe
warmup = 10
# Regressions-Schwellwert (%)
regression_threshold = 5.0
# Baseline-Branch
baseline_branch = "main"
# Output-Format
format = "pretty" # oder "json", "csv"
# Benchmark-Verzeichnis
bench_dir = "benchmarks/"CI Integration
.github/workflows/bench.ymlyaml
- name: Run Benchmarks
run: |
velin-bench run --baseline origin/main --format json > results.json
- name: Check Regression
run: |
velin-bench check --threshold 5% --fail-on-regression
- name: Upload Results
uses: actions/upload-artifact@v3
with:
name: benchmark-results
path: results.json