Benchmark: Gitaly with Reftables
Objective
Benchmark Gitaly with Reftables (w/o Transactions).
Scope
- Baseline: Gitaly on standard EXT4 without Reftables
- Gitaly with Reftables enabled on EXT4
- Workloads: The current mix of RPCs defined in master's
k6-benchmark.jsis a minimum workload that needs to be run. If additional workloads with different RPCs need to be run, start another report.
Configuration:
To enable reftables for a specific repo, initialize the test repo within the repositories block in config.yml with
reference_backend: reftable
Test Matrix
- The tests were run on baseline, reftables for the
gitlab-org/gitlabrepository - The simulation was done with prod max values in considerations (500 reads/s and 5 writes/s)
- r250
- [{target: 63, duration: '20s'}, {target: 125, duration: '10s'}, {target: 250, duration: '20s'}, {target: 125, duration: '10s'}]
- r500
- [{target: 125, duration: '20s'}, {target: 250, duration: '10s'}, {target: 500, duration: '20s'}, {target: 250, duration: '10s'}]
- r1000
- [{target: 250, duration: '20s'}, {target: 500, duration: '10s'}, {target: 1000, duration: '20s'}, {target: 500, duration: '10s'}]
- w3
- [{target: 1, duration: '20s'}, {target: 2, duration: '10s'}, {target: 3, duration: '20s'}, {target: 2, duration: '20s'}]
- w5
- [{target: 2, duration: '20s'}, {target: 3, duration: '10s'}, {target: 5, duration: '20s'}, {target: 3, duration: '20s'}]
- w10
- [{target: 3, duration: '20s'}, {target: 5, duration: '10s'}, {target: 10, duration: '20s'}, {target: 5, duration: '20s'}]
- r250 w3
- [{target: 63, duration: '20s'}, {target: 125, duration: '10s'}, {target: 250, duration: '20s'}, {target: 125, duration: '10s'}]
- [{target: 1, duration: '20s'}, {target: 2, duration: '10s'}, {target: 3, duration: '20s'}, {target: 2, duration: '20s'}]
- r500 w5
- [{target: 125, duration: '20s'}, {target: 250, duration: '10s'}, {target: 500, duration: '20s'}, {target: 250, duration: '10s'}]
- [{target: 2, duration: '20s'}, {target: 3, duration: '10s'}, {target: 5, duration: '20s'}, {target: 3, duration: '20s'}]
- r1000 w10
- [{target: 250, duration: '20s'}, {target: 500, duration: '10s'}, {target: 1000, duration: '20s'}, {target: 500, duration: '10s'}]
- [{target: 3, duration: '20s'}, {target: 5, duration: '10s'}, {target: 10, duration: '20s'}, {target: 5, duration: '20s'}]
- r1000 w10 (1s timeout)
- [{target: 250, duration: '20s'}, {target: 500, duration: '10s'}, {target: 1000, duration: '20s'}, {target: 500, duration: '10s'}]
- [{target: 3, duration: '20s'}, {target: 5, duration: '10s'}, {target: 10, duration: '20s'}, {target: 5, duration: '20s'}]
- r1000 w10 (5s timeout)
- [{target: 250, duration: '20s'}, {target: 500, duration: '10s'}, {target: 1000, duration: '20s'}, {target: 500, duration: '10s'}]
- [{target: 3, duration: '20s'}, {target: 5, duration: '10s'}, {target: 10, duration: '20s'}, {target: 5, duration: '20s'}]
- r500 w5 (+1M refs)
- [{target: 125, duration: '20s'}, {target: 250, duration: '10s'}, {target: 500, duration: '20s'}, {target: 250, duration: '10s'}]
- [{target: 2, duration: '20s'}, {target: 3, duration: '10s'}, {target: 5, duration: '20s'}, {target: 3, duration: '20s'}]
- r500 w5 (+5M refs)
- [{target: 125, duration: '20s'}, {target: 250, duration: '10s'}, {target: 500, duration: '20s'}, {target: 250, duration: '10s'}]
- [{target: 2, duration: '20s'}, {target: 3, duration: '10s'}, {target: 5, duration: '20s'}, {target: 3, duration: '20s'}]
Documentation Requirements
- Follow the standardized template
Deliverables
- Reproducible benchmark runs using the framework from #6732
- Comparison tables/plots: baseline vs Reftable (per workload and concurrency level)
- Analysis summarizing:
- bottlenecks
- Artifact bundle per run: raw results (JSON/CSV), system profile, flamegraphs
- Summary published to this issue with links to artifacts
Edited by Karthik Nayak