Skip to content

Benchmark: Gitaly with Raft, Reftables and Transactions

Objective

Benchmark Gitaly with Raft + Reftabled + Transactions enabled.

Scope

  • Baseline: Gitaly
  • Variant: Gitaly with Raft + 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:

To be declared in each gitaly instance block

 config:
      # Whether transactions should be enabled.
      transactions: true
      raft: 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)
  • Raft Enabled
  • Transactions Enabled
  • Reftables Enabled/Disabled
  • Cache state:
    • Cold-cache (drop_caches) vs steady-state warm cache

Documentation Requirements

  • Follow standardized results template

Deliverables

  • Reproducible benchmark runs using the framework from #6732
  • Comparison tables/plots: baseline vs Transactions (per workload and concurrency level)
  • Analysis summarizing:
    • bottlenecks
    • snapshot latencies and impact of files and directories on snapshot performance
    • p95 latency per RPC
    • impact of large number of refs
  • Artifact bundle per run: raw results (JSON/CSV), system profile, flamegraphs
  • Summary published to this issue with links to artifacts
Edited by Emily Chui
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information