Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 99 additions & 18 deletions docs/docs/development/performance-measurements.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,32 @@ description: Performance measurement methodologies and results
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

import MidDockerCompose129 from './test-results/1.2.9/mid_profile/docker-compose.md';
import MidHugeAddress373kv129 from './test-results/1.2.9/mid_profile/huge-address-373k.md';
import MidHugeAddress16Mv129 from './test-results/1.2.9/mid_profile/huge-address-1.6M.md';

import MidDockerCompose129_pruned from './test-results/1.2.9/mid_profile/docker-compose-pruned.md';
import MidHugeAddress373kv129_pruned from './test-results/1.2.9/mid_profile/huge-address-373k-pruned.md';
import MidHugeAddress16Mv129_pruned from './test-results/1.2.9/mid_profile/huge-address-1.6M-pruned.md';

import AdvDockerCompose129 from './test-results/1.2.9/advanced_profile/docker-compose.md';
import AdvHugeAddress373kv129 from './test-results/1.2.9/advanced_profile/huge-address-373k.md';
import AdvHugeAddress16Mv129 from './test-results/1.2.9/advanced_profile/huge-address-1.6M.md';

import AdvDockerCompose129_pruned from './test-results/1.2.9/advanced_profile/docker-compose-pruned.md';
import AdvHugeAddress373kv129_pruned from './test-results/1.2.9/advanced_profile/huge-address-373k-pruned.md';
import AdvHugeAddress16Mv129_pruned from './test-results/1.2.9/advanced_profile/huge-address-1.6M-pruned.md';


import SingleDocker127 from './test-results/1.2.7/single-docker.md';
import DockerCompose127 from './test-results/1.2.7/docker-compose.md';

import SingleDocker126 from './test-results/1.2.6/single-docker.md';
import DockerCompose126 from './test-results/1.2.6/docker-compose.md';

import DockerCompose120 from './test-results/1.2.0/docker-compose.md';
import HugeAddress373kv120 from './test-results/1.2.0/huge-address-373k.md';

# Performance Measurements

This page documents load test results for different releases of `cardano-rosetta-java`, evaluating performance across various deployment scenarios.
Expand All @@ -30,41 +56,101 @@ To better understand the environments in which these results were obtained, plea

<details>
<summary>

### v1.2.9 (Jun 11, 2025)
</summary>
- [Release Notes](https://github.com/cardano-foundation/cardano-rosetta-java/releases/tag/1.2.9)

<details>
<summary>
**Mid-level Hardware Profile**
</summary>
**Machine Specs:** 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+

- [Release Notes](https://github.com/cardano-foundation/cardano-rosetta-java/releases/tag/1.2.9)
Maximum concurrency achieved for each modes:
<details>
<summary>
#### Pruning Enabled (`REMOVE_SPENT_UTXOS=true`)
</summary>
<Tabs>
<TabItem value="compose" label="Docker Compose" default>
<MidDockerCompose129_pruned />
</TabItem>
<TabItem value="huge-373k-v129" label="Huge Address (~373k txs)">
<MidHugeAddress373kv129_pruned />
</TabItem>
<TabItem value="huge-1.6M-v129" label="Huge Address (~1.6M txs)">
<MidHugeAddress16Mv129_pruned />
</TabItem>
</Tabs>
</details>

The following tests were conducted on a **mid-level** hardware profile with the following specifications: **8 cores, 8 threads, 48GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+**.
<details>
<summary>
#### Pruning Disabled (`REMOVE_SPENT_UTXOS=false`)
</summary>
<Tabs>
<TabItem value="adv_docker_compose129" label="Docker Compose" default>
<MidDockerCompose129 />
</TabItem>
<TabItem value="adv_docker_compose129_huge-373k-v129" label="Huge Address (~373k txs)">
<MidHugeAddress373kv129 />
</TabItem>
<TabItem value="adv_docker_compose129_huge-1.6M-v129" label="Huge Address (~1.6M txs)">
<MidHugeAddress16Mv129 />
</TabItem>
</Tabs>
</details>
</details>

import DockerCompose129 from './test-results/1.2.9/docker-compose.md';
import HugeAddress373kv129 from './test-results/1.2.9/huge-address-373k.md';
import HugeAddress16Mv129 from './test-results/1.2.9/huge-address-1.6M.md';
<details>
<summary>
**Advanced-level Hardware Profile**
</summary>
**Machine Specs:** 16 cores, 16 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+

Maximum concurrency achieved for each modes:
<details>
<summary>
#### Pruning Enabled (`REMOVE_SPENT_UTXOS=true`)
</summary>
<Tabs>
<TabItem value="compose" label="Docker Compose" default>
<DockerCompose129 />
<AdvDockerCompose129_pruned />
</TabItem>
<TabItem value="huge-373k-v129" label="Huge Address (~373k txs)">
<HugeAddress373kv129 />
<AdvHugeAddress373kv129_pruned />
</TabItem>
<TabItem value="huge-1.6M-v129" label="Huge Address (~1.6M txs)">
<HugeAddress16Mv129 />
<AdvHugeAddress16Mv129_pruned />
</TabItem>
</Tabs>
</details>

<details>
<summary>
#### Pruning Disabled (`REMOVE_SPENT_UTXOS=false`)
</summary>
<Tabs>
<TabItem value="adv_docker_compose129" label="Docker Compose" default>
<AdvDockerCompose129 />
</TabItem>
<TabItem value="adv_docker_compose129_huge-373k-v129" label="Huge Address (~373k txs)">
<AdvHugeAddress373kv129 />
</TabItem>
<TabItem value="adv_docker_compose129_huge-1.6M-v129" label="Huge Address (~1.6M txs)">
<AdvHugeAddress16Mv129 />
</TabItem>
</Tabs>
</details>
</details>

### v1.2.7 (Apr 29, 2025)
</details>

</summary>

import SingleDocker127 from './test-results/1.2.7/single-docker.md';
import DockerCompose127 from './test-results/1.2.7/docker-compose.md';
<details>
<summary>
### v1.2.7 (Apr 29, 2025)
</summary>

- [Release Notes](https://github.com/cardano-foundation/cardano-rosetta-java/releases/tag/1.2.7)

Expand All @@ -85,8 +171,6 @@ import DockerCompose127 from './test-results/1.2.7/docker-compose.md';

</summary>

import SingleDocker126 from './test-results/1.2.6/single-docker.md';
import DockerCompose126 from './test-results/1.2.6/docker-compose.md';

- [Release Notes](https://github.com/cardano-foundation/cardano-rosetta-java/releases/tag/1.2.6)

Expand All @@ -107,9 +191,6 @@ import DockerCompose126 from './test-results/1.2.6/docker-compose.md';

</summary>

import DockerCompose120 from './test-results/1.2.0/docker-compose.md';
import HugeAddress373kv120 from './test-results/1.2.0/huge-address-373k.md';

- [Release Notes](https://github.com/cardano-foundation/cardano-rosetta-java/releases/tag/1.2.0)

The following tests were conducted on a **mid-level** hardware profile with the following specifications: **8 cores, 8 threads, 48GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+**.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Data is taken from the test with spent UTXOs are retained for 30 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
|----|-------------------------|------------------|-----------|-----------|----------|------------------|-----------|
| 1 | /network/status | 1000 | 300ms | 430ms | 0 | 0.00% | 8673.16 |
| 2 | /account/balance | 675 | 718ms | 961ms | 0 | 0.00% | 2038.31 |
| 3 | /account/coins | 700 | 673ms | 853ms | 0 | 0.00% | 2039.88 |
| 4 | /block | 625 | 707ms | 924ms | 0 | 0.00% | 1764.33 |
| 5 | /block/transaction | 700 | 549ms | 727ms | 0 | 0.00% | 2439.62 |
| 6 | /search/transactions | 700 | 448ms | 590ms | 0 | 0.00% | 3009.91 |
| 7 | /construction/metadata | 1000 | 473ms | 713ms | 0 | 0.00% | 9783.88 |

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------------- | --------------- | -------- | -------- | ------- | -------------- | --------- |
| 1 | /network/status | 800 | 113ms | 142ms | 0 | 0.00% | 14370.82 |
| 2 | /account/balance | 325 | 793ms | 951ms | 0 | 0.00% | 671.91 |
| 3 | /account/coins | 275 | 812ms | 993ms | 0 | 0.00% | 569.68 |
| 4 | /block | 200 | 762ms | 916ms | 0 | 0.00% | 409.54 |
| 5 | /block/transaction | 200 | 787ms | 974ms | 0 | 0.00% | 417.31 |
| 6 | /search/transactions | 625 | 417ms | 555ms | 0 | 0.00% | 3069.85 |
| 7 | /construction/metadata | 800 | 143ms | 273ms | 0 | 0.00% | 13296.60 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../../advanced-configuration/pruning.md).

:::note SLA Adjustment for Extreme Load
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::
Data is taken from the test with spent UTXOs are retained for 30 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
|----|------------------|------------------|-----------|-----------|----------|------------------|-----------|
| 1 | /account/balance | 500 | 6952ms | 7651ms | 0 | 0.00% | 88.99 |
| 2 | /account/coins | 500 | 6897ms | 8181ms | 3 | 0.05% | 97.37 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under non pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../advanced-configuration/pruning.md).

:::note SLA Adjustment for Extreme Load
For this specific test with pruning disabled, the standard 1-second Service Level Agreement (SLA) is not achievable. Therefore, the SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 2 | 9209ms | 9209ms | 0 | 0.00% | 0.29 |
| 2 | /account/coins | 2 | 7419ms | 7437ms | 0 | 0.00% | 0.32 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../../advanced-configuration/pruning.md).

:::note SLA Adjustment for Extreme Load
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::
Data is taken from the test with spent UTXOs are retained for 30 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=129600`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
|----|------------------|------------------|-----------|-----------|----------|------------------|-----------|
| 1 | /account/balance | 500 | 146ms | 252ms | 0 | 0.00% | 7651.95 |
| 2 | /account/coins | 500 | 169ms | 330ms | 0 | 0.00% | 6335.54 |

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under non pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../advanced-configuration/pruning.md).


:::note SLA Adjustment for Extreme Load
For this specific test with pruning disabled, the standard 1-second Service Level Agreement (SLA) is not achievable. Therefore, the SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 0 | 0ms | 0ms | 0 | 0.00% | 0.00 |
| 2 | /account/coins | 20 | 9492ms | 9892ms | 0 | 0.00% | 2.50 |

23 changes: 0 additions & 23 deletions docs/docs/development/test-results/1.2.9/huge-address-373k.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

Data is taken from the test with spent UTXOs are retained for 7 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
|----|-------------------------|------------------|-----------|-----------|----------|------------------|------------|
| 1 | /network/status | 1000 | 169ms | 218ms | 0 | 0.00% | 11206.81 |
| 2 | /account/balance | 825 | 693ms | 954ms | 0 | 0.00% | 2295.26 |
| 3 | /account/coins | 725 | 654ms | 907ms | 0 | 0.00% | 2194.91 |
| 4 | /block | 575 | 811ms | 995ms | 0 | 0.00% | 1129.28 |
| 5 | /block/transaction | 550 | 737ms | 913ms | 0 | 0.00% | 1187.63 |
| 6 | /search/transactions | 675 | 314ms | 417ms | 0 | 0.00% | 4269.48 |
| 7 | /construction/metadata | 1000 | 197ms | 343ms | 0 | 0.00% | 14321.98 |
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
**Maximum concurrency achieved per endpoint**

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../../advanced-configuration/pruning.md).
:::note SLA Adjustment for Extreme Load
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::
Data is taken from the test with spent UTXOs are retained for 7 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 500 | 1304ms | 1710ms | 0 | 0.00% | 694.10 |
| 2 | /account/coins | 500 | 1184ms | 1551ms | 0 | 0.00% | 779.39 |
Original file line number Diff line number Diff line change
@@ -1,15 +1,4 @@
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under different pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../advanced-configuration/pruning.md).

#### Pruning Enabled (`REMOVE_SPENT_UTXOS=true`)

**Maximum concurrency achieved per endpoint**

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 500 | 1304ms | 1710ms | 0 | 0.00% | 694.10 |
| 2 | /account/coins | 500 | 1184ms | 1551ms | 0 | 0.00% | 779.39 |

#### Pruning Disabled (`REMOVE_SPENT_UTXOS=false`)
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under non pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../advanced-configuration/pruning.md).

:::note SLA Adjustment for Extreme Load
For this specific test with pruning disabled on an address with ~1.6M transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load. The results for `/account/balance` at concurrency 1 are reported despite slightly exceeding this adjusted SLA to provide a transparent view of the performance boundary.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../../advanced-configuration/pruning.md).
:::note SLA Adjustment for Extreme Load
The SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
:::
Data is taken from the test with spent UTXOs are retained for 7 days by setting `REMOVE_SPENT_UTXOS_LAST_BLOCKS_GRACE_COUNT=30240`

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 500 | 153ms | 414ms | 0 | 0.00% | 7012.95 |
| 2 | /account/coins | 500 | 184ms | 402ms | 0 | 0.00% | 5964.08 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under non pruning configurations. For details on pruning, see [Spent UTXO Pruning](../../../advanced-configuration/pruning.md).

:::note SLA Adjustment for Extreme Load
For this specific test with pruning disabled on an address with 373,000 transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load.
:::

**Maximum concurrency achieved per endpoint**

| ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
| --- | ---------------- | --------------- | -------- | -------- | ------- | -------------- | -------- |
| 1 | /account/balance | 4 | 6486ms | 7263ms | 0 | 0.00% | 1.02 |
| 2 | /account/coins | 8 | 9011ms | 9384ms | 0 | 0.00% | 1.20 |
Loading