Diablo Blockchain Benchmark Suite

Evaluating blockchains under realistic application workloads

Download this project as a .zip file Download this project as a tar.gz file

In order to replicate the performance graphs of Diablo-v2: A Benchmark for Blockchain Systems, one needs to replicate the different configuration settings as detailed in the AWS experiments below and to install and run Diablo and the blockchains on the corresponding machines of each configuration before plotting the figures as explained below.

Install yourself (human time: couple of hours / machine time: couple of hours)

We need to proceed as follows:

Note that the diablo installation script script/remote/linux/apt/install-diablo points to a specific version of diablo:

diablo_url = https://github.com/NatoliChris/diablo-benchmark.git
diablo_checkout = 'aec'

More precisely, the steps are:

AWS experiments

Install Perl 5.34.0 as described in fresh install guide.

Install AWS CLI and set up your credentials.

Create a key pair with the name aec.

You can use the prepared AMI, called ami-0e4c356c633d368c2 (benchmark image for EuroSys’23).

Alternatively, you can prepare your own AMI from scratch

Prepare the image with all the required software, including the blockchain binaries. ```bash ./bin/minion prepare --base='*ubuntu*20.04*amd64*server*' --key=aec --name=minion-eurosys-aec --region=ap-south-1 --region=af-south-1 --region=eu-south-1 --region=eu-north-1 --region=us-east-2 --region=ap-northeast-1 --region=sa-east-1 --region=ap-southeast-2 --region=me-south-1 --region=us-west-2 --resize=72 --install-region=eu-south-1 --size=1 --security-group=default --type=c5.9xlarge --verbose ```

Download the workloads.

Testnet topology

Boot 20 c5.xlarge machines in Ohio, 10 of which will be used for the blockchain, and 10 will be used for Diablo.

./bin/minion boot --image=minion-eurosys-aec --key=aec --region=us-east-2 --size=20 --security-group=default --type=c5.xlarge -vv

Leave this running in a terminal.

In another terminal, for all the blockchains and simple transfer workloads, run the experiments. Pass sfr-id@region from the output of the previous boot command. blockchain-name: algorand, diem, quorum-ibft, poa, solana, avalanche. blockchain-type: algorand, diem, other. n: 100, 1000, 10000.

./bin/minion run -vv blockchain-name blockchain-type-testnet-workload-n.yaml sfr-id@region

Use Ctrl-C to terminate the boot command and shutdown the machines.

Datacenter topology

Boot 14 c5.9xlarge machines in Ohio, 10 of which will be used for the blockchain, and 4 will be used for Diablo.

./bin/minion boot --image=minion-eurosys-aec --key=aec --region=us-east-2 --size=14 --security-group=default --type=c5.9xlarge -vv

Leave this running in a terminal.

In another terminal, for all the blockchains and simple transfer workloads, run the experiments. Pass sfr-id@region from the output of the previous boot command. blockchain-name: algorand, diem, quorum-ibft, poa, solana, avalanche. blockchain-type: algorand, diem, other. n: 100, 1000, 10000.

./bin/minion run -vv blockchain-name blockchain-type-datacenter-workload-n.yaml sfr-id@region

Use Ctrl-C to terminate the boot command and shutdown the machines.

Devnet topology

Boot 2 c5.xlarge machines in all the regions, 1 of which will be used for the blockchain, and 1 will be used for Diablo.

./bin/minion boot --image=minion-eurosys-aec --key=aec --region=ap-south-1 --region=af-south-1 --region=eu-south-1 --region=eu-north-1 --region=us-east-2 --region=ap-northeast-1 --region=sa-east-1 --region=ap-southeast-2 --region=me-south-1 --region=us-west-2 --size=2 --security-group=default --type=c5.xlarge -vv

Leave this running in a terminal.

In another terminal, for all the blockchains and simple transfer workloads, run the experiments. Pass sfr-id@region for all the regions from the output of the previous boot command. blockchain-name: algorand, diem, quorum-ibft, poa, solana, avalanche. blockchain-type: algorand, diem, other. n: 100, 1000, 10000.

./bin/minion run -vv blockchain-name blockchain-type-devnet-workload-n.yaml sfr-id@region

Use Ctrl-C to terminate the boot command and shutdown the machines.

Community topology

Boot 21 c5.xlarge machines in all the regions, 20 of which will be used for the blockchain, and 1 will be used for Diablo.

./bin/minion boot --image=minion-eurosys-aec --key=aec --region=ap-south-1 --region=af-south-1 --region=eu-south-1 --region=eu-north-1 --region=us-east-2 --region=ap-northeast-1 --region=sa-east-1 --region=ap-southeast-2 --region=me-south-1 --region=us-west-2 --size=21 --security-group=default --type=c5.xlarge -vv

Leave this running in a terminal.

In another terminal, for all the blockchains and simple transfer workloads, run the experiments. Pass sfr-id@region for all the regions from the output of the previous boot command. blockchain-name: algorand, diem, quorum-ibft, poa, solana, avalanche. blockchain-type: algorand, diem, other. n: 100, 1000, 10000.

./bin/minion run -vv blockchain-name blockchain-type-community-workload-n.yaml sfr-id@region

Use Ctrl-C to terminate the boot command and shutdown the machines.

Consortium topology

Boot 21 c5.2xlarge machines in all the regions, 20 of which will be used for the blockchain, and 1 will be used for Diablo.

./bin/minion boot --image=minion-eurosys-aec --key=aec --region=ap-south-1 --region=af-south-1 --region=eu-south-1 --region=eu-north-1 --region=us-east-2 --region=ap-northeast-1 --region=sa-east-1 --region=ap-southeast-2 --region=me-south-1 --region=us-west-2 --size=21 --security-group=default --type=c5.2xlarge -vv

Leave this running in a terminal.

In another terminal, for all the blockchains and simple transfer workloads, run the experiments. Pass sfr-id@region for all the regions from the output of the previous boot command. blockchain-name: algorand, diem, quorum-ibft, poa, solana, avalanche. blockchain-type: algorand, diem, other. contract-type: amazon, apple, dota, facebook, football, gafam, google, microsoft, uber, youtube. Note that youtube contract is not available for Algorand.

./bin/minion run -vv blockchain-name blockchain-type-workload-contract-type.yaml sfr-id@region

Use Ctrl-C to terminate the boot command and shutdown the machines.

You can now produce results.csv from all the archives produced by minion.

Plotting the figures (human time: 2 minutes / machine time: 5 minutes)

Prepare Python 3.10 environment as described in fresh install guide and install matplotlib.

pip install matplotlib

Download the scripts.tar.gz and unarchive it.

Download the results.csv.gz file and unarchive it inside the scripts directory.

Create the configs.csv file.

./csv-configs ./results.csv ./configs.csv

Create the figure pdf files.

make figures

It should produce the following: