Benchmark: Gitaly with Reftables and Transactions
Objective
Benchmark Gitaly with Reftables+ Transactions enabled.
Scope
- Baseline: Gitaly
- Variant: Gitaly with Reftables + Transactions enabled
- Workloads: clone/fetch, push/write (small/large), RPC hot paths, GC/pack, repo create/delete, mixed read/write, concurrency scaling (repos × RPCs)
- EXT4 FS
Configuration:
Inside config.yml this needs to be declared for each gitaly instance that needs txn enabled
config:
# Whether transactions should be enabled.
transactions: true
To enable reftables for a specific repo, initialize the test repo within the repositories block in config.yml with
reference_backend: reftable
Test Matrix
- Concurrency:
- Repos: 1...5
- Parallel RPCs per repo: 1, 8, 32
- Repository shapes:
- Small repos (many loose objects/files)
- Medium repos (Decent number of commits, trees, branches)
- Large monorepos (large packfiles, deep history)
- Transactions Enabled
- Reftables Enabled/Disabled
- Cache state:
- Cold-cache (drop_caches) vs steady-state warm cache
- by default we use cold-cache to calculate worst-case performance
- Cold-cache (drop_caches) vs steady-state warm cache
Documentation Requirements
- Exact Gitaly, Git, kernel versions
Deliverables
- Reproducible benchmark runs using the framework from #6732
- Comparison tables/plots: baseline vs Transactions (per workload and concurrency level)
- Analysis summarizing:
- bottlenecks when lots of refs are used
- p95 latency per RPC
- Artifact bundle per run: raw results (JSON/CSV), system profile, flamegraphs
- Summary published to the Gitaly Wiki with links to artifacts
Edited by Emily Chui