# 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="https://1664081133-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtdkwV6IW7ZSjaMZNmkU%2Fuploads%2Fgit-blob-ba5ed8a690742400f0ce24df278f733559cd6b2d%2Fload-test-results-tps.png?alt=media" alt="TPS chart before and after write buffer saturation"><figcaption><p>TPS over time</p></figcaption></figure>

<figure><img src="https://1664081133-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtdkwV6IW7ZSjaMZNmkU%2Fuploads%2Fgit-blob-c17166b05a29ffa5285d81f217a797db50c6a268%2Fload-test-results-tps2.png?alt=media" 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="https://1664081133-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtdkwV6IW7ZSjaMZNmkU%2Fuploads%2Fgit-blob-e1d4c1fc6c384f9fc175a8dde50c098dc4a2b408%2Fload-test-results-cpu.png?alt=media" 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="https://1664081133-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtdkwV6IW7ZSjaMZNmkU%2Fuploads%2Fgit-blob-b7fa32db4cf8891a71072528622b24cedead1502%2Fload-test-results-memory.png?alt=media" 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="https://1664081133-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZtdkwV6IW7ZSjaMZNmkU%2Fuploads%2Fgit-blob-3d7522b431550b0c01351fa0a68d01895afe84bc%2Fload-test-results-io.png?alt=media" alt="I/O persistence latency chart"><figcaption><p>Persistence latency vs. block time</p></figcaption></figure>
