[go: up one dir, main page]

Skip to content

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