[go: up one dir, main page]

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

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