Versions Compared

Key

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

...

4-node QBFT chain with Forest DB

Current best results: 429

Caliper "open" test using caliper simple contract:

  •  1 caliper connected to a single node: 750 TPS
  •  2 calipers connected to individual nodes: 950 TPS
  •  2 calipers connected to their own node: 1200 TPS

Caliper ERC20 token transfer test:

  •  1 caliper connected to a single node: 520 TPS
  •  2 calipers connected to individual nodes: 570 TPS
  •  2 calipers connected to their own node: 645 TPS


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

...