Skip to content

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.js is 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/gitlab repository
  • 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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information