q9f / eth2-bench-2020-06

preliminary, high-level eth2-client benchmarks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

✔️ Update: new benchmark available: Multi-client benchmark on Medalla testnet 2020/10/01


⚠️ Note, these numbers gathered below might contain a methodical uncertainty based on:

  • how the prysm binaries were compiled; apparently, there is an undocumented option to pass --config=release to bazel to enable optimized builds,
  • how the virtual machines competed for resources; apparently, creating all three VMs at the same time caused them to end up on the same physical host.

I'll do my best to publish a new report for all clients soon(tm) on the new Altona testnet. I'll double check the build and runtime flags with the client teams and consider a physical host. Stay tuned.

✔️ Update: new benchmark available: Multi-client benchmark on Altona testnet 2020/07/16


Multi-client benchmark on Witti testnet 2020/06/22

Preliminary, high-level ETH2-client benchmarks.

  • Lighthouse
  • Prysm
  • Teku

Report: ./res/2020-06-eth2-bench.pdf (PDF), raw data: ./dat (CSV), client logs: ./log (LOG).

report

Host systems (3x)

  • VPS: Scaleway DEV1-XL (*)
  • OS: Arch Linux, kernel 5.7.2-arch1-1
  • CPU: AMD EPYC 7281, 4 vCPUs
  • RAM: 12 GB
  • Disk: 120GB NVMe

*) Note, this is a preliminary, high-level benchmark that should be repeated in future on bare-metal machines after stable client-releases are available to eliminate potential performance invariances caused by virtualized systems.

Lighthouse

Prysm

Teku

Witti testnet

Metrics collected

  • time: Unix time in seconds
    • all: (Ruby) Time.now.to_i
  • db: Database size in bytes
    • Lighthouse: (Shell) du -bs $HOME/.lighthouse/beacon/chain_db/
    • Prysm: (Shell) du -bs $HOME/.eth2/beaconchaindata/
    • Teku: (Shell) du -bs $HOME/.local/share/teku/data/db/
  • mem: Resident memory in bytes
    • Lighthouse: (REST API) /node/health, .pid_mem_resident_set_size
    • Prysm: (Metrics) process_resident_memory_bytes
    • Teku: (Metrics) process_resident_memory_bytes
  • slot: Head slot number in 1
    • Lighthouse: (REST API) /beacon/head, .slot
    • Prysm: (gRPC API) /eth/v1alpha1/beacon/chainhead, .headSlot
    • Teku: (REST API) /beacon/head, .slot
  • bps: Slot sync each second in 1/second (*)
    • all: (Ruby) (h.to_f - prev_h.to_f) / dt
  • peers: Peer count in 1
    • Lighthouse: (REST API) /network/peer_count
    • Prysm: (gRPC API) /eth/v1alpha1/node/peers (counted)
    • Teku: (REST API) /network/peer_count

*) Note, due to different ways of processing incoming badges of blocks, this metric should be recomputed based on an average taken over 60 seconds.

Metrics derived (TBD)

  • Slot sync speed over time (moving average)
  • Database size over sync time
  • Database size over slot count (future projection: 1Y, 5Y)
  • Resident memory usage over sync time
  • Resident memory usage over time augmented with chain finality (external data)

About

preliminary, high-level eth2-client benchmarks

License:The Unlicense


Languages

Language:R 44.7%Language:Ruby 29.4%Language:Shell 25.9%