# Benchmark Gerrit on your Google Cloud Axion C4A virtual machine

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/)
- [About Gerrit and Google Axion C4A](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/background/)
- [Make your Gerrit deployment accessible on Google Cloud Platform](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/firewall_setup/)
- [Provision a virtual machine on Google Cloud Platform to deploy Gerrit](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/instance/)
- [Install and configure Gerrit on a Google Axion C4A virtual machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/installation/)
- [Benchmark Gerrit on your Google Cloud Axion C4A virtual machine](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/benchmarking/)
- [Next Steps](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/_next-steps/)

## Download and install the benchmarking script
You’ll use a script to benchmark Gerrit performance on your C4A virtual machine (VM). The script exercises and times key Gerrit features and functions.

Clone the following repository into your VM:
```bash
cd $HOME
git clone [https://github.com/DougAnsonAustinTx/gerrit_test](https://github.com/DougAnsonAustinTx/gerrit_test)
```

## Run the benchmark script
Run the benchmark:
```bash
cd $HOME/gerrit_test
chmod 755 *.sh
sudo SYNTH_PROFILE=production_like REQUIRE_GERRIT_METRICS=true ./gerrit_perf_test.sh
```
The benchmark script runs through sample exercises that Gerrit supports and captures performance data from those exercises.

The script then places the data into a specified JSON file similar to (partially omitted for brevity):
```json
{
  "run": {
    "run_id": "20260630T032002Z",
    "timestamp_utc": "2026-06-30T03:29:40Z",
    "host": "douans01-gerrit-arm-a.c.arm-deveco-stedvsl-prd.internal",
    "os": "Ubuntu 24.04.4 LTS"
  },
  "software": {
    "java_version": "openjdk version \"21.0.11\" 2026-04-21 OpenJDK Runtime Environment (build 21.0.11+10-1-24.04.2-Ubuntu) OpenJDK 64-Bit Server VM (build 21.0.11+10-1-24.04.2-Ubuntu, mixed mode, sharing) ",
    "gerrit_version": "gerrit version 3.11.2",
    "gerrit_base_url": "[http://127.0.0.1:8080](http://127.0.0.1:8080)",
    "gerrit_test_http_user": "admin",
    "prometheus_url": "[http://127.0.0.1:9090](http://127.0.0.1:9090)",
    "gerrit_metrics_url": "[http://127.0.0.1:8080/plugins/metrics-reporter-prometheus/metrics](http://127.0.0.1:8080/plugins/metrics-reporter-prometheus/metrics)",
    "gerrit_metrics_probe_status": "ok",
    "gerrit_metrics_auth_mode": "bearer"
  },
  "workload": {
    "test_duration_seconds_per_step": 120,
    "concurrency_steps": "2,1,1 4,2,1 6,3,2 8,4,2",
    "legacy_single_step_defaults": {
      "rest_concurrency": 6,
      "git_clone_concurrency": 3,
      "git_push_concurrency": 2
    },
    "synthetic_profile": "production_like",
    "synthetic_projects": 8,
    "synthetic_initial_files_per_project": 300,
    "synthetic_initial_commits_per_project": 50,
    "synthetic_review_changes_per_project": 40,
    "synthetic_large_files_per_project": 8,
    "synthetic_large_file_kb": 1024
  },
  "startup_state": {
    "initial_gerrit_was_running": "true"
  },
  "operation_summary": [
    {
      "type": "git_clone",
      "count": 4371,
      "ok_count": 4371,
      "fail_count": 0,
      "min_ms": 102,
      "avg_ms": 239.0315717227179,
      "p50_ms": 207,
      "p90_ms": 408,
      "p95_ms": 448,
      "p99_ms": 519,
      "max_ms": 673
    },
    {
      "type": "git_push_refs_for",
      "count": 582,
      "ok_count": 582,
      "fail_count": 0,
      "min_ms": 61,
      "avg_ms": 135.446735395189,
      "p50_ms": 133,
      "p90_ms": 192,
      "p95_ms": 209,
      "p99_ms": 246,
      "max_ms": 323
    },
    {
      "type": "rest_change_query",
      "count": 44625,
      "ok_count": 44625,
      "fail_count": 0,
      "min_ms": 11,
      "avg_ms": 28.711753501400562,
      "p50_ms": 26,
      "p90_ms": 47,
      "p95_ms": 55,
      "p99_ms": 70,
      "max_ms": 205
    }
  ],
  // rest of file omitted for brevity...
}
```
You can process this JSON file to create a summary of the performance of Gerrit on the Axion C4A VM.

## Performance summary
The benchmark run completed successfully on the production-like profile with Gerrit metrics enabled. It recorded 49,578 measured client operations over four 120-second steps, with 49,578 successes and zero failures.

The benchmark gives a high-quality performance view: client latency, stepwise concurrency behavior, node CPU/memory/disk. Gerrit-side JVM, GC, Jetty, cache, queue, Git, REST, NoteDB, and receive-commits metrics are all present:

![Gerrit benchmark summary](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/analysis.png "Gerrit benchmark summary")

All 49,578 measured client-side operations succeeded. REST query latency remains low with a p99 of 70 ms. Clone is the dominant pressure point at a p99 of 519 ms, and push remains sub-second at a p99 of 246 ms:

![Client-side operation summary](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/client-summary.png "Client-side operation summary")

The useful capacity signal is the flattening throughput curve after step 2. CPU is already near saturation in step 2 at 96.7%, then rises to 99.5% in step 4. Latency continues rising: clone p99 increases from 221 ms in step 2 to 559 ms in step 4, while aggregate throughput only rises from 107.3 to 111.5 ops/sec:

![Stepwise concurrency behavior summary](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/stepwise-summary.png "Stepwise concurrency behavior summary")

The following chart shows host CPU pressure:

![CPU pressure summary](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/cpu-pressure.png "CPU pressure summary")

The following table lists Gerrit server-side correlation observations:

![Gerrit server-side correlation findings](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/gerrit-correlation.png "Gerrit server-side correlation findings")

The following table lists server metrics:

![Basic additional server metrics](https://learn.arm.com/learning-paths/servers-and-cloud-computing/gerrit-on-gcp/images/server-metrics.png "Basic additional server metrics")

## What you’ve accomplished
You’ve successfully deployed Gerrit on a Google Cloud C4A Axion Arm64 VM running Ubuntu 24.04 LTS, verified the web console, and measured its performance using a production-like benchmark profile. All operations completed with zero failures, and the results establish a practical capacity baseline for a single-node Gerrit deployment on Arm-based infrastructure.

To build on this foundation, you can explore multi-node Gerrit deployments, tune JVM flags for the Neoverse-V2 core, or compare performance across different C4A instance sizes to find the right balance of cost and throughput for your workload.
