Measure block building time of base-mainnet history blocks and calculate distributions
AWS i3en.3xlarge, 1 node per 1 machine
12 vCPU, 96GiB Memory, 1 x 7500 NVMe SSD
- op-node: https://github.com/testinprod-io/optimism/tree/engine-api-timing
- Based on op-node/v1.7.5
- Only changed engine API timing logs to Debug level.(0c820a9)
- op-geth: v1.101315.0
- op-reth: v0.2.0-beta.7
- Built with
make maxperf-op
- Built with
-
op-node
/home/ubuntu/optimism/op-node/bin/op-node \ --l1=$L1_ENDPOINT \ --l1.beacon=$L1_BEACON_ENDPOINT \ --l2=$L2_ENDPOINT \ --l2.jwt-secret=$JWT_SECRET \ --network=base-mainnet \ --verifier.l1-confs=0 \ --rpc.addr=127.0.0.1 \ --rpc.port=9545 \ --p2p.listen.ip=0.0.0.0 \ --l1.trustrpc=true \ --log.format=json \ --log.level=debug \ --p2p.discovery.path=$P2P_DISCOVERY_DB \ --p2p.peerstore.path=$P2P_DISCOVERY_DB \ --p2p.disable=true \ --l1.rpckind=erigon 2>&1 | tee /mnt/nvme/logs/op-node.log
-
op-geth
/home/ubuntu/op-geth/build/bin/geth \ --datadir=$OP_GETH_DB \ --http \ --http.addr=127.0.0.1 \ --http.port=8545 \ --http.corsdomain=* \ --http.vhosts=* \ --authrpc.addr=127.0.0.1 \ --authrpc.port=8551 \ --authrpc.vhosts=* \ --rollup.disabletxpoolgossip=true \ --http.api=eth,admin,debug \ --authrpc.jwtsecret=$JWT_SECRET \ --op-network=base-mainnet \ --gcmode=$GCMODE \ --verbosity=4 \ --nodiscover \ --cache=8192 \ --log.format=json \ --log.file=/mnt/nvme/logs/op-geth.log
GCMODE
isarchive
for archive nodes andfull
for full nodes- Used PebbleDB as DB engine.
-
op-reth
- command
op-reth node \ --chain base \ --rollup.sequencer-http https://mainnet-sequencer.base.org \ --http \ --ws \ --authrpc.port 8551 \ --authrpc.jwtsecret $JWT_SECRET \ --disable-discovery \ --datadir $OP_RETH_DB \ --log.file.format json \ --log.file.directory /mnt/nvme/logs \ --log.file.max-size 2024 \ --log.file.max-files 1000 \ --config /home/ubuntu/reth.toml -vvvv
- config
[prune] block_interval = 999999999
- This is to fix paradigmxyz/reth#7500
- command
- Run op-node and op-geth/op-reth.
- Derive base-mainnet chain from L1.
- Left engine API timing logs of op-node.
- Parse op-node logs to measure block building time.
- Definition of Block building time:
- op-node calls 4 engine API requests to build a block:
FCU
-GetPayload
-NewPayload
-FCU
. total_time
= lastFCU
's response timestamp - firstFCU
's request timestamp- This definition is almost equal to Base's benchmark
- op-node calls 4 engine API requests to build a block:
python parse_logs.py
- Definition of Block building time:
- Calculate result distribution by
stats.ipynb
Measure block building time for following cases
- op-geth
- Archive node from genesis
- Full node from genesis
- Archive node from snapshot(
base-mainnet-archive-1714488087.tar.gz
) - Full node from snapshot(
base-mainnet-full-1715926911.tar.gz
)
- op-reth
- Archive node from genesis