Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The configuration settings below provide a consistent setup for collaboration on QBFT performance work. For ease of collaboration, all performance tests are being done using Caliper (see config below). Performance for a QBFT chain is not strictly "how fast does the chain go" or "what TPS can be achieved". A chain can peak at higher TPS's for a short period of time, but then blow its TX pool due to growth beyond the TX pool size. The results below are for continuous, stable operation. Typically this means no less than 10,000 transactions per caliper run (10k is usually enough to blow the TX pool if you push it too hard).

4-node QBFT chain with Forest DB

Current best results: 429 TPS

Setup:

  • 4 QBFT validators
  • Configuration:
    • 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

  • K8S node size: 
    • Capacity:

        attachable-volumes-aws-ebs:  39

        cpu:                         8

        ephemeral-storage:           104845292Ki

        hugepages-1Gi:               0

        hugepages-2Mi:               0

        memory:                      32329184Ki

Deployment:

  • 4 nodes running in the same AWS AZ
  • 4 caliper instances running at 110 TPS each, on a single 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

Caliper scenario (4 instances running with this config):

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 # tps for opening the configured number of accounts

      workload:

        module: benchmarks/scenario/simple/open.js

        arguments:*simple-args