...
4-node QBFT chain with Forest DB
Current best results: 429 TPS
Caliper "open" test: 750-1200 TPS
Caliper ERC20 token transfer test: 500-
Setup:
- 4 QBFT validators
- Configuration:
Env:
BESU_OPTS=-XX:MaxRAMPercentage=70.0
CLI:
besu --discovery-enabled=false --Xdns-enabled=true --Xdns-update-enabled=true --min-gas-price=0 --data-path=./data --genesis-file=../genesis.json --rpc-http-api=ETH,QBFT,ADMIN,NET --rpc-ws-api=ETH,QBFT,ADMIN,NET --metrics-port=6060 --logging=INFO --rpc-http-enabled=true --rpc-ws-enabled=true --graphql-http-enabled --metrics-enabled=true --remote-connections-limit-enabled=false --tx-pool-disable-locals --tx-pool=sequenced --tx-pool-limit-by-account-percentage=0.55 --rpc-http-max-active-connections=300 --data-storage-format=FOREST --cache-last-blocks=32
- Besu start logs:
# Java: -ibmcorporation-eclipseopenj9vm-java-17
# Maximum heap size: 7.00 GB
# OS: linux-x86_64
# glibc: 2.35
# jemalloc: 5.2.1-0-gea6b3e973b477b8061e0076bb257dbd7f3faa756
# Total memory: 30.83 GB
# CPU cores: 8 - Pod limits/requests:
Limits:
cpu: 4
memory: 10Gi
Requests:
cpu: 2500m
memory: 5Gi
- K8S node size:
- m6i.2xlarge
- gp3 storage
Capacity:
attachable-volumes-aws-ebs: 39
cpu: 8
ephemeral-storage: 104845292Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 32329184Ki
...
- 4 nodes running in the same AWS AZ4 caliper
- Caliper instances running at 110 TPS each, on a single on m6a.2xlarge EC2 instance in the same AWS region (latency to nodes ~ 5ms)
- I ran 4 caliper instances to emulate load balancing across the nodes. Each caliper was hard coded to an individual QBFT node Each caliper had its own signing key to avoid nonce issues
Genesis file:
{
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"config": {
"berlinBlock": 0,
"chainId": 90001,
"qbft": {
"blockperiodseconds": 2,
"epochlength": 30000,
"requesttimeoutseconds": 10
}
},
"difficulty": "0x1",
"extraData": "0xf83aa00000000000000000000000000000000000000000000000000000000000000000d5943edcd4d1ea9fe0b8d5e438fb8e8a5d138214479ac080c0",
"gasLimit": "0x174876e800",
"mixhash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365"
}
...
test:
name: simple
description: >-
This is an example benchmark for Caliper, to test the backend DLT's
performance with simple account opening & querying transactions.
workers:
number:1
rounds:
- label: open
description: >-
Test description for the opening of an account through the deployed
contract.
txNumber:*number-of-accounts
rateControl:
type: fixed-rate
opts:
tps:110 750 # tps for opening the configured number of accounts
workload:
module: benchmarks/scenario/simple/open.js
arguments:*simple-args
...