/
Hyperledger Besu Performance with Caliper

Hyperledger Besu Performance with Caliper


Suyash Nayan

Github: github.com/7suyash7

LinkedIn: Suyash Nayan

PRs in Hyperledger Besu: https://github.com/hyperledger/besu/pulls?q=is%3Apr+author%3A7suyash7+is%3Aclosed

PRs in Hyperledger Caliper:

https://github.com/hyperledger/caliper-benchmarks/pull/252

https://github.com/hyperledger/caliper/pull/1506


Learnings and Notes

Blog Post:

https://medium.com/web3labs/benchmarking-hyperledger-besus-qbft-network-with-hyperledger-caliper-7700a70206e3

Notes

Command to run gas-free IBFT Network

//node 1
besu --data-path=data --genesis-file=../genesis.json --rpc-http-enabled --rpc-ws-enabled=true --rpc-ws-port=8645 --rpc-http-api=ETH,NET,IBFT --host-allowlist="*" --rpc-http-cors-origins="all" --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

// node 2
besu --data-path=data --genesis-file=../genesis.json --bootnodes=enode://608604d28780cbb86fa2d588efdddb906462b9432407010d7e5ed56596354c1930fdfda118aed6b85aa893d023d36bbde3d137d9b986cfa22c25f914f2d09347@127.0.0.1:30303 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --rpc-ws-enabled=true --rpc-ws-port=8646 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546 --tx-pool-limit-by-account-percentage=1 ---min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

// node 3
besu --data-path=data --genesis-file=../genesis.json --bootnodes=enode://608604d28780cbb86fa2d588efdddb906462b9432407010d7e5ed56596354c1930fdfda118aed6b85aa893d023d36bbde3d137d9b986cfa22c25f914f2d09347@127.0.0.1:30303 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --rpc-ws-enabled=true --rpc-ws-port=8647 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547 --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

//node 4
besu --data-path=data --genesis-file=../genesis.json --bootnodes=enode://608604d28780cbb86fa2d588efdddb906462b9432407010d7e5ed56596354c1930fdfda118aed6b85aa893d023d36bbde3d137d9b986cfa22c25f914f2d09347@127.0.0.1:30303 --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,IBFT --rpc-ws-enabled=true --rpc-ws-port=8648 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548 --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

Make sure to replace the Enode URL.

Command to run QBFT gas-free network:

// node 1
besu --data-path=Node-1/data --genesis-file=genesis.json --rpc-http-enabled --rpc-ws-enabled=true --rpc-ws-port=8645 --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

// node 2
besu --data-path=Node-2/data --genesis-file=genesis.json --bootnodes=enode://08782c0dfe655c4cc702d3a12d5e1fb34b4450ea5456aa39dad82d72fc7bc17184361a010dad402c00df1bf3f40686c31595df07e8dfe1e7b283ec016e6a6da2@127.0.0.1:30303 --p2p-port=30304 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --rpc-ws-enabled=true --rpc-ws-port=8646 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8546 --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

// node 3
besu --data-path=Node-3/data --genesis-file=genesis.json --bootnodes=enode://08782c0dfe655c4cc702d3a12d5e1fb34b4450ea5456aa39dad82d72fc7bc17184361a010dad402c00df1bf3f40686c31595df07e8dfe1e7b283ec016e6a6da2@127.0.0.1:30303 --p2p-port=30305 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --rpc-ws-enabled=true --rpc-ws-port=8647 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8547 --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57

// node 4
besu --data-path=Node-4/data --genesis-file=genesis.json --bootnodes=enode://08782c0dfe655c4cc702d3a12d5e1fb34b4450ea5456aa39dad82d72fc7bc17184361a010dad402c00df1bf3f40686c31595df07e8dfe1e7b283ec016e6a6da2@127.0.0.1:30303 --p2p-port=30306 --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --rpc-ws-enabled=true --rpc-ws-port=8648 --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=8548 --tx-pool-limit-by-account-percentage=1 --min-gas-price=0 --tx-pool-max-size=4096 --miner-enabled=true --miner-coinbase=0x627306090abaB3A6e1400e9345bC60c78a8BEf57



To quickly clear the network data:

rm -rf Node-1/data/DATABASE_METADATA.json && rm -rf Node-1/data/caches/ && rm -rf Node-1/data/database/
rm -rf Node-2/data/DATABASE_METADATA.json && rm -rf Node-2/data/caches/ && rm -rf Node-2/data/database/
rm -rf Node-3/data/DATABASE_METADATA.json && rm -rf Node-3/data/caches/ && rm -rf Node-3/data/database/
rm -rf Node-4/data/DATABASE_METADATA.json && rm -rf Node-4/data/caches/ && rm -rf Node-4/data/database/



Command to run Caliper:

npx caliper bind --caliper-bind-sut besu:latest

npx caliper launch manager \
    --caliper-benchconfig benchmarks/scenario/ERC-20/config.yaml \
    --caliper-networkconfig networks/besu/QBFT-Network/ERC20NetworkConfig.json \
    --caliper-flow-skip-install \
    --caliper-workspace .


Setting up a Gas Free Network (Recommended Settings): 

“To avoid the limitation of gas consumption in smart contract deployment and transaction execution, we configured all Besu blockchain networks to be gas-free by setting “gasLimit” to the maximum “0x1fffffffffffff”, “contractSizeLimit” to the maximum 2147483647, and the node startup option “min-gas-price” to 0. Also, we set the difficulty to the minimum “0x1” and the transaction pool queue size to the default 4096.”

Running Async Profiler for more information about Besu:

#!/bin/bash
# Start the Besu node
besu --data-path=Node-1/data --genesis-file=genesis.json --rpc-http-enabled --rpc-ws-enabled=true --rpc-ws-port=8546 --rpc-ws-host=0.0.0.0 --p2p-host=51.15.132.70 --rpc-http-host=0.0.0.0 --rpc-http-api=E>

# Get the PID of the Besu process
BESU_PID=$!

# Start async-profiler
async-profiler/profiler.sh -d 120 -f async-profiler/output.html $BESU_PID

Setting up Prometheus and Grafana to monitor Besu:

Docs: https://besu.hyperledger.org/23.4.0/public-networks/how-to/monitor/metrics

Grafana: https://grafana.com/grafana/dashboards/16455-besu-full/

Node-Exporter: https://grafana.com/grafana/dashboards/1860-node-exporter-full/


Mentor(s) Names and Contact Info

George Tebrean (Web3 Labs)
email: george@web3labs.com / tebreangeorge@gmail.com
Discord: gdev

Nischal Sharma (Web3 Labs)
email:
nischal@web3labs.com 
Discord:
nicks1106





Related content

Deliverables and Learnings - Performance analysis and Benchmarking of Besu using Caliper with complex workloads
Deliverables and Learnings - Performance analysis and Benchmarking of Besu using Caliper with complex workloads
More like this
Project Road Map - Performance analysis and benchmarking of Besu using Caliper with complex workloads
Project Road Map - Performance analysis and benchmarking of Besu using Caliper with complex workloads
More like this
Performance analysis and Benchmarking of Besu using Caliper with complex workloads
Performance analysis and Benchmarking of Besu using Caliper with complex workloads
More like this
2019-04-03 Minutes
2019-04-03 Minutes
More like this
QBFT Performance
QBFT Performance
More like this
2019 Q2 Hyperledger Caliper
2019 Q2 Hyperledger Caliper
More like this