# 3-Validator Cluster Benchmark Results

### Test Environment

| Parameter        | Value                           |
| ---------------- | ------------------------------- |
| **Topology**     | 3 validators + 1 VFN            |
| **Machine spec** | 8 vCPU / 16 GB RAM              |
| **Disk**         | 200 GB pd-balanced (4,200 IOPS) |
| **Accounts**     | 100k accounts                   |

### Load Test Results (transaction removal rate)

* **Before write buffer is full**: \~**11k TPS** ERC20 transfer
* **After write buffer is full**: \~**9.5k TPS** ERC20 transfer

<figure><img src="/files/oEoZjpppwL4bkv0bS8DP" alt="TPS chart before and after write buffer saturation"><figcaption><p>TPS over time</p></figcaption></figure>

<figure><img src="/files/pYfILdufs25lcesglr5x" alt="TPS detail chart"><figcaption><p>TPS detail</p></figcaption></figure>

***

### Bottleneck Analysis

#### Resource Utilization

**1. CPU**

* CPU was **not** the bottleneck (usage \~**800%** on a 16-core machine)
* Execution, Merkle computation, and other pipeline stages all completed within the block time (\~**200 ms**)

<figure><img src="/files/JzLd7lUswM8bgL9RCC8R" alt="CPU utilization chart"><figcaption><p>CPU utilization during load test</p></figcaption></figure>

**2. Memory**

* Memory grew continuously during the block cache fill phase, eventually reaching the **16 GB** limit

<figure><img src="/files/FPgB0mUng48eKo6r0YmQ" alt="Memory usage chart"><figcaption><p>Memory growth as block cache fills</p></figcaption></figure>

**3. Persistence (I/O)**

* Persistence latency was noticeably higher than the block time (\~**300 ms** vs \~**200 ms**)
* This caused the write buffer to accumulate and memory to grow
* Significant back-pressure appeared once the buffer reached the limit of **64**

<figure><img src="/files/S8zT4W96O6J5Hw19srXK" alt="I/O persistence latency chart"><figcaption><p>Persistence latency vs. block time</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.gravity.xyz/developer-resources/benchmark-results.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
