├── .env ├── .env.example ├── .gitignore ├── .gitmodules ├── .prettierignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── ansible ├── group_vars │ └── all.yml ├── inventory.yml └── setup.yml ├── assets ├── img │ └── hotstuff-reproduce.svg ├── vanilla-shadow-template-debug.yaml └── vanilla-shadow-template-info.yaml ├── datasets ├── data │ ├── client-latencies.txt │ ├── consensus-latencies.txt │ ├── latency-HS3-L10.txt │ ├── latency-HS3-p1024.txt │ ├── phantom-lat-hs3-p0-10ms.txt │ ├── phantom-lat-hs3-p1024-1ms.txt │ ├── phantom-lat-pbft-p1024.txt │ ├── phantom-thr-hs3-p0-10ms.txt │ ├── phantom-thr-hs3-p1024-1ms.txt │ ├── phantom-thr-pbft-p1024.txt │ ├── resource-consumption-memory.txt │ ├── resource-consumption-time.txt │ ├── throughput-HS3-L10.txt │ └── throughput-HS3-p1024.txt └── diagrams │ ├── consensusLatency.tex │ ├── end2endLatency.tex │ ├── latencyHotStuff.tex │ ├── latencyPBFT.tex │ ├── resources-memory.tex │ ├── resources-time.tex │ ├── throughputHotStuff.tex │ └── throughputPBFT.tex ├── examples ├── BFT-SMaRt │ ├── bftsmart-aws.yaml │ └── bftsmart-uniform.yaml ├── dicg22 │ ├── bftsmart-AWS.yaml │ ├── bftsmart-p1024.yaml │ ├── hs-10ms.yaml │ ├── hs-p1024.yaml │ ├── themis-10ms.yaml │ └── themis-p1024.yaml ├── gosig │ └── gosig.yaml ├── hotstuff │ ├── hotstuff-crash-test-restart.yaml │ ├── hs3-aws.yaml │ └── hs3-uniform.yaml ├── kauri │ ├── kauri-fig6-national.yaml │ ├── kauri-fig6-regional.yaml │ └── kauri-uniform.yaml ├── mir │ ├── mir-uniform-noauth.yaml │ └── mir-uniform.yaml ├── prdc23 │ ├── crash │ │ ├── -run-user-1000-gvfs-sftp:host=192.168.12.211-home-cb-tool-examples-prdc23-crash-pbft-.txt │ │ ├── christian-crash-test.yaml │ │ ├── christian-crash-test2.yaml │ │ ├── hs2.yaml │ │ ├── hsBLS.yaml │ │ ├── kauri-crash-test.yaml │ │ ├── kauri.yaml │ │ ├── pbft-mini-16.yaml │ │ ├── pbft-mini-32 (Kopie).yaml │ │ ├── pbft-mini-32.yaml │ │ ├── pbft-mini-64.yaml │ │ ├── pbft-mini.yaml │ │ ├── pbft-opt-16.yaml │ │ ├── pbft-opt-32.yaml │ │ ├── pbft-opt-4.yaml │ │ ├── pbft-opt-8.yaml │ │ ├── pbft-opt.yaml │ │ ├── pbft-opt4 .yaml │ │ └── sadok-minirun.yaml │ ├── dos │ │ ├── hs2.yaml │ │ ├── hs2block400.yaml │ │ ├── kauri.yaml │ │ ├── pbft-opt (Kopie).yaml │ │ └── pbft-opt.yaml │ ├── fault-free │ │ ├── -run-user-1000-gvfs-sftp:host=192.168.12.211,user=cb-home-cb-tool-examples-prdc23-fault-free-gosig64 (Kopie)..txt │ │ ├── gosig.yaml │ │ ├── gosig100WAN (Kopie).yaml │ │ ├── gosig100WAN (noch eine Kopie).yaml │ │ ├── gosig100WAN.yaml │ │ ├── gosig128 (Kopie).yaml │ │ ├── gosig128.yaml │ │ ├── gosig16WAN.yaml │ │ ├── gosig2.yaml │ │ ├── gosig32.yaml │ │ ├── gosig32WAN (Kopie).yaml │ │ ├── gosig32WAN.yaml │ │ ├── gosig4LAN.yaml │ │ ├── gosig4WAN.yaml │ │ ├── gosig64 (Kopie).yaml │ │ ├── gosig64 (noch eine Kopie).yaml │ │ ├── gosig64.yaml │ │ ├── gosig8WAN.yaml │ │ ├── hs-bls.yaml │ │ ├── hs.yaml │ │ ├── hs2.yaml │ │ ├── hs2block400.yaml │ │ ├── hsBLS.yaml │ │ ├── hsBLS400.yaml │ │ ├── kauri.yaml │ │ ├── kauri2k (noch eine Kopie).yaml │ │ ├── kauri2k.yaml │ │ ├── kauri500.yaml │ │ ├── pbft-no-inlining.yaml │ │ ├── pbft-opt-400.yaml │ │ ├── pbft.yaml │ │ ├── pbft1kbatch.yaml │ │ ├── pbft2.yaml │ │ └── pbft200batch.yaml │ └── packetloss │ │ ├── gosig.yaml │ │ ├── gosig2.yaml │ │ ├── hs-bls.yaml │ │ ├── hs.yaml │ │ ├── hs2.yaml │ │ ├── hs2block400.yaml │ │ ├── hsBLS400.yaml │ │ ├── kauri.yaml │ │ ├── kauri2k (noch eine Kopie).yaml │ │ ├── kauri2k.yaml │ │ ├── kauri500.yaml │ │ ├── pbft-no-inlining.yaml │ │ ├── pbft-opt-400.yaml │ │ ├── pbft-opt.yaml │ │ ├── pbft.yaml │ │ ├── pbft1kbatch.yaml │ │ ├── pbft2.yaml │ │ └── pbft200batch.yaml ├── sadok-thesis │ ├── bftsmart-AWS.yaml │ ├── bftsmart-p1024.yaml │ ├── hotstuff-wan.yaml │ ├── hs-10ms.yaml │ ├── hs-p1024.yaml │ ├── predefinedPlots │ │ └── hotstuff │ │ │ ├── hs-10ms-latency.yaml │ │ │ ├── hs-10ms-throughput.yaml │ │ │ ├── hs-p1024-latency.yaml │ │ │ └── hs-p1024-throughput.yaml │ ├── themis-p1024.yaml │ └── themis-wan.yaml ├── themis │ └── themis-uniform.yaml └── tusk │ └── tusk.yaml ├── package-lock.json ├── package.json └── src ├── .gitignore ├── connectors ├── assets │ ├── BFT-SMaRt │ │ └── sysconf.json │ ├── gosig │ │ ├── gosig.toml │ │ ├── gossip.toml │ │ └── pbft.toml │ ├── mir │ │ └── mir.toml │ ├── themis │ │ └── pbft.toml │ └── tusk │ │ └── params.json ├── bftsmart.js ├── gosig.js ├── hotstuff.js ├── kauri.js ├── mir.js ├── themis.js └── tusk.js ├── faults └── crash.js ├── orchestrator.js └── util ├── aws21.json ├── cloudping.js ├── csv-util.js ├── duration.js ├── environment-generator.js ├── exec.js ├── helpers.js ├── ip-util.js ├── plot.js ├── resource-monitor.js └── timestamp.js /.env: -------------------------------------------------------------------------------- 1 | #GLOBAL 2 | RESOURCE_MONITOR_INTERVAL=2000 3 | SHADOW_FILE=shadow.yaml 4 | NETWORK_FILE=network.gml 5 | SHADOW_PROCESS=shadow 6 | STATS_FILE=results.csv 7 | #SHADOW_TEMPLATE="DEFINE A TEMPLATE HERE" 8 | LOG_LEVEL=debug 9 | # HotStuff Stuff 10 | 11 | HOTSTUFF_DIR=/home/cb/tool/libhotstuff/ 12 | HOTSTUFF_EXECUTION_DIR=/home/cb/tool/libhotstuff/ 13 | HOTSTUFF_EXPERIMENTS_OUTPUT_DIR=/home/cb/tool/myShadowExperiments/myHotStuffExperiments 14 | HOTSTUFF_REPLICA_HOST_PREFIX=hotStuffReplica 15 | HOTSTUFF_CLIENT_HOST_PREFIX=hotStuffClient 16 | 17 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR HOTSTUFF DIRECTORY 18 | 19 | HOTSTUFF_REPLICAS_FILE=scripts/deploy/replicas.txt 20 | HOTSTUFF_CLIENTS_FILE=scripts/deploy/clients.txt 21 | HOTSTUFF_GENSCRIPT_WORKING_DIR=scripts/deploy 22 | HOTSTUFF_REPLICA_BIN=examples/hotstuff-app 23 | HOTSTUFF_CLIENT_BIN=examples/hotstuff-client 24 | HOTSTUFF_STATS_SCRIPT=scripts/thr_hist.py 25 | 26 | 27 | # Kauri Stuff 28 | 29 | KAURI_DIR=/home/cb/tool/Kauri-Public/ 30 | KAURI_EXECUTION_DIR=/home/cb/tool/Kauri-Public/ 31 | KAURI_EXPERIMENTS_OUTPUT_DIR=/home/cb/myShadowExperiments/myKauriExperiments 32 | KAURI_REPLICA_HOST_PREFIX=kauriReplica 33 | KAURI_CLIENT_HOST_PREFIX=kauriClient 34 | 35 | KAURI_REPLICA_BIN=examples/hotstuff-app 36 | KAURI_CLIENT_BIN=examples/hotstuff-client 37 | 38 | #BFT-SMaRt Stuff 39 | 40 | BFTSMART_DIR=/home/cb/tool/library/ 41 | BFTSMART_EXECUTION_DIR=/home/cb/tool/library/build/install/library 42 | BFTSMART_EXPERIMENTS_OUTPUT_DIR=/home/cb/myShadowExperiments/myBFT-SMaRtExperiments 43 | BFTSMART_REPLICA_CLASS=bftsmart.demo.microbenchmarks.ThroughputLatencyServer 44 | #BFTSMART_REPLICA_CLASS=bftsmart.benchmark.ThroughputLatencyServer 45 | #BFTSMART_CLIENT_CLASS=bftsmart.demo.microbenchmarks.ThroughputLatencyClientICGDynamic 46 | BFTSMART_CLIENT_CLASS=bftsmart.demo.microbenchmarks.ThroughputLatencyClient 47 | #BFTSMART_CLIENT_CLASS=bftsmart.benchmark.ThroughputLatencyClientICG 48 | #BFTSMART_CLIENT_CLASS=bftsmart.demo.microbenchmarks.AsyncLatencyClient 49 | BFTSMART_REPLICA_HOST_PREFIX=bftSmartReplica 50 | BFTSMART_CLIENT_HOST_PREFIX=bftSmartClient 51 | BFTSMART_JAVA_ARGS=-Djava.security.properties=config/java.security -Dlogback.configurationFile=config/logback.xml -cp lib/* 52 | BFTSMART_REPLICA_PORT=11000 53 | BFTSMART_REPLICA_SECONDARY_PORT=11001 54 | BFTSMART_CLIENT_PORT=11100 55 | 56 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR BFTSMART DIRECTORY 57 | 58 | BFTSMART_SYSTEM_CONFIG_FILE=build/install/library/config/system.config 59 | BFTSMART_HOSTS_FILE=build/install/library/config/hosts.config 60 | BFTSMART_VIEW_FILE=build/install/library/config/currentView 61 | 62 | 63 | #Themis Stuff 64 | 65 | THEMIS_DIR=/home/cb/tool/themis 66 | THEMIS_EXECUTION_DIR=/home/cb/tool/themis 67 | THEMIS_EXPERIMENTS_OUTPUT_DIR=/home/cb/tool/myShadowExperiments/myThemisExperiments 68 | THEMIS_REPLICA_HOST_PREFIX=themisReplica 69 | THEMIS_CLIENT_HOST_PREFIX=themisClient 70 | THEMIS_REPLICA_BIN=target/debug/themis-bench-app 71 | THEMIS_CLIENT_BIN=target/debug/bench-client 72 | THEMIS_PROMETHEUS_PORT=8080 73 | THEMIS_REPLICA_PORT=10003 74 | THEMIS_CLIENT_PORT=10002 75 | THEMIS_KEYS_DIR=keys 76 | 77 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR THEMIS DIRECTORY 78 | 79 | THEMIS_CONFIG_PATH=config/default 80 | THEMIS_CONFIG_FILE_PATH=config/default/config.toml 81 | THEMIS_PBFT_CONFIG_FILE_PATH=config/default/pbft.toml 82 | 83 | GOSIG_DIR=/home/cb/tool/themis-gosig 84 | GOSIG_EXECUTION_DIR=/home/cb/tool/themis-gosig 85 | GOSIG_EXPERIMENTS_OUTPUT_DIR=/home/cb/myShadowExperiments/myGosigExperiments 86 | GOSIG_REPLICA_HOST_PREFIX=gosigReplica 87 | GOSIG_CLIENT_HOST_PREFIX=gosigClient 88 | GOSIG_REPLICA_BIN=target/release/themis-bench-app 89 | GOSIG_CLIENT_BIN=target/release/bench-client 90 | GOSIG_PEER_PORT=10003 91 | GOSIG_CLIENT_PORT=10002 92 | GOSIG_GOSSIP_PORT=10004 93 | GOSIG_KEYS_DIR=keys 94 | 95 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR GOSIG DIRECTORY 96 | 97 | GOSIG_CONFIG_PATH=config/bls/ 98 | GOSIG_CONFIG_FILE_PATH=config/bls/gosig.toml 99 | GOSIG_BLS_CONFIG_FILE_PATH=config/bls/bls.toml 100 | GOSIG_GOSSIP_CONFIG_FILE_PATH=config/bls/gossip.toml 101 | GOSIG_PBFT_CONFIG_FILE_PATH=config/bls/pbft.toml 102 | 103 | 104 | 105 | # Narwhal-Tusk Stuff 106 | 107 | TUSK_DIR=/home/cb/tool/narwhal/benchmark 108 | TUSK_KEYS_DIR=benchmark 109 | TUSK_EXECUTION_DIR=/home/cb/tool/narwhal/benchmark/ 110 | TUSK_EXPERIMENTS_OUTPUT_DIR=/home/cb/myShadowExperiments/myNarwhalTuskExperiments 111 | TUSK_REPLICA_HOST_PREFIX=tuskReplica 112 | TUSK_CLIENT_HOST_PREFIX=tuskClient 113 | 114 | TUSK_REPLICA_BIN=node 115 | TUSK_CLIENT_BIN=benchmark_client 116 | 117 | TUSK_REPLICA_HOST_PREFIX=tuskReplica 118 | TUSK_CLIENT_HOST_PREFIX=tuskClient 119 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | #GLOBAL 2 | 3 | SHADOW_FILE=shadow.yaml 4 | NETWORK_FILE=network.gml 5 | SHADOW_PROCESS=shadow 6 | STATS_FILE=results.csv 7 | #SHADOW_TEMPLATE="DEFINE A TEMPLATE HERE" 8 | LOG_LEVEL=debug 9 | RESOURCE_MONITOR_INTERVAL=2000 10 | # HotStuff Stuff 11 | 12 | HOTSTUFF_DIR=/libhotstuff/ 13 | HOTSTUFF_EXECUTION_DIR=/libhotstuff/ 14 | HOTSTUFF_EXPERIMENTS_OUTPUT_DIR=/myHotStuffExperiments 15 | HOTSTUFF_REPLICA_HOST_PREFIX=hotStuffReplica 16 | HOTSTUFF_CLIENT_HOST_PREFIX=hotStuffClient 17 | 18 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR HOTSTUFF DIRECTORY 19 | 20 | HOTSTUFF_REPLICAS_FILE=scripts/deploy/replicas.txt 21 | HOTSTUFF_CLIENTS_FILE=scripts/deploy/clients.txt 22 | HOTSTUFF_GENSCRIPT_WORKING_DIR=scripts/deploy 23 | HOTSTUFF_REPLICA_BIN=examples/hotstuff-app 24 | HOTSTUFF_CLIENT_BIN=examples/hotstuff-client 25 | HOTSTUFF_STATS_SCRIPT=scripts/thr_hist.py 26 | 27 | #BFT-SMaRt Stuff 28 | 29 | BFTSMART_DIR=/library/ 30 | BFTSMART_EXECUTION_DIR=/library/build/install/library 31 | BFTSMART_EXPERIMENTS_OUTPUT_DIR=/myBFT-SMaRtExperiments 32 | BFTSMART_REPLICA_CLASS=bftsmart.demo.microbenchmarks.ThroughputLatencyServer 33 | BFTSMART_CLIENT_CLASS=bftsmart.demo.microbenchmarks.AsyncLatencyClient 34 | BFTSMART_REPLICA_HOST_PREFIX=bftSmartReplica 35 | BFTSMART_CLIENT_HOST_PREFIX=bftSmartClient 36 | BFTSMART_JAVA_ARGS=-Djava.security.properties=config/java.security -Dlogback.configurationFile=config/logback.xml -cp lib/* -Xmx500m 37 | BFTSMART_REPLICA_PORT=11000 38 | BFTSMART_REPLICA_SECONDARY_PORT=11001 39 | BFTSMART_CLIENT_PORT=11100 40 | 41 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR BFTSMART DIRECTORY 42 | 43 | BFTSMART_SYSTEM_CONFIG_FILE=build/install/library/config/system.config 44 | BFTSMART_HOSTS_FILE=build/install/library/config/hosts.config 45 | BFTSMART_VIEW_FILE=build/install/library/config/currentView 46 | 47 | 48 | #Themis Stuff 49 | 50 | THEMIS_DIR=/themis 51 | THEMIS_EXECUTION_DIR=/themis 52 | THEMIS_EXPERIMENTS_OUTPUT_DIR=/myThemisExperiments 53 | THEMIS_REPLICA_HOST_PREFIX=themisReplica 54 | THEMIS_CLIENT_HOST_PREFIX=themisClient 55 | THEMIS_REPLICA_BIN=target/debug/themis-bench-app 56 | THEMIS_CLIENT_BIN=target/debug/bench-client 57 | THEMIS_PROMETHEUS_PORT=8080 58 | THEMIS_REPLICA_PORT=10003 59 | THEMIS_CLIENT_PORT=10002 60 | THEMIS_KEYS_DIR=keys 61 | 62 | # THE FOLLOWING PATHS MUST BE RELATIVE TO YOUR THEMIS DIRECTORY 63 | 64 | THEMIS_CONFIG_PATH=config/default 65 | THEMIS_CONFIG_FILE_PATH=config/default/config.toml 66 | THEMIS_PBFT_CONFIG_FILE_PATH=config/default/pbft.toml 67 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | *.pcap 3 | *.log 4 | *.gml 5 | #*.yaml 6 | *shadow.data/* 7 | node_modules 8 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "libhotstuff"] 2 | path = libhotstuff 3 | url = https://github.com/bentoumia/libhotstuff.git 4 | [submodule "library"] 5 | path = library 6 | url = https://gitlab.sec.uni-passau.de/cb/library.git 7 | branch = max-in-flight 8 | [submodule "themis"] 9 | path = themis 10 | url = https://github.com/ibr-ds/themis.git 11 | [submodule "Kauri-Public"] 12 | path = Kauri-Public 13 | url = https://github.com/Raycoms/Kauri-Public.git 14 | branch = latest 15 | [submodule "narwhal"] 16 | path = narwhal 17 | url = https://github.com/facebookresearch/narwhal.git 18 | branch = main 19 | [submodule "bullshark"] 20 | path = bullshark 21 | url = https://github.com/facebookresearch/narwhal/ 22 | branch = bullshark 23 | 24 | 25 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.yaml 2 | *.yml -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /ansible/group_vars/all.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | ansible_ssh_private_key_file: ~/.ssh/id_rsa #CHANGE ME 4 | ansible_connection: ssh 5 | ansible_user: sadok #CHANGE ME 6 | 7 | node_version: 16.3.0 8 | 9 | delphi_bft_repo: https://github.com/Delphi-BFT/tool.git 10 | delphi_bft_clone_dir: $HOME/delphi-bft 11 | 12 | phantom_repo: https://github.com/shadow/shadow.git 13 | phantom_version: v2.2.0 14 | phantom_clone_dir: $HOME/shadow 15 | -------------------------------------------------------------------------------- /ansible/inventory.yml: -------------------------------------------------------------------------------- 1 | opennebula: 2 | hosts: 3 | ubuntu_20_04_1: 4 | ansible_host: 192.168.12.211 # CHANGE ME 5 | -------------------------------------------------------------------------------- /ansible/setup.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: setup basic Delphi-BFT dependencies 3 | hosts: opennebula 4 | tasks: 5 | - name: Installing Node, NVM and NPM 6 | block: 7 | - name: CURL nvm 8 | shell: > 9 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 10 | args: 11 | creates: "$HOME/.nvm/nvm.sh" 12 | chdir: $HOME 13 | executable: /bin/bash 14 | - name: Install Node 15 | shell: > 16 | source $HOME/.nvm/nvm.sh && nvm install "{{node_version}}" && nvm use "{{node_version}}" 17 | args: 18 | chdir: $HOME 19 | executable: /bin/bash 20 | - name: Installing Phantom 21 | block: 22 | - name: Installing Phantom dependencies 23 | apt: 24 | pkg: 25 | - cmake 26 | - findutils 27 | - libc-dbg 28 | - libglib2.0-0 29 | - libglib2.0-dev 30 | - make 31 | - python3 32 | - python3-pip 33 | - xz-utils 34 | - util-linux 35 | - gcc 36 | - g++ 37 | - python3-numpy 38 | - python3-lxml 39 | - python3-matplotlib 40 | - python3-networkx 41 | - python3-scipy 42 | - python3-yaml 43 | - dstat 44 | - git 45 | - htop 46 | - tmux 47 | state: latest 48 | become: yes 49 | become_user: root 50 | - name: check if cargo is installed 51 | shell: command -v cargo 52 | register: cargo_exists 53 | ignore_errors: yes 54 | args: 55 | executable: /bin/bash 56 | - name: Download Installer 57 | when: cargo_exists is failed 58 | get_url: 59 | url: https://sh.rustup.rs 60 | dest: /tmp/sh.rustup.rs 61 | mode: '0755' 62 | force: 'yes' 63 | tags: 64 | - rust 65 | - name: Install Rust/Cargo 66 | when: cargo_exists is failed 67 | shell: /tmp/sh.rustup.rs -y 68 | tags: 69 | - rust 70 | args: 71 | executable: /bin/bash 72 | - name: Cloning the Phantom repository and checking out tag v2.2.0 73 | git: 74 | repo: "{{ phantom_repo }}" 75 | dest: "{{ phantom_clone_dir }}" 76 | version: tags/"{{ phantom_version }}" 77 | - name: Building Phantom 78 | shell: > 79 | source $HOME/.cargo/env && ./setup build --clean --test 80 | args: 81 | chdir: "{{ phantom_clone_dir }}" 82 | executable: /bin/bash 83 | register: build 84 | - debug: msg="{{ build.stdout}}" 85 | - debug: msg="{{ build.stderr}}" 86 | - name: Running Phantom tests 87 | shell: > 88 | source $HOME/.cargo/env && ./setup test 89 | args: 90 | chdir: "{{phantom_clone_dir}}" 91 | executable: /bin/bash 92 | register: testing 93 | - debug: msg="{{ testing.stdout}}" 94 | - debug: msg="{{ testing.stderr}}" 95 | - name: Installing Phantom 96 | shell: > 97 | source $HOME/.cargo/env && ./setup install 98 | args: 99 | chdir: "{{ phantom_clone_dir }}" 100 | executable: /bin/bash 101 | register: installation 102 | - debug: msg="{{ installation.stdout}}" 103 | - debug: msg="{{ installation.stderr}}" 104 | - name: Adding Phantom to PATH 105 | lineinfile: 106 | line: export PATH="${PATH}:$HOME/.local/bin" 107 | path: $HOME/.bashrc 108 | 109 | - name: Installing HotStuff dependencies 110 | apt: 111 | pkg: 112 | - libssl-dev 113 | - libuv1-dev 114 | - libtool 115 | - dh-autoreconf 116 | - libtool 117 | - autoconf 118 | state: latest 119 | become: yes 120 | become_user: root 121 | - name: Installing BFT-SMaRt dependencies 122 | apt: 123 | pkg: 124 | - openjdk-11-jre-headless 125 | state: latest 126 | become: yes 127 | become_user: root 128 | - name: Cloning Delphi-BFT 129 | git: 130 | repo: "{{ delphi_bft_repo }}" 131 | dest: "{{ delphi_bft_clone_dir }}" 132 | version: main 133 | - name: Running npm install 134 | shell: source $HOME/.nvm/nvm.sh && npm install 135 | args: 136 | chdir: "{{ delphi_bft_clone_dir }}" 137 | executable: /bin/bash 138 | 139 | 140 | -------------------------------------------------------------------------------- /assets/vanilla-shadow-template-debug.yaml: -------------------------------------------------------------------------------- 1 | # Note: the network and hosts objects here will be overridden. 2 | general: 3 | stop_time: 2 min 4 | log_level: debug 5 | progress: true 6 | network: 7 | graph: 8 | type: gml 9 | inline: | 10 | graph [ 11 | node [ 12 | id 0 13 | host_bandwidth_down "140 Mbit" 14 | host_bandwidth_up "18 Mbit" 15 | ] 16 | edge [ 17 | source 0 18 | target 0 19 | latency "50 ms" 20 | packet_loss 0.01 21 | ] 22 | ] 23 | hosts: 24 | server: 25 | network_node_id: 0 26 | processes: 27 | - path: /usr/sbin/nginx 28 | args: -c ../../../nginx.conf -p . 29 | start_time: 1 30 | -------------------------------------------------------------------------------- /assets/vanilla-shadow-template-info.yaml: -------------------------------------------------------------------------------- 1 | # Note: the network and hosts objects here will be overridden. 2 | general: 3 | stop_time: 2 min 4 | log_level: info 5 | progress: true 6 | network: 7 | graph: 8 | type: gml 9 | inline: | 10 | graph [ 11 | node [ 12 | id 0 13 | host_bandwidth_down "140 Mbit" 14 | host_bandwidth_up "18 Mbit" 15 | ] 16 | edge [ 17 | source 0 18 | target 0 19 | latency "50 ms" 20 | packet_loss 0.01 21 | ] 22 | ] 23 | hosts: 24 | server: 25 | network_node_id: 0 26 | processes: 27 | - path: /usr/sbin/nginx 28 | args: -c ../../../nginx.conf -p . 29 | start_time: 1 30 | -------------------------------------------------------------------------------- /datasets/data/client-latencies.txt: -------------------------------------------------------------------------------- 1 | region regionNr real simulated 2 | Oregon 1 353.938 358.690 3 | Ireland 2 415.892 428.015 4 | {São Paulo} 3 414.534 429.1850 5 | Sydney 4 437.612 449.175 -------------------------------------------------------------------------------- /datasets/data/consensus-latencies.txt: -------------------------------------------------------------------------------- 1 | region regionNr real simulated 2 | Consensus 1 237.142 248.960 3 | -------------------------------------------------------------------------------- /datasets/data/latency-HS3-L10.txt: -------------------------------------------------------------------------------- 1 | replicas latency 2 | 4 84.178 3 | 8 85.734 4 | 16 86.6358 5 | 32 88.4466 6 | 64 92.4532 7 | 128 106.0368 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /datasets/data/latency-HS3-p1024.txt: -------------------------------------------------------------------------------- 1 | replicas latency 2 | 4 19.3638 3 | 8 19.9232 4 | 16 19.7376 5 | 32 39.2842 6 | 64 65.2438 7 | 128 108.2954 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /datasets/data/phantom-lat-hs3-p0-10ms.txt: -------------------------------------------------------------------------------- 1 | replicas latency 2 | 4 80.000 3 | 8 80.000 4 | 16 80.000 5 | 32 80.000 6 | 64 80.000 7 | 128 84.000 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /datasets/data/phantom-lat-hs3-p1024-1ms.txt: -------------------------------------------------------------------------------- 1 | replicas latency 2 | 4 14 3 | 8 14 4 | 16 18.544 5 | 32 37.051 6 | 64 72.824 7 | 128 148.1 -------------------------------------------------------------------------------- /datasets/data/phantom-lat-pbft-p1024.txt: -------------------------------------------------------------------------------- 1 | replicas latency 2 | 4 9 3 | 8 10.375 4 | 16 10.375 5 | 32 22.25 6 | 64 43.875 7 | 128 89.5 8 | -------------------------------------------------------------------------------- /datasets/data/phantom-thr-hs3-p0-10ms.txt: -------------------------------------------------------------------------------- 1 | replicas throughput 2 | 4 20.000 3 | 8 20.000 4 | 16 20.000 5 | 32 20.000 6 | 64 20.000 7 | 128 19.200 8 | -------------------------------------------------------------------------------- /datasets/data/phantom-thr-hs3-p1024-1ms.txt: -------------------------------------------------------------------------------- 1 | replicas throughput 2 | 4 200.000 3 | 8 200.000 4 | 16 151.345 5 | 32 75.778 6 | 64 38.656 7 | 128 20.000 8 | -------------------------------------------------------------------------------- /datasets/data/phantom-thr-pbft-p1024.txt: -------------------------------------------------------------------------------- 1 | replicas throughput 2 | 4 292.985 3 | 8 146.533 4 | 16 73.333 5 | 32 36.049 6 | 64 18.709 7 | 128 9.354 8 | -------------------------------------------------------------------------------- /datasets/data/resource-consumption-memory.txt: -------------------------------------------------------------------------------- 1 | replicas libhotstuff themis 2 | 4 1.291964416 1.882034176 3 | 8 1.53790464 2.78427648 4 | 16 2.183790592 4.683829248 5 | 32 3.925774336 8.753467392 6 | 64 7.184695296 18.225041408 7 | 128 17.90201856 26.46798336 -------------------------------------------------------------------------------- /datasets/data/resource-consumption-time.txt: -------------------------------------------------------------------------------- 1 | replicas libhotstuff themis 2 | 4 4.36381658126712 4.69536045166651 3 | 8 7.64953956581652 6.90127230896751 4 | 16 14.0523918407003 10.8708035840333 5 | 32 31.4348776961337 20.790920002234 6 | 64 46.2194783636828 44.8446500461678 7 | 128 60.1724947196325 58.8224591118336 8 | 9 | 10 | -------------------------------------------------------------------------------- /datasets/data/throughput-HS3-L10.txt: -------------------------------------------------------------------------------- 1 | replicas throughput 2 | 4 19.1744 3 | 8 18.7806 4 | 16 18.6174 5 | 32 18.1898 6 | 64 17.499 7 | 128 15.1144 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /datasets/data/throughput-HS3-p1024.txt: -------------------------------------------------------------------------------- 1 | replicas throughput 2 | 4 114.8328 3 | 8 118.8888 4 | 16 120.1536 5 | 32 61.3854 6 | 64 37.260 7 | 128 22.067 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /datasets/diagrams/consensusLatency.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | font= \footnotesize, 4 | ylabel={Latency [ms]}, 5 | xticklabels from table={data/consensus-latencies.txt}{region}, 6 | x tick label style={rotate=30,anchor=east, xshift=15pt, yshift=-14pt, font= \footnotesize}, 7 | ybar=2pt, %configures bar shift 8 | bar width=6pt, 9 | % width=0.6\columnwidth, 10 | height=3.67cm, 11 | xtick=data, 12 | ytick = {100,200,300,400,500,600}, 13 | ymin=0, 14 | ymax=600, 15 | xmin=0.5, 16 | xmax=1.5, 17 | ymajorgrids=true, 18 | yminorgrids=true, 19 | minor grid style={dashed,gray!10}, 20 | minor tick num=1, 21 | %legend pos= north west,% Legende oben links in Abb. 22 | legend style={at={(1, 1.08)}, 23 | legend columns = 1, 24 | legend cell align=left% Rechtsbündige Ausrichtung der Legende 25 | } 26 | ] 27 | \addplot 28 | [draw = Blue, 29 | fill = Blue!30!white] 30 | table[ 31 | x=regionNr, 32 | y=real 33 | ] 34 | {data/consensus-latencies.txt}; 35 | \addlegendentry{real }; 36 | 37 | \addplot 38 | [draw = SkyBlue, 39 | fill = SkyBlue!30!white ] 40 | table[ 41 | x=regionNr, 42 | y=simulated 43 | ] 44 | {data/consensus-latencies.txt}; 45 | \addlegendentry{sim.}; 46 | \end{axis} 47 | \end{tikzpicture} 48 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/end2endLatency.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | font= \footnotesize, 4 | ylabel={Latency [ms]}, 5 | xticklabels from table={data/client-latencies.txt}{region}, 6 | x tick label style={rotate=30,anchor=east, xshift=10pt, yshift=-4pt, font= \footnotesize}, 7 | ybar=2pt, %configures bar shift 8 | bar width=6pt, 9 | % width=0.6\columnwidth, 10 | height=3.67cm, 11 | xtick=data, 12 | ytick = {100,200,300,400,500,600}, 13 | ymin=0, 14 | ymax=600, 15 | xmin=0.5, 16 | xmax=4.5, 17 | ymajorgrids=true, 18 | yminorgrids=true, 19 | minor grid style={dashed,gray!10}, 20 | minor tick num=1, 21 | %legend pos= north west,% Legende oben links in Abb. 22 | legend style={at={(1, 1.08)}, 23 | legend columns = 5, 24 | legend cell align=left% Rechtsbündige Ausrichtung der Legende 25 | } 26 | ] 27 | \addplot 28 | [draw = OrangeRed, 29 | fill = OrangeRed!30!white] 30 | table[ 31 | x=regionNr, 32 | y=real 33 | ] 34 | {data/client-latencies.txt}; 35 | \addlegendentry{real AWS \ }; 36 | 37 | \addplot 38 | [draw = Peach, 39 | fill = Peach!30!white, 40 | postaction={pattern=north east lines,pattern color=Peach!30!white}] 41 | table[ 42 | x=regionNr, 43 | y=simulated 44 | ] 45 | {data/client-latencies.txt}; 46 | \addlegendentry{simulation}; 47 | \end{axis} 48 | \end{tikzpicture} 49 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/latencyHotStuff.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | %width= 8cm, 4 | %height=5cm, 5 | %font= \footnotesize, 6 | width= 4.5cm, 7 | height=4cm, 8 | font= \footnotesize, 9 | %title={Title}, 10 | xlabel={Replicas}, 11 | ylabel={Latency [ms]}, 12 | xmin=0, xmax=128, 13 | ymin=0, ymax=150, 14 | xtick={4, 16, 32, 64, 128}, 15 | ytick={0, 25, 50, 75, 100, 125, 150}, 16 | %legend pos=north east, 17 | legend columns = 3, 18 | %legend style={at={(0.98, 1.05)}}, 19 | legend style={at={(0.33,1.12)},anchor=west, legend columns=3}, 20 | legend cell align={left}, 21 | ymajorgrids=true, 22 | xmajorgrids=true, 23 | grid style=dashed, 24 | %legend style={font=\footnotesize}, 25 | ] 26 | 27 | \addplot[ 28 | color=NavyBlue, 29 | mark=square, 30 | ] 31 | table [x=replicas,y=latency] {data/latency-HS3-p1024.txt}; 32 | 33 | \addplot[ 34 | color=ProcessBlue, 35 | mark=o, 36 | ] 37 | table [x=replicas,y=latency] {data/phantom-lat-hs3-p1024-1ms.txt}; 38 | \addplot[ 39 | color=BrickRed, 40 | mark=triangle, 41 | ] 42 | table [x=replicas,y=latency] {data/latency-HS3-L10.txt}; 43 | 44 | 45 | \addplot[ 46 | color=OrangeRed, 47 | mark=diamond, 48 | ] 49 | table [x=replicas,y=latency] {data/phantom-lat-hs3-p0-10ms.txt}; 50 | 51 | % \legend{HS3-p1024, HS3-10ms, P} 52 | \end{axis} 53 | \end{tikzpicture} % - avoid white space 54 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/latencyPBFT.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | %width= 8cm, 4 | %height=5cm, 5 | %font= \footnotesize, 6 | width= 4.5cm, 7 | height=4cm, 8 | font= \footnotesize, 9 | %title={Title}, 10 | xlabel={Replicas}, 11 | ylabel={Latency [ms]}, 12 | xmin=0, xmax=128, 13 | ymin=0, ymax=150, 14 | xtick={4, 16, 32, 64, 128}, 15 | ytick={0, 50, 100, 150}, 16 | legend pos=south east, 17 | legend columns = 2, 18 | legend style={at={(0.98, 0.8)}}, 19 | legend cell align={left}, 20 | ymajorgrids=true, 21 | xmajorgrids=true, 22 | grid style=dashed, 23 | %legend style={font=\footnotesize}, 24 | ] 25 | 26 | 27 | \addplot[ 28 | color=ForestGreen, 29 | mark=diamond, 30 | ] 31 | table [x=replicas,y=latency] {data/phantom-lat-pbft-p1024.txt}; 32 | 33 | \addplot[ 34 | color=ProcessBlue, 35 | mark=o, 36 | ] 37 | table [x=replicas,y=latency] {data/phantom-lat-hs3-p1024-1ms.txt}; 38 | 39 | % \addplot[ 40 | % color=NavyBlue, 41 | % mark=square, 42 | % ] 43 | % table [x=replicas,y=latency] {data/latency-HS3-p1024.txt}; %% ADAPT HERE 44 | 45 | % \addplot[ 46 | % color=BrickRed, 47 | % mark=triangle, 48 | % ] 49 | % table [x=replicas,y=latency] {data/latency-HS3-L10.txt}; %% ADAPT HERE 50 | % \legend{HS3-p1024, HS3-10$ms$} 51 | \end{axis} 52 | \end{tikzpicture} % - avoid white space 53 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/resources-memory.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | width= 4.5cm, 4 | height=3.2cm, 5 | font= \footnotesize, 6 | %title={Title}, 7 | xlabel={Replicas}, 8 | ylabel={Memory [GB]}, 9 | xmin=0, xmax=128, 10 | ymin=0, ymax=20, 11 | xtick={4, 16, 32, 64, 128}, 12 | ytick={0, 8, 16}, 13 | legend pos=south east, 14 | legend columns = 2, 15 | legend style={at={(0.8, 0.8)}}, 16 | legend cell align={left}, 17 | ymajorgrids=true, 18 | xmajorgrids=true, 19 | grid style=dashed, 20 | % legend style={font=\footnotesize}, 21 | ] 22 | 23 | \addplot[ 24 | color=OrangeRed, 25 | mark=diamond, 26 | ] 27 | table [x=replicas,y=libhotstuff] {data/resource-consumption-memory.txt}; 28 | \legend{libhotstuff} 29 | \end{axis} 30 | \end{tikzpicture} % - avoid white space 31 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/resources-time.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | width= 4.5cm, 4 | height=3.2cm, 5 | font= \footnotesize, 6 | %title={Title}, 7 | xlabel={Replicas}, 8 | ylabel={Time [m]}, 9 | xmin=0, xmax=128, 10 | ymin=0, ymax=65, 11 | xtick={4, 16, 32, 64, 128}, 12 | ytick={0, 15, 30, 45, 60}, 13 | legend pos=south east, 14 | legend columns = 2, 15 | legend style={at={(0.98, 0.05)}}, 16 | legend cell align={left}, 17 | ymajorgrids=true, 18 | xmajorgrids=true, 19 | grid style=dashed, 20 | % legend style={font=\footnotesize}, 21 | ] 22 | 23 | \addplot[ 24 | color=OrangeRed, 25 | mark=diamond, 26 | ] 27 | table [x=replicas,y=libhotstuff] {data/resource-consumption-time.txt}; 28 | 29 | % \legend{libhotstuff} 30 | \end{axis} 31 | \end{tikzpicture} % - avoid white space 32 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/throughputHotStuff.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | %width= 8cm, 4 | %height=5cm, 5 | %font= \footnotesize, %\footnotesize, 6 | width= 4.5cm, 7 | height=4cm, 8 | font= \footnotesize, 9 | %title={Title}, 10 | xlabel={Replicas}, 11 | ylabel={Throughput [kOps/s]}, 12 | xmin=0, xmax=128, 13 | ymin=0, ymax=200, 14 | xtick={ 4, 16, 32, 64, 128}, 15 | ytick={0, 50, 100,150,200,250, 300}, 16 | % legend pos=south east, 17 | % legend columns = 2, 18 | %legend style={at={(0.98, 0.8)}}, 19 | %legend style={at={(1, 1.05)}, draw=none}, 20 | legend style={at={(-0.18,1.19)},anchor=west, legend columns=4}, 21 | legend cell align={left}, 22 | ymajorgrids=true, 23 | xmajorgrids=true, 24 | grid style=dashed, 25 | % legend style={font=\footnotesize}, 26 | ] 27 | 28 | \addplot[ 29 | color=NavyBlue, 30 | mark=square, 31 | ] 32 | table [x=replicas,y=throughput] {data/throughput-HS3-p1024.txt}; 33 | \addplot[ 34 | color=ProcessBlue, 35 | mark=o, 36 | ] 37 | table [x=replicas,y=throughput] {data/phantom-thr-hs3-p1024-1ms.txt}; 38 | \addplot[ 39 | color=BrickRed, 40 | mark=triangle, 41 | ] 42 | table [x=replicas,y=throughput] {data/throughput-HS3-L10.txt}; 43 | 44 | \addplot[ 45 | color=OrangeRed, 46 | mark=diamond, 47 | ] 48 | table [x=replicas,y=throughput] {data/phantom-thr-hs3-p0-10ms.txt}; 49 | 50 | \legend{real-p1024, sim-p1024, real-10ms, sim-10ms} 51 | \end{axis} 52 | \end{tikzpicture} % - avoid white space 53 | \vskip -0.1 cm -------------------------------------------------------------------------------- /datasets/diagrams/throughputPBFT.tex: -------------------------------------------------------------------------------- 1 | \begin{tikzpicture} 2 | \begin{axis}[ 3 | %width= 8cm, 4 | %height=5cm, 5 | %font= \footnotesize, %\footnotesize, 6 | width= 4.5cm, 7 | height=4cm, 8 | font= \footnotesize, 9 | %title={Title}, 10 | xlabel={Replicas}, 11 | ylabel={Throughput [kOps/s]}, 12 | xmin=0, xmax=128, 13 | ymin=0, ymax=300, 14 | xtick={ 4, 16, 32, 64, 128}, 15 | ytick={0, 50, 100,150,200,250, 300}, 16 | legend pos=south east, 17 | legend columns = 1, 18 | %legend style={at={(0.98, 0.8)}}, 19 | legend style={at={(0.98, 0.6)}}, 20 | legend cell align={left}, 21 | ymajorgrids=true, 22 | xmajorgrids=true, 23 | grid style=dashed, 24 | % legend style={font=\footnotesize}, 25 | ] 26 | 27 | \addplot[ 28 | color=ForestGreen, 29 | mark=diamond, 30 | ] 31 | table [x=replicas,y=throughput] {data/phantom-thr-pbft-p1024.txt}; 32 | 33 | \addplot[ 34 | color=ProcessBlue, 35 | mark=o, 36 | ] 37 | table [x=replicas,y=throughput] {data/phantom-thr-hs3-p1024-1ms.txt}; 38 | 39 | % \addplot[ 40 | % color=NavyBlue, 41 | % mark=square, 42 | % ] 43 | % table [x=replicas,y=throughput] {data/throughput-HS3-p1024.txt}; %% ADAPT HERE 44 | % \addplot[ 45 | % color=BrickRed, 46 | % mark=triangle, 47 | % ] 48 | % table [x=replicas,y=throughput] {data/throughput-HS3-L10.txt}; %% ADAPT HERE 49 | \legend{PBFT, HotStuff} 50 | \end{axis} 51 | \end{tikzpicture} % - avoid white space 52 | \vskip -0.1 cm -------------------------------------------------------------------------------- /examples/BFT-SMaRt/bftsmart-aws.yaml: -------------------------------------------------------------------------------- 1 | protocolName: bftsmart 2 | protocolConnectorPath: ./connectors/bftsmart.js 3 | experiments: 4 | - name: 4Replicas 5 | misc: 6 | duration: 9000 s 7 | runahead: 630 us 8 | parallelism: 20 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 100 Mibit 12 | replicaBandwidthDown: 100 Mibit 13 | clientBandwidthUp: 10 Gibit 14 | clientBandwidthDown: 10 Gibit 15 | latency: 16 | uniform: false 17 | replicas: ['us-west-1': 1, 'ap-southeast-2': 1, 'eu-central-1': 1, 'af-south-1': 1] 18 | clients: ['us-west-1': 1, 'af-south-1': 1, 'ap-south-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 4 22 | blockSize: 1000 23 | replicaInterval: 2000 24 | replySize: 0 25 | stateSize: 0 26 | context: false 27 | replicaSig: nosig 28 | bft: true 29 | timeout: 2000 30 | client: 31 | numberOfHosts: 3 32 | startTime: 60 s 33 | threadsPerClient: 1 34 | opPerClient: 20000 35 | requestSize: 0 36 | clientInterval: 0 37 | readOnly: false 38 | verbose: true 39 | clientSig: nosig 40 | invokeOrderedTimeout: 40 41 | -------------------------------------------------------------------------------- /examples/BFT-SMaRt/bftsmart-uniform.yaml: -------------------------------------------------------------------------------- 1 | protocolName: bftsmart 2 | protocolConnectorPath: ./connectors/bftsmart.js 3 | experiments: 4 | - name: 4Replicas 5 | misc: 6 | duration: 300 s 7 | parallelism: 20 8 | runahead: 630 us 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gbit 12 | replicaBandwidthDown: 10 Gbit 13 | clientBandwidthUp: 10 Gbit 14 | clientBandwidthDown: 10 Gbit 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 700 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 4 22 | blockSize: 100 23 | replicaInterval: 100 24 | replySize: 0 25 | stateSize: 0 26 | context: false 27 | replicaSig: nosig 28 | bft: true 29 | timeout: 2000 30 | client: 31 | numberOfHosts: 1 32 | startTime: 30 s 33 | threadsPerClient: 2 34 | opPerClient: 1000 35 | requestSize: 4000 36 | clientInterval: 100 37 | readOnly: false 38 | verbose: true 39 | clientSig: nosig 40 | invokeOrderedTimeout: 40 41 | -------------------------------------------------------------------------------- /examples/dicg22/bftsmart-AWS.yaml: -------------------------------------------------------------------------------- 1 | protocolName: bftsmart 2 | protocolConnectorPath: ./connectors/bftsmart.js 3 | experiments: 4 | - name: 4replicasAWSOregon 5 | misc: 6 | duration: 1200 s 7 | parallelism: 16 8 | useShortestPath: false 9 | network: 10 | replicaBandwidthUp: 1 Gbit 11 | replicaBandwidthDown: 1 Gbit 12 | clientBandwidthUp: 1 Gbit 13 | clientBandwidthDown: 1 Gbit 14 | latency: 15 | uniform: false 16 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 17 | clients: ['us-west-1': 1] 18 | packetLoss: 0.0 19 | replica: 20 | replicas: 4 21 | blockSize: 100 22 | replicaInterval: 100 23 | replySize: 0 24 | stateSize: 0 25 | context: false 26 | replicaSig: nosig 27 | bft: true 28 | timeout: 2000 29 | client: 30 | numberOfHosts: 1 31 | threadsPerClient: 1 32 | opPerClient: 2000 33 | requestSize: 0 34 | clientInterval: 0 35 | readOnly: false 36 | verbose: true 37 | startTime: 30 s 38 | clientSig: nosig 39 | invokeOrderedTimeout: 40 40 | - name: 4replicasAWSIreland 41 | misc: 42 | duration: 1200 s 43 | parallelism: 16 44 | useShortestPath: false 45 | network: 46 | replicaBandwidthUp: 1 Gbit 47 | replicaBandwidthDown: 1 Gbit 48 | clientBandwidthUp: 1 Gbit 49 | clientBandwidthDown: 1 Gbit 50 | latency: 51 | uniform: false 52 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 53 | clients: ['eu-west-1': 1] 54 | packetLoss: 0.0 55 | replica: 56 | replicas: 4 57 | blockSize: 100 58 | replicaInterval: 100 59 | replySize: 0 60 | stateSize: 0 61 | context: false 62 | replicaSig: nosig 63 | bft: true 64 | timeout: 2000 65 | client: 66 | numberOfHosts: 1 67 | clients: 1 68 | threadsPerClient: 1 69 | opPerClient: 2000 70 | requestSize: 0 71 | clientInterval: 0 72 | readOnly: false 73 | startTime: 30 s 74 | verbose: true 75 | clientSig: nosig 76 | invokeOrderedTimeout: 40 77 | - name: 4replicasAWSSao 78 | misc: 79 | duration: 1200 s 80 | parallelism: 16 81 | useShortestPath: false 82 | network: 83 | replicaBandwidthUp: 1 Gbit 84 | replicaBandwidthDown: 1 Gbit 85 | clientBandwidthUp: 1 Gbit 86 | clientBandwidthDown: 1 Gbit 87 | latency: 88 | uniform: false 89 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 90 | clients: ['sa-east-1': 1] 91 | packetLoss: 0.0 92 | replica: 93 | replicas: 4 94 | blockSize: 100 95 | replicaInterval: 100 96 | replySize: 0 97 | stateSize: 0 98 | context: false 99 | replicaSig: nosig 100 | bft: true 101 | timeout: 2000 102 | client: 103 | numberOfHosts: 1 104 | threadsPerClient: 1 105 | opPerClient: 2000 106 | requestSize: 0 107 | clientInterval: 0 108 | readOnly: false 109 | verbose: true 110 | startTime: 30 s 111 | clientSig: nosig 112 | invokeOrderedTimeout: 40 113 | - name: 4replicasAWSSydney 114 | misc: 115 | duration: 1200 s 116 | parallelism: 16 117 | useShortestPath: false 118 | network: 119 | replicaBandwidthUp: 1 Gbit 120 | replicaBandwidthDown: 1 Gbit 121 | clientBandwidthUp: 1 Gbit 122 | clientBandwidthDown: 1 Gbit 123 | latency: 124 | uniform: false 125 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 126 | clients: ['ap-southeast-2': 1] 127 | packetLoss: 0.0 128 | replica: 129 | replicas: 4 130 | blockSize: 100 131 | replicaInterval: 100 132 | replySize: 0 133 | stateSize: 0 134 | context: false 135 | replicaSig: nosig 136 | bft: true 137 | timeout: 2000 138 | client: 139 | numberOfHosts: 1 140 | threadsPerClient: 1 141 | opPerClient: 2000 142 | requestSize: 0 143 | clientInterval: 0 144 | readOnly: false 145 | verbose: true 146 | startTime: 30 s 147 | clientSig: nosig 148 | invokeOrderedTimeout: 40 149 | -------------------------------------------------------------------------------- /examples/dicg22/hs-10ms.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 1000 us 7 | duration: 30 s 8 | parallelism: 16 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 10 Gibits 14 | clientBandwidthDown: 10 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | blockSize: 400 23 | replySize: 0 24 | client: 25 | clients: 16 26 | numberOfHosts: 2 27 | outStandingPerClient: 100 28 | requestSize: 0 29 | - name: 8rep # this will be passed to as data_dir value in shadow.yaml 30 | misc: 31 | runahead: 1000 us 32 | duration: 30 s 33 | parallelism: 16 34 | useShortestPath: false 35 | network: 36 | replicaBandwidthUp: 10 Gibits 37 | replicaBandwidthDown: 10 Gibits 38 | clientBandwidthUp: 10 Gibits 39 | clientBandwidthDown: 10 Gibits 40 | latency: 41 | uniform: true 42 | replicas: 10000 us 43 | clients: 1000 us 44 | packetLoss: 0.0 45 | replica: # should be validated by connectors (currently not done, they are passed as-is) 46 | replicas: 8 47 | blockSize: 400 48 | replySize: 0 49 | client: 50 | clients: 16 51 | numberOfHosts: 2 52 | outStandingPerClient: 100 53 | requestSize: 0 54 | - name: 16rep # this will be passed to as data_dir value in shadow.yaml 55 | misc: 56 | runahead: 1000 us 57 | duration: 30 s 58 | parallelism: 16 59 | useShortestPath: false 60 | network: 61 | replicaBandwidthUp: 10 Gibits 62 | replicaBandwidthDown: 10 Gibits 63 | clientBandwidthUp: 10 Gibits 64 | clientBandwidthDown: 10 Gibits 65 | latency: 66 | uniform: true 67 | replicas: 10000 us 68 | clients: 1000 us 69 | packetLoss: 0.0 70 | replica: # should be validated by connectors (currently not done, they are passed as-is) 71 | replicas: 16 72 | blockSize: 400 73 | replySize: 0 74 | client: 75 | clients: 16 76 | numberOfHosts: 2 77 | outStandingPerClient: 100 78 | requestSize: 0 79 | - name: 32rep # this will be passed to as data_dir value in shadow.yaml 80 | misc: 81 | runahead: 1000 us 82 | duration: 30 s 83 | parallelism: 16 84 | useShortestPath: false 85 | network: 86 | replicaBandwidthUp: 10 Gibits 87 | replicaBandwidthDown: 10 Gibits 88 | clientBandwidthUp: 10 Gibits 89 | clientBandwidthDown: 10 Gibits 90 | latency: 91 | uniform: true 92 | replicas: 10000 us 93 | clients: 1000 us 94 | packetLoss: 0.0 95 | replica: # should be validated by connectors (currently not done, they are passed as-is) 96 | replicas: 32 97 | blockSize: 400 98 | replySize: 0 99 | client: 100 | clients: 16 101 | numberOfHosts: 2 102 | outStandingPerClient: 100 103 | requestSize: 0 104 | - name: 64rep # this will be passed to as data_dir value in shadow.yaml 105 | misc: 106 | runahead: 1000 us 107 | duration: 30 s 108 | parallelism: 16 109 | useShortestPath: false 110 | network: 111 | replicaBandwidthUp: 10 Gibits 112 | replicaBandwidthDown: 10 Gibits 113 | clientBandwidthUp: 10 Gibits 114 | clientBandwidthDown: 10 Gibits 115 | latency: 116 | uniform: true 117 | replicas: 10000 us 118 | clients: 1000 us 119 | packetLoss: 0.0 120 | replica: # should be validated by connectors (currently not done, they are passed as-is) 121 | replicas: 64 122 | blockSize: 400 123 | replySize: 0 124 | client: 125 | clients: 16 126 | numberOfHosts: 2 127 | outStandingPerClient: 100 128 | requestSize: 0 129 | - name: 128rep # this will be passed to as data_dir value in shadow.yaml 130 | misc: 131 | runahead: 1000 us 132 | duration: 30 s 133 | parallelism: 16 134 | useShortestPath: false 135 | network: 136 | replicaBandwidthUp: 10 Gibits 137 | replicaBandwidthDown: 10 Gibits 138 | clientBandwidthUp: 10 Gibits 139 | clientBandwidthDown: 10 Gibits 140 | latency: 141 | uniform: true 142 | replicas: 10000 us 143 | clients: 1000 us 144 | packetLoss: 0.0 145 | replica: # should be validated by connectors (currently not done, they are passed as-is) 146 | replicas: 128 147 | blockSize: 400 148 | replySize: 0 149 | client: 150 | clients: 16 151 | numberOfHosts: 2 152 | outStandingPerClient: 100 153 | requestSize: 0 154 | -------------------------------------------------------------------------------- /examples/gosig/gosig.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-35rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 3600 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 200000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 35 22 | requestTimeout: 400000 23 | batchReplies: true 24 | batchSize: 4000 25 | batchTimeout: 26 | secs: 150 27 | nano: 0 28 | firstStageLength: 5000 29 | secondStageLength: 5000 30 | gossipTime: 2000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 34 34 | gossipPeriod: 2000 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 10 41 | startTime: 10 s 42 | payload: 0 43 | concurrent: 2000 44 | duration: 3500 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/hotstuff/hotstuff-crash-test-restart.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | - name: AWS-200Mbit-150Outstanding-1KiB-BlockSize400-Crash-Restart 5 | misc: 6 | runahead: 900 us 7 | duration: 70 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 200 Mbit 12 | replicaBandwidthDown: 200 Mbit 13 | clientBandwidthUp: 10 Gibit 14 | clientBandwidthDown: 10 Gibit 15 | latency: 16 | uniform: false 17 | replicas: [ 'eu-west-1': 1, 18 | 'eu-west-2': 1, 19 | 'eu-north-1': 1, 20 | 'ap-south-1': 1, 21 | 'eu-west-3': 1, 22 | 'eu-south-1': 1, 23 | 'eu-central-1': 1, 24 | 'us-east-1': 1, 25 | 'us-east-2': 1, 26 | 'us-west-1': 1, 27 | 'us-west-2': 1, 28 | 'af-south-1': 1, 29 | 'ap-northeast-3': 1, 30 | 'ap-northeast-2': 1, 31 | 'me-south-1': 1, 32 | 'ap-northeast-1': 1, 33 | 'sa-east-1': 1, 34 | 'ca-central-1': 1, 35 | 'ap-east-1': 1, 36 | 'ap-southeast-1': 1, 37 | 'ap-southeast-2': 1] 38 | clients: ['ap-south-1': 1] 39 | packetLoss: 0.0 40 | replica: # should be validated by connectors (currently not done, they are passed as-is) 41 | replicas: 21 42 | blockSize: 400 43 | replySize: 1024 44 | pacemaker: 45 | type: rr 46 | propDelay: 1 47 | baseTimeout: 1 48 | impTimer: 3 49 | client: 50 | clients: 16 51 | numberOfHosts: 1 52 | outStandingPerClient: 150 53 | requestSize: 1024 54 | fault: 55 | type: crash 56 | threshold: 0.1 57 | timestamp: 5 s 58 | restartClients: true 59 | - name: AWS-200Mbit-150Outstanding-1KiB-BlockSize400-Crash-NoRestart 60 | misc: 61 | runahead: 900 us 62 | duration: 70 s 63 | parallelism: 34 64 | useShortestPath: false 65 | network: 66 | replicaBandwidthUp: 200 Mbit 67 | replicaBandwidthDown: 200 Mbit 68 | clientBandwidthUp: 10 Gibit 69 | clientBandwidthDown: 10 Gibit 70 | latency: 71 | uniform: false 72 | replicas: [ 'eu-west-1': 1, 73 | 'eu-west-2': 1, 74 | 'eu-north-1': 1, 75 | 'ap-south-1': 1, 76 | 'eu-west-3': 1, 77 | 'eu-south-1': 1, 78 | 'eu-central-1': 1, 79 | 'us-east-1': 1, 80 | 'us-east-2': 1, 81 | 'us-west-1': 1, 82 | 'us-west-2': 1, 83 | 'af-south-1': 1, 84 | 'ap-northeast-3': 1, 85 | 'ap-northeast-2': 1, 86 | 'me-south-1': 1, 87 | 'ap-northeast-1': 1, 88 | 'sa-east-1': 1, 89 | 'ca-central-1': 1, 90 | 'ap-east-1': 1, 91 | 'ap-southeast-1': 1, 92 | 'ap-southeast-2': 1] 93 | clients: ['ap-south-1': 1] 94 | packetLoss: 0.0 95 | replica: # should be validated by connectors (currently not done, they are passed as-is) 96 | replicas: 21 97 | blockSize: 400 98 | replySize: 1024 99 | pacemaker: 100 | type: rr 101 | propDelay: 1 102 | baseTimeout: 1 103 | impTimer: 3 104 | client: 105 | clients: 16 106 | numberOfHosts: 1 107 | outStandingPerClient: 150 108 | requestSize: 1024 109 | fault: 110 | type: crash 111 | threshold: 0.1 112 | timestamp: 5 s 113 | -------------------------------------------------------------------------------- /examples/hotstuff/hs3-aws.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | duration: 10 s 7 | runahead: 630 us 8 | parallelism: 8 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 10 Gibits 14 | clientBandwidthDown: 10 Gibits 15 | latency: 16 | uniform: false 17 | replicas: ['us-west-1': 2, 'af-south-1': 2] 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | blockSize: 400 23 | replySize: 128 24 | client: 25 | numberOfHosts: 2 26 | clients: 4 27 | startTime: 0 s 28 | outStandingPerClient: 1400 29 | requestSize: 128 30 | -------------------------------------------------------------------------------- /examples/hotstuff/hs3-uniform.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | - name: 4rep 5 | misc: 6 | runahead: 630 us 7 | duration: 10 s 8 | parallelism: 8 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 700 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | blockSize: 400 23 | replySize: 128 24 | pacemaker: 25 | type: rr 26 | propDelay: 2 27 | baseTimeout: 2 28 | client: 29 | numberOfHosts: 2 30 | clients: 4 31 | startTime: 0 s 32 | outStandingPerClient: 1400 33 | requestSize: 128 34 | 35 | -------------------------------------------------------------------------------- /examples/kauri/kauri-fig6-national.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: national-100 5 | misc: 6 | runahead: 630 us 7 | duration: 300 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 1 Gbits 12 | replicaBandwidthDown: 1 Gbits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 5000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 100 22 | fanout: 10 23 | pipeDepth: 3 24 | pipeLatency: 10 25 | blockSize: 1000 26 | client: 27 | numberOfHosts: 4 28 | clients: 4 29 | startTime: 100 s 30 | outStandingPerClient: 500 31 | - name: national-200 32 | misc: 33 | runahead: 630 us 34 | duration: 300 s 35 | parallelism: 34 36 | useShortestPath: false 37 | network: 38 | replicaBandwidthUp: 1 Gbits 39 | replicaBandwidthDown: 1 Gbits 40 | clientBandwidthUp: 100 Gibits 41 | clientBandwidthDown: 100 Gibits 42 | latency: 43 | uniform: true 44 | replicas: 5000 us 45 | clients: 1000 us 46 | packetLoss: 0.0 47 | replica: 48 | replicas: 200 49 | fanout: 14 50 | pipeDepth: 3 51 | pipeLatency: 10 52 | blockSize: 1000 53 | client: 54 | numberOfHosts: 4 55 | clients: 4 56 | startTime: 100 s 57 | outStandingPerClient: 500 58 | - name: national-400 59 | misc: 60 | runahead: 630 us 61 | duration: 300 s 62 | parallelism: 34 63 | useShortestPath: false 64 | network: 65 | replicaBandwidthUp: 1 Gbits 66 | replicaBandwidthDown: 1 Gbits 67 | clientBandwidthUp: 100 Gibits 68 | clientBandwidthDown: 100 Gibits 69 | latency: 70 | uniform: true 71 | replicas: 5000 us 72 | clients: 1000 us 73 | packetLoss: 0.0 74 | replica: 75 | replicas: 400 76 | fanout: 20 77 | pipeDepth: 2 78 | pipeLatency: 10 79 | blockSize: 1000 80 | client: 81 | numberOfHosts: 4 82 | clients: 4 83 | startTime: 100 s 84 | outStandingPerClient: 500 85 | -------------------------------------------------------------------------------- /examples/kauri/kauri-fig6-regional.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: regional-100 5 | misc: 6 | runahead: 630 us 7 | duration: 300 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 100 Mbits 12 | replicaBandwidthDown: 100 Mbits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 50000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 100 22 | fanout: 10 23 | pipeDepth: 10 24 | pipeLatency: 10 25 | blockSize: 1000 26 | client: 27 | numberOfHosts: 4 28 | clients: 4 29 | startTime: 100 s 30 | outStandingPerClient: 500 31 | - name: regional-200 32 | misc: 33 | runahead: 630 us 34 | duration: 300 s 35 | parallelism: 34 36 | useShortestPath: false 37 | network: 38 | replicaBandwidthUp: 100 Mbits 39 | replicaBandwidthDown: 100 Mbits 40 | clientBandwidthUp: 100 Gibits 41 | clientBandwidthDown: 100 Gibits 42 | latency: 43 | uniform: true 44 | replicas: 50000 us 45 | clients: 1000 us 46 | packetLoss: 0.0 47 | replica: 48 | replicas: 200 49 | fanout: 14 50 | pipeDepth: 5 51 | pipeLatency: 10 52 | blockSize: 1000 53 | client: 54 | numberOfHosts: 4 55 | clients: 4 56 | startTime: 100 s 57 | outStandingPerClient: 500 58 | - name: regional-400 59 | misc: 60 | runahead: 630 us 61 | duration: 300 s 62 | parallelism: 34 63 | useShortestPath: false 64 | network: 65 | replicaBandwidthUp: 100 Mbits 66 | replicaBandwidthDown: 100 Mbits 67 | clientBandwidthUp: 100 Gibits 68 | clientBandwidthDown: 100 Gibits 69 | latency: 70 | uniform: true 71 | replicas: 50000 us 72 | clients: 1000 us 73 | packetLoss: 0.0 74 | replica: 75 | replicas: 400 76 | fanout: 20 77 | pipeDepth: 3 78 | pipeLatency: 10 79 | blockSize: 1000 80 | client: 81 | numberOfHosts: 4 82 | clients: 4 83 | startTime: 100 s 84 | outStandingPerClient: 500 85 | -------------------------------------------------------------------------------- /examples/kauri/kauri-uniform.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: 4rep 5 | misc: 6 | runahead: 630 us 7 | duration: 3000 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbit 12 | replicaBandwidthDown: 25 Mbit 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 100 22 | fanout: 10 23 | pipeDepth: 6 24 | pipeLatency: 10 25 | blockSize: 1000 26 | replySize: 0 27 | client: 28 | numberOfHosts: 4 29 | clients: 4 30 | startTime: 100 s 31 | outStandingPerClient: 500 32 | requestSize: 0 33 | -------------------------------------------------------------------------------- /examples/mir/mir-uniform-noauth.yaml: -------------------------------------------------------------------------------- 1 | protocolName: mir 2 | protocolConnectorPath: ./connectors/mir-no-auth.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 3600 s 8 | parallelism: 36 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 100000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 10 22 | minBatchSize: 100 23 | maxBatchSize: 100 24 | replySize: 0 25 | batchReplies: true 26 | requestTimeout: 40000 27 | epochLength: 1000 28 | clientMarkWindow: 100000 29 | batchTimeout: 30 | secs: 10 31 | nano: 0 32 | client: 33 | numberOfHosts: 1 34 | clients: 4 35 | startTime: 100 s 36 | payload: 0 37 | concurrent: 1600 38 | duration: 3500 # WATCH OUT FOR THIS VALUE (for now) 39 | -------------------------------------------------------------------------------- /examples/mir/mir-uniform.yaml: -------------------------------------------------------------------------------- 1 | protocolName: mir 2 | protocolConnectorPath: ./connectors/mir.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 3600 s 8 | parallelism: 1 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 1000 us 18 | clients: 10000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 8 22 | minBatchSize: 10 23 | maxBatchSize: 10 24 | replySize: 0 25 | batchReplies: true 26 | requestTimeout: 400000 27 | epochLength: 1000 28 | clientMarkWindow: 100000 29 | batchTimeout: 30 | secs: 10 31 | nano: 0 32 | client: 33 | numberOfHosts: 1 34 | clients: 4 35 | startTime: 1000 s 36 | payload: 0 37 | concurrent: 50 38 | duration: 3500 # WATCH OUT FOR THIS VALUE (for now) 39 | -------------------------------------------------------------------------------- /examples/prdc23/crash/-run-user-1000-gvfs-sftp:host=192.168.12.211-home-cb-tool-examples-prdc23-crash-pbft-.txt: -------------------------------------------------------------------------------- 1 | /run/user/1000/gvfs/sftp:host=192.168.12.211/home/cb/tool/examples/prdc23/crash/pbft-opt.yaml -------------------------------------------------------------------------------- /examples/prdc23/crash/christian-crash-test.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: crash-kauri-64 5 | misc: 6 | runahead: 630 us 7 | duration: 80 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 64 22 | fanout: 8 23 | pipeDepth: 2 24 | pipeLatency: 10 25 | blockSize: 500 26 | replySize: 0 27 | pacemaker: 28 | type: dummy 29 | propDelay: 1 30 | baseTimeout: 1 31 | impTimer: 3 32 | client: 33 | numberOfHosts: 4 34 | clients: 4 35 | startTime: 20 s 36 | outStandingPerClient: 1000 37 | requestSize: 500 38 | fault: 39 | type: crash 40 | threshold: 0.015625 41 | timestamp: 40 s 42 | -------------------------------------------------------------------------------- /examples/prdc23/crash/christian-crash-test2.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: crash-kauri-128 5 | misc: 6 | runahead: 630 us 7 | duration: 80 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 18 | clients: ['eu-west-1': 2, 'af-south-1': 1, 'us-west-1': 1, 'ap-southeast-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 128 22 | fanout: 12 23 | pipeDepth: 3 # 2->363 blocks 24 | pipeLatency: 10 25 | blockSize: 500 26 | replySize: 0 27 | pacemaker: 28 | type: dummy 29 | propDelay: 1 30 | baseTimeout: 1 31 | impTimer: 3 32 | client: 33 | numberOfHosts: 5 34 | clients: 5 35 | startTime: 20 s 36 | outStandingPerClient: 2000 37 | requestSize: 500 38 | fault: 39 | type: crash 40 | threshold: 0.0078125 41 | timestamp: 40 s 42 | -------------------------------------------------------------------------------- /examples/prdc23/crash/kauri-crash-test.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: regional-200-crash+restart 5 | misc: 6 | runahead: 630 us 7 | duration: 300 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 100 Mbits 12 | replicaBandwidthDown: 100 Mbits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 50000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 200 22 | fanout: 14 23 | pipeDepth: 5 24 | pipeLatency: 10 25 | blockSize: 1000 26 | client: 27 | numberOfHosts: 4 28 | clients: 4 29 | startTime: 100 s 30 | outStandingPerClient: 500 31 | fault: 32 | type: crash 33 | threshold: 0.33 34 | timestamp: 150 s 35 | restartClients: true 36 | # - name: regional-200-crash-0.33-norestart 37 | # misc: 38 | # runahead: 630 us 39 | # duration: 300 s 40 | # parallelism: 34 41 | # useShortestPath: false 42 | # network: 43 | # replicaBandwidthUp: 100 Mbits 44 | # replicaBandwidthDown: 100 Mbits 45 | # clientBandwidthUp: 100 Gibits 46 | # clientBandwidthDown: 100 Gibits 47 | # latency: 48 | # uniform: true 49 | # replicas: 50000 us 50 | # clients: 1000 us 51 | # packetLoss: 0.0 52 | # replica: 53 | # replicas: 200 54 | # fanout: 14 55 | # pipeDepth: 5 56 | # pipeLatency: 10 57 | # blockSize: 1000 58 | # client: 59 | # numberOfHosts: 4 60 | # clients: 4 61 | # startTime: 100 s 62 | # outStandingPerClient: 500 63 | # fault: 64 | # type: crash 65 | # threshold: 0.33 66 | # timestamp: 150 s 67 | -------------------------------------------------------------------------------- /examples/prdc23/crash/sadok-minirun.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: kauri-crash-test-4reps 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 4 22 | fanout: 4 23 | pipeDepth: 1 24 | pipeLatency: 10 25 | blockSize: 1000 26 | replySize: 0 27 | client: 28 | numberOfHosts: 4 29 | clients: 4 30 | startTime: 10 s 31 | outStandingPerClient: 500 32 | requestSize: 500 33 | fault: 34 | type: crash 35 | threshold: 0.33 36 | timestamp: 30 s 37 | -------------------------------------------------------------------------------- /examples/prdc23/dos/hs2block400.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | # - name: fault-free-hotstuff-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1] 19 | # #['af-south-1': 1, 'ap-southeast-1': 1, 'eu-west-1': 1, 'us-east-1': 1, 'ap-southeast-2':1, 'sa-east-1': 1, 'me-south-1': 1, 'us-west-1': 1] 20 | # packetLoss: 0.0 21 | # replica: 22 | # replicas: 64 23 | # blockSize: 200 24 | # replySize: 0 25 | # pacemaker: 26 | # type: rr 27 | # propDelay: 4 28 | # baseTimeout: 4 29 | # client: 30 | # numberOfHosts: 2 31 | # clients: 2 32 | # startTime: 100 s 33 | # outStandingPerClient: 500 34 | # requestSize: 500 35 | - name: fault-free-hotstuff-64-block400 36 | misc: 37 | runahead: 630 us 38 | duration: 221 s 39 | parallelism: 34 40 | useShortestPath: false 41 | network: 42 | replicaBandwidthUp: 25 Mbits 43 | replicaBandwidthDown: 25 Mbits 44 | clientBandwidthUp: 10 Gbits 45 | clientBandwidthDown: 10 Gbits 46 | latency: 47 | uniform: false 48 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 49 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 50 | packetLoss: 0.0 51 | replica: 52 | replicas: 64 53 | blockSize: 400 54 | replySize: 0 55 | client: 56 | numberOfHosts: 4 57 | clients: 4 58 | startTime: 100 s 59 | outStandingPerClient: 500 60 | requestSize: 500 61 | - name: fault-free-hotstuff-128-block400 62 | misc: 63 | runahead: 630 us 64 | duration: 221 s 65 | parallelism: 34 66 | useShortestPath: false 67 | network: 68 | replicaBandwidthUp: 25 Mbits 69 | replicaBandwidthDown: 25 Mbits 70 | clientBandwidthUp: 10 Gbits 71 | clientBandwidthDown: 10 Gbits 72 | latency: 73 | uniform: false 74 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 75 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 76 | packetLoss: 0.0 77 | replica: 78 | replicas: 128 79 | blockSize: 400 80 | replySize: 0 81 | client: 82 | numberOfHosts: 4 83 | clients: 4 84 | startTime: 100 s 85 | outStandingPerClient: 500 86 | requestSize: 500 87 | - name: fault-free-hotstuff-256-block400 88 | misc: 89 | runahead: 630 us 90 | duration: 221 s 91 | parallelism: 124 92 | useShortestPath: false 93 | network: 94 | replicaBandwidthUp: 25 Mbits 95 | replicaBandwidthDown: 25 Mbits 96 | clientBandwidthUp: 10 Gbits 97 | clientBandwidthDown: 10 Gbits 98 | latency: 99 | uniform: false 100 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 101 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 102 | packetLoss: 0.0 103 | replica: 104 | replicas: 256 105 | blockSize: 400 106 | replySize: 0 107 | client: 108 | numberOfHosts: 4 109 | clients: 4 110 | startTime: 100 s 111 | outStandingPerClient: 500 112 | requestSize: 500 113 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/-run-user-1000-gvfs-sftp:host=192.168.12.211,user=cb-home-cb-tool-examples-prdc23-fault-free-gosig64 (Kopie)..txt: -------------------------------------------------------------------------------- 1 | /run/user/1000/gvfs/sftp:host=192.168.12.211,user=cb/home/cb/tool/examples/prdc23/fault-free/gosig64 (Kopie).yaml -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-32 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 361 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 32 22 | requestTimeout: 400000 23 | batchReplies: true 24 | batchSize: 10000 25 | batchTimeout: 26 | secs: 40 27 | nano: 0 28 | firstStageLength: 7500 29 | secondStageLength: 7500 30 | gossipTime: 15000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 200 35 | updateExpiration: 30000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 10 s 42 | payload: 32 43 | concurrent: 20000 44 | duration: 340 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig100WAN (Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-100WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 100 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 1000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 30000 29 | secondStageLength: 60000 30 | gossipTime: 4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 1000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig100WAN (noch eine Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-100WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 100 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 1000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 30000 29 | secondStageLength: 30000 30 | gossipTime: 4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 10000 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 1000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig100WAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-100WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 100 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 40000 29 | secondStageLength: 40000 30 | gossipTime: 4000 31 | maxRounds: 3 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 10000 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig128 (Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-128 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 128 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 60000 29 | secondStageLength: 80000 30 | gossipTime: 4000 #4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #10000 35 | updateExpiration: 60000 #30000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig128.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-128 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 128 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 60000 29 | secondStageLength: 80000 30 | gossipTime: 4000 #4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #10000 35 | updateExpiration: 60000 #30000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig16WAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-16WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 16 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 5000 29 | secondStageLength: 10000 30 | gossipTime: 2000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 5 34 | gossipPeriod: 100 #100 35 | updateExpiration: 10000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig2.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-64 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 32 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 400000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 10 27 | nano: 0 28 | firstStageLength: 20000 29 | secondStageLength: 40000 30 | gossipTime: 20000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 5 34 | gossipPeriod: 1000 35 | updateExpiration: 10000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 100 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 120 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig32.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-32 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 600 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 32 22 | requestTimeout: 600000 23 | batchReplies: true 24 | batchSize: 100000 25 | batchTimeout: 26 | secs: 2 27 | nano: 100_000_000 28 | firstStageLength: 20000 29 | secondStageLength: 20000 30 | gossipTime: 10000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 35 | updateExpiration: 30000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 100 s 42 | payload: 32 43 | concurrent: 100000 #1000 44 | duration: 600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig32WAN (Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-32WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 32 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 10000 29 | secondStageLength: 20000 30 | gossipTime: 4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 5 34 | gossipPeriod: 1000 #100 35 | updateExpiration: 20000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig32WAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-32WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 10000 29 | secondStageLength: 20000 30 | gossipTime: 4000 31 | maxRounds: 11 32 | gossip: 33 | gossipCount: 5 34 | gossipPeriod: 1000 #100 35 | updateExpiration: 20000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig4LAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-4LAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 121 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gbits 12 | replicaBandwidthDown: 10 Gbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 1000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | requestTimeout: 600000 23 | batchReplies: true 24 | batchSize: 10000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 2000 29 | secondStageLength: 4000 30 | gossipTime: 2000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 35 | updateExpiration: 10000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 10 s 42 | payload: 32 43 | concurrent: 10000 44 | duration: 120 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig4WAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-4WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 121 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | requestTimeout: 600000 23 | batchReplies: true 24 | batchSize: 10000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 2000 29 | secondStageLength: 4000 30 | gossipTime: 2000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 35 | updateExpiration: 10000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 10 s 42 | payload: 32 43 | concurrent: 10000 44 | duration: 120 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig64 (Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-64 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 1000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 50000 29 | secondStageLength: 50000 30 | gossipTime: 4000 31 | maxRounds: 3 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 1000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig64 (noch eine Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-64 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 1000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 50000 29 | secondStageLength: 50000 30 | gossipTime: 4000 31 | maxRounds: 3 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 1000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig64.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-64 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 1610 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 6000000 23 | batchReplies: true 24 | batchSize: 20000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 50000 29 | secondStageLength: 50000 30 | gossipTime: 4000 31 | maxRounds: 3 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 100 #100 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 0 s 42 | payload: 32 43 | concurrent: 20000 44 | duration: 1600 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/gosig8WAN.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-8WAN # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 121 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 8 22 | requestTimeout: 600000 23 | batchReplies: true 24 | batchSize: 10000 25 | batchTimeout: 26 | secs: 1 27 | nano: 100_000_000 28 | firstStageLength: 4000 29 | secondStageLength: 8000 30 | gossipTime: 4000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 3 34 | gossipPeriod: 200 #100 35 | updateExpiration: 20000 36 | useDirectSending: false 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 10 s 42 | payload: 32 43 | concurrent: 10000 44 | duration: 120 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/hs-bls.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | # - name: fault-free-hs-bls-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # # uniform: true 20 | # # replicas: 100000 us 21 | # # clients: 1000 us 22 | # packetLoss: 0.0 23 | # replica: 24 | # # replicas: 64 25 | # # fanout: 9 #8 26 | # # pipeDepth: 4 #3 #4 27 | # # pipeLatency: 20 #10 #50 28 | # # blockSize: 800 #1000 29 | # # replySize: 0 30 | # replicas: 64 31 | # fanout: 64 32 | # pipeDepth: 0 33 | # pipeLatency: 10 34 | # blockSize: 1000 35 | # client: 36 | # # numberOfHosts: 12 37 | # # clients: 12 38 | # # startTime: 100 s 39 | # # outStandingPerClient: 4000 40 | # # requestSize: 500 41 | # numberOfHosts: 4 42 | # clients: 4 43 | # startTime: 100 s 44 | # outStandingPerClient: 20000 45 | # - name: fault-free-hs-bls-128 46 | # misc: 47 | # runahead: 630 us 48 | # duration: 221 s 49 | # parallelism: 34 50 | # useShortestPath: false 51 | # network: 52 | # replicaBandwidthUp: 25 Mbits 53 | # replicaBandwidthDown: 25 Mbits 54 | # clientBandwidthUp: 10 Gbits 55 | # clientBandwidthDown: 10 Gbits 56 | # latency: 57 | # uniform: false 58 | # replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | # packetLoss: 0.0 61 | # replica: 62 | # replicas: 128 63 | # fanout: 128 64 | # pipeDepth: 0 65 | # pipeLatency: 10 66 | # blockSize: 1000 67 | # replySize: 0 68 | # client: 69 | # numberOfHosts: 4 70 | # clients: 4 71 | # startTime: 100 s 72 | # outStandingPerClient: 20000 73 | # requestSize: 500 74 | - name: fault-free-hs-bls-256 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 32 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 256 93 | pipeDepth: 0 94 | pipeLatency: 20 95 | blockSize: 500 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 500 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/hs2.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | # - name: fault-free-hotstuff-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1] 19 | # #['af-south-1': 1, 'ap-southeast-1': 1, 'eu-west-1': 1, 'us-east-1': 1, 'ap-southeast-2':1, 'sa-east-1': 1, 'me-south-1': 1, 'us-west-1': 1] 20 | # packetLoss: 0.0 21 | # replica: 22 | # replicas: 64 23 | # blockSize: 200 24 | # replySize: 0 25 | # pacemaker: 26 | # type: rr 27 | # propDelay: 4 28 | # baseTimeout: 4 29 | # client: 30 | # numberOfHosts: 2 31 | # clients: 2 32 | # startTime: 100 s 33 | # outStandingPerClient: 500 34 | # requestSize: 500 35 | - name: fault-free-hotstuff-64 36 | misc: 37 | runahead: 630 us 38 | duration: 221 s 39 | parallelism: 34 40 | useShortestPath: false 41 | network: 42 | replicaBandwidthUp: 25 Mbits 43 | replicaBandwidthDown: 25 Mbits 44 | clientBandwidthUp: 10 Gbits 45 | clientBandwidthDown: 10 Gbits 46 | latency: 47 | uniform: false 48 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 49 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 50 | packetLoss: 0.0 51 | replica: 52 | replicas: 64 53 | blockSize: 1000 54 | replySize: 0 55 | client: 56 | numberOfHosts: 4 57 | clients: 4 58 | startTime: 100 s 59 | outStandingPerClient: 1500 60 | requestSize: 500 61 | - name: fault-free-hotstuff-128 62 | misc: 63 | runahead: 630 us 64 | duration: 221 s 65 | parallelism: 34 66 | useShortestPath: false 67 | network: 68 | replicaBandwidthUp: 25 Mbits 69 | replicaBandwidthDown: 25 Mbits 70 | clientBandwidthUp: 10 Gbits 71 | clientBandwidthDown: 10 Gbits 72 | latency: 73 | uniform: false 74 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 75 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 76 | packetLoss: 0.0 77 | replica: 78 | replicas: 128 79 | blockSize: 1000 80 | replySize: 0 81 | client: 82 | numberOfHosts: 4 83 | clients: 4 84 | startTime: 100 s 85 | outStandingPerClient: 1500 86 | requestSize: 500 87 | - name: fault-free-hotstuff-256 88 | misc: 89 | runahead: 630 us 90 | duration: 221 s 91 | parallelism: 124 92 | useShortestPath: false 93 | network: 94 | replicaBandwidthUp: 25 Mbits 95 | replicaBandwidthDown: 25 Mbits 96 | clientBandwidthUp: 10 Gbits 97 | clientBandwidthDown: 10 Gbits 98 | latency: 99 | uniform: false 100 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 101 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 102 | packetLoss: 0.0 103 | replica: 104 | replicas: 256 105 | blockSize: 1000 106 | replySize: 0 107 | client: 108 | numberOfHosts: 4 109 | clients: 4 110 | startTime: 100 s 111 | outStandingPerClient: 1500 112 | requestSize: 500 113 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/hs2block400.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | # - name: fault-free-hotstuff-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1] 19 | # #['af-south-1': 1, 'ap-southeast-1': 1, 'eu-west-1': 1, 'us-east-1': 1, 'ap-southeast-2':1, 'sa-east-1': 1, 'me-south-1': 1, 'us-west-1': 1] 20 | # packetLoss: 0.0 21 | # replica: 22 | # replicas: 64 23 | # blockSize: 200 24 | # replySize: 0 25 | # pacemaker: 26 | # type: rr 27 | # propDelay: 4 28 | # baseTimeout: 4 29 | # client: 30 | # numberOfHosts: 2 31 | # clients: 2 32 | # startTime: 100 s 33 | # outStandingPerClient: 500 34 | # requestSize: 500 35 | - name: fault-free-hotstuff-64-block400 36 | misc: 37 | runahead: 630 us 38 | duration: 221 s 39 | parallelism: 34 40 | useShortestPath: false 41 | network: 42 | replicaBandwidthUp: 25 Mbits 43 | replicaBandwidthDown: 25 Mbits 44 | clientBandwidthUp: 10 Gbits 45 | clientBandwidthDown: 10 Gbits 46 | latency: 47 | uniform: false 48 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 49 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 50 | packetLoss: 0.0 51 | replica: 52 | replicas: 64 53 | blockSize: 400 54 | replySize: 0 55 | client: 56 | numberOfHosts: 4 57 | clients: 4 58 | startTime: 100 s 59 | outStandingPerClient: 500 60 | requestSize: 500 61 | - name: fault-free-hotstuff-128-block400 62 | misc: 63 | runahead: 630 us 64 | duration: 221 s 65 | parallelism: 34 66 | useShortestPath: false 67 | network: 68 | replicaBandwidthUp: 25 Mbits 69 | replicaBandwidthDown: 25 Mbits 70 | clientBandwidthUp: 10 Gbits 71 | clientBandwidthDown: 10 Gbits 72 | latency: 73 | uniform: false 74 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 75 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 76 | packetLoss: 0.0 77 | replica: 78 | replicas: 128 79 | blockSize: 400 80 | replySize: 0 81 | client: 82 | numberOfHosts: 4 83 | clients: 4 84 | startTime: 100 s 85 | outStandingPerClient: 500 86 | requestSize: 500 87 | - name: fault-free-hotstuff-256-block400 88 | misc: 89 | runahead: 630 us 90 | duration: 221 s 91 | parallelism: 124 92 | useShortestPath: false 93 | network: 94 | replicaBandwidthUp: 25 Mbits 95 | replicaBandwidthDown: 25 Mbits 96 | clientBandwidthUp: 10 Gbits 97 | clientBandwidthDown: 10 Gbits 98 | latency: 99 | uniform: false 100 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 101 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 102 | packetLoss: 0.0 103 | replica: 104 | replicas: 256 105 | blockSize: 400 106 | replySize: 0 107 | client: 108 | numberOfHosts: 4 109 | clients: 4 110 | startTime: 100 s 111 | outStandingPerClient: 500 112 | requestSize: 500 113 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/hsBLS.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-hsBLS-64 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 64 32 | pipeDepth: 0 33 | pipeLatency: 10 34 | blockSize: 1000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-hsBLS-128 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 128 64 | pipeDepth: 0 65 | pipeLatency: 10 66 | blockSize: 1000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-hsBLS-256 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 256 93 | pipeDepth: 0 94 | pipeLatency: 10 95 | blockSize: 1000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/hsBLS400.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-hsBLS-64b400 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 64 32 | pipeDepth: 0 33 | pipeLatency: 10 34 | blockSize: 400 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-hsBLS-128b400 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 128 64 | pipeDepth: 0 65 | pipeLatency: 10 66 | blockSize: 400 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-hsBLS-256b400 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 32 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 256 93 | pipeDepth: 0 94 | pipeLatency: 10 95 | blockSize: 400 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/kauri.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 3 33 | pipeLatency: 10 34 | blockSize: 1000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 1000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 1000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/kauri2k (noch eine Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64-2k 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 3 33 | pipeLatency: 10 34 | blockSize: 2000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128-2k 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 2000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256-2k 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 2000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/kauri2k.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64-2k 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 3 33 | pipeLatency: 10 34 | blockSize: 2000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128-2k 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 2000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256-2k 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 2000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/kauri500.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64-500 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 4 33 | pipeLatency: 10 34 | blockSize: 500 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128-500 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 4 65 | pipeLatency: 10 66 | blockSize: 500 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256-500 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 4 94 | pipeLatency: 10 95 | blockSize: 500 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/pbft-opt-400.yaml: -------------------------------------------------------------------------------- 1 | protocolName: themis 2 | protocolConnectorPath: ./connectors/themis.js 3 | experiments: 4 | - name: fault-free-pbft-64-opt-400 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 64 22 | blockSize: 4000 23 | minBatchSize: 200 24 | maxBatchSize: 400 25 | batchReplies: true 26 | replySize: 0 27 | requestTimeout: 400000 28 | batchTimeout: 29 | secs: 120 30 | nano: 100_000_000 31 | client: 32 | numberOfHosts: 1 33 | clients: 1 34 | startTime: 100 s 35 | concurrent: 800 36 | payload: 32 37 | duration: 120 38 | - name: fault-free-pbft-128-opt-400 39 | misc: 40 | runahead: 630 us 41 | duration: 221 s 42 | parallelism: 34 43 | useShortestPath: false 44 | network: 45 | replicaBandwidthUp: 25 Mbits 46 | replicaBandwidthDown: 25 Mbits 47 | clientBandwidthUp: 10 Gbits 48 | clientBandwidthDown: 10 Gbits 49 | latency: 50 | uniform: false 51 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 52 | clients: ['eu-west-1': 1] 53 | packetLoss: 0.0 54 | replica: 55 | replicas: 128 56 | blockSize: 400 57 | minBatchSize: 200 58 | maxBatchSize: 400 59 | batchReplies: true 60 | replySize: 0 61 | requestTimeout: 400000 62 | batchTimeout: 63 | secs: 120 64 | nano: 100_000_000 65 | client: 66 | numberOfHosts: 1 67 | clients: 1 68 | startTime: 100 s 69 | concurrent: 800 70 | payload: 32 71 | duration: 120 72 | - name: fault-free-pbft-256-opt-400 73 | misc: 74 | runahead: 630 us 75 | duration: 221 s 76 | parallelism: 34 77 | useShortestPath: false 78 | network: 79 | replicaBandwidthUp: 25 Mbits 80 | replicaBandwidthDown: 25 Mbits 81 | clientBandwidthUp: 10 Gbits 82 | clientBandwidthDown: 10 Gbits 83 | latency: 84 | uniform: false 85 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 86 | clients: ['eu-west-1': 1] 87 | packetLoss: 0.0 88 | replica: 89 | replicas: 256 90 | blockSize: 400 91 | minBatchSize: 200 92 | maxBatchSize: 400 93 | batchReplies: true 94 | replySize: 0 95 | requestTimeout: 400000 96 | batchTimeout: 97 | secs: 120 98 | nano: 100_000_000 99 | client: 100 | numberOfHosts: 1 101 | clients: 1 102 | startTime: 100 s 103 | concurrent: 800 104 | payload: 32 105 | duration: 120 106 | ############################################### 107 | ############################################### 108 | # - name: fault-free-pbft-64-500-1000 109 | # misc: 110 | # runahead: 630 us 111 | # duration: 141 s 112 | # parallelism: 34 113 | # useShortestPath: false 114 | # network: 115 | # replicaBandwidthUp: 25 Mbits 116 | # replicaBandwidthDown: 25 Mbits 117 | # clientBandwidthUp: 10 Gbits 118 | # clientBandwidthDown: 10 Gbits 119 | # latency: 120 | # uniform: false 121 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 122 | # clients: ['eu-west-1': 1] 123 | # packetLoss: 0.0 124 | # replica: 125 | # replicas: 64 126 | # blockSize: 1000 127 | # minBatchSize: 500 128 | # maxBatchSize: 500 129 | # batchReplies: true 130 | # replySize: 0 131 | # requestTimeout: 400000 132 | # batchTimeout: 133 | # secs: 120 134 | # nano: 100_000_000 135 | # client: 136 | # numberOfHosts: 1 137 | # clients: 1 138 | # startTime: 100 s 139 | # concurrent: 1000 140 | # payload: 500 141 | # duration: 120 142 | ############################################### 143 | ############################################### 144 | -------------------------------------------------------------------------------- /examples/prdc23/fault-free/pbft.yaml: -------------------------------------------------------------------------------- 1 | protocolName: themis 2 | protocolConnectorPath: ./connectors/themis.js 3 | experiments: 4 | - name: fault-free-pbft-64 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 64 22 | blockSize: 1000 23 | minBatchSize: 1000 24 | maxBatchSize: 1000 25 | batchReplies: true 26 | replySize: 0 27 | requestTimeout: 400000 28 | batchTimeout: 29 | secs: 120 30 | nano: 100_000_000 31 | client: 32 | numberOfHosts: 1 33 | clients: 1 34 | startTime: 100 s 35 | concurrent: 2000 36 | payload: 500 37 | duration: 120 38 | - name: fault-free-pbft-128 39 | misc: 40 | runahead: 630 us 41 | duration: 221 s 42 | parallelism: 34 43 | useShortestPath: false 44 | network: 45 | replicaBandwidthUp: 25 Mbits 46 | replicaBandwidthDown: 25 Mbits 47 | clientBandwidthUp: 10 Gbits 48 | clientBandwidthDown: 10 Gbits 49 | latency: 50 | uniform: false 51 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 52 | clients: ['eu-west-1': 1] 53 | packetLoss: 0.0 54 | replica: 55 | replicas: 128 56 | blockSize: 1000 57 | minBatchSize: 1000 58 | maxBatchSize: 1000 59 | batchReplies: true 60 | replySize: 0 61 | requestTimeout: 400000 62 | batchTimeout: 63 | secs: 120 64 | nano: 100_000_000 65 | client: 66 | numberOfHosts: 1 67 | clients: 1 68 | startTime: 100 s 69 | concurrent: 2000 70 | payload: 500 71 | duration: 120 72 | - name: fault-free-pbft-256 73 | misc: 74 | runahead: 630 us 75 | duration: 221 s 76 | parallelism: 34 77 | useShortestPath: false 78 | network: 79 | replicaBandwidthUp: 25 Mbits 80 | replicaBandwidthDown: 25 Mbits 81 | clientBandwidthUp: 10 Gbits 82 | clientBandwidthDown: 10 Gbits 83 | latency: 84 | uniform: false 85 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 86 | clients: ['eu-west-1': 1] 87 | packetLoss: 0.0 88 | replica: 89 | replicas: 256 90 | blockSize: 1000 91 | minBatchSize: 1000 92 | maxBatchSize: 1000 93 | batchReplies: true 94 | replySize: 0 95 | requestTimeout: 400000 96 | batchTimeout: 97 | secs: 120 98 | nano: 100_000_000 99 | client: 100 | numberOfHosts: 1 101 | clients: 1 102 | startTime: 100 s 103 | concurrent: 2000 104 | payload: 500 105 | duration: 120 106 | ############################################### 107 | ############################################### 108 | # - name: fault-free-pbft-64-500-1000 109 | # misc: 110 | # runahead: 630 us 111 | # duration: 141 s 112 | # parallelism: 34 113 | # useShortestPath: false 114 | # network: 115 | # replicaBandwidthUp: 25 Mbits 116 | # replicaBandwidthDown: 25 Mbits 117 | # clientBandwidthUp: 10 Gbits 118 | # clientBandwidthDown: 10 Gbits 119 | # latency: 120 | # uniform: false 121 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 122 | # clients: ['eu-west-1': 1] 123 | # packetLoss: 0.0 124 | # replica: 125 | # replicas: 64 126 | # blockSize: 1000 127 | # minBatchSize: 500 128 | # maxBatchSize: 500 129 | # batchReplies: true 130 | # replySize: 0 131 | # requestTimeout: 400000 132 | # batchTimeout: 133 | # secs: 120 134 | # nano: 100_000_000 135 | # client: 136 | # numberOfHosts: 1 137 | # clients: 1 138 | # startTime: 100 s 139 | # concurrent: 1000 140 | # payload: 500 141 | # duration: 120 142 | ############################################### 143 | ############################################### 144 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/gosig.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-32 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 361 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 32 22 | requestTimeout: 400000 23 | batchReplies: true 24 | batchSize: 1000 25 | batchTimeout: 26 | secs: 150 27 | nano: 0 28 | firstStageLength: 5000 29 | secondStageLength: 5000 30 | gossipTime: 2000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 16 34 | gossipPeriod: 200 35 | updateExpiration: 30000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 10 s 42 | payload: 32 43 | concurrent: 2000 44 | duration: 340 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/gosig2.yaml: -------------------------------------------------------------------------------- 1 | protocolName: gosig 2 | protocolConnectorPath: ./connectors/gosig.js 3 | experiments: 4 | - name: gosig-64 # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 32 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: true 17 | replicas: 100000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 64 22 | requestTimeout: 400000 23 | batchReplies: true 24 | batchSize: 5000 25 | batchTimeout: 26 | secs: 10 27 | nano: 0 28 | firstStageLength: 20000 29 | secondStageLength: 40000 30 | gossipTime: 20000 31 | maxRounds: 0 32 | gossip: 33 | gossipCount: 5 34 | gossipPeriod: 1000 35 | updateExpiration: 10000 36 | useDirectSending: true 37 | replySize: 0 38 | client: 39 | numberOfHosts: 1 40 | clients: 1 41 | startTime: 100 s 42 | payload: 32 43 | concurrent: 5000 44 | duration: 120 # WATCH OUT FOR THIS VALUE (for now) 45 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/hs-bls.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | # - name: fault-free-hs-bls-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # # uniform: true 20 | # # replicas: 100000 us 21 | # # clients: 1000 us 22 | # packetLoss: 0.0 23 | # replica: 24 | # # replicas: 64 25 | # # fanout: 9 #8 26 | # # pipeDepth: 4 #3 #4 27 | # # pipeLatency: 20 #10 #50 28 | # # blockSize: 800 #1000 29 | # # replySize: 0 30 | # replicas: 64 31 | # fanout: 64 32 | # pipeDepth: 0 33 | # pipeLatency: 10 34 | # blockSize: 1000 35 | # client: 36 | # # numberOfHosts: 12 37 | # # clients: 12 38 | # # startTime: 100 s 39 | # # outStandingPerClient: 4000 40 | # # requestSize: 500 41 | # numberOfHosts: 4 42 | # clients: 4 43 | # startTime: 100 s 44 | # outStandingPerClient: 20000 45 | # - name: fault-free-hs-bls-128 46 | # misc: 47 | # runahead: 630 us 48 | # duration: 221 s 49 | # parallelism: 34 50 | # useShortestPath: false 51 | # network: 52 | # replicaBandwidthUp: 25 Mbits 53 | # replicaBandwidthDown: 25 Mbits 54 | # clientBandwidthUp: 10 Gbits 55 | # clientBandwidthDown: 10 Gbits 56 | # latency: 57 | # uniform: false 58 | # replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | # packetLoss: 0.0 61 | # replica: 62 | # replicas: 128 63 | # fanout: 128 64 | # pipeDepth: 0 65 | # pipeLatency: 10 66 | # blockSize: 1000 67 | # replySize: 0 68 | # client: 69 | # numberOfHosts: 4 70 | # clients: 4 71 | # startTime: 100 s 72 | # outStandingPerClient: 20000 73 | # requestSize: 500 74 | - name: fault-free-hs-bls-256 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 32 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 256 93 | pipeDepth: 0 94 | pipeLatency: 20 95 | blockSize: 500 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 500 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/hs2block400.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | # - name: fault-free-hotstuff-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1] 19 | # #['af-south-1': 1, 'ap-southeast-1': 1, 'eu-west-1': 1, 'us-east-1': 1, 'ap-southeast-2':1, 'sa-east-1': 1, 'me-south-1': 1, 'us-west-1': 1] 20 | # packetLoss: 0.0 21 | # replica: 22 | # replicas: 64 23 | # blockSize: 200 24 | # replySize: 0 25 | # pacemaker: 26 | # type: rr 27 | # propDelay: 4 28 | # baseTimeout: 4 29 | # client: 30 | # numberOfHosts: 2 31 | # clients: 2 32 | # startTime: 100 s 33 | # outStandingPerClient: 500 34 | # requestSize: 500 35 | - name: fault-free-hotstuff-64-block400 36 | misc: 37 | runahead: 630 us 38 | duration: 221 s 39 | parallelism: 34 40 | useShortestPath: false 41 | network: 42 | replicaBandwidthUp: 25 Mbits 43 | replicaBandwidthDown: 25 Mbits 44 | clientBandwidthUp: 10 Gbits 45 | clientBandwidthDown: 10 Gbits 46 | latency: 47 | uniform: false 48 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 49 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 50 | packetLoss: 0.0 51 | replica: 52 | replicas: 64 53 | blockSize: 400 54 | replySize: 0 55 | client: 56 | numberOfHosts: 4 57 | clients: 4 58 | startTime: 100 s 59 | outStandingPerClient: 500 60 | requestSize: 500 61 | - name: fault-free-hotstuff-128-block400 62 | misc: 63 | runahead: 630 us 64 | duration: 221 s 65 | parallelism: 34 66 | useShortestPath: false 67 | network: 68 | replicaBandwidthUp: 25 Mbits 69 | replicaBandwidthDown: 25 Mbits 70 | clientBandwidthUp: 10 Gbits 71 | clientBandwidthDown: 10 Gbits 72 | latency: 73 | uniform: false 74 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 75 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 76 | packetLoss: 0.0 77 | replica: 78 | replicas: 128 79 | blockSize: 400 80 | replySize: 0 81 | client: 82 | numberOfHosts: 4 83 | clients: 4 84 | startTime: 100 s 85 | outStandingPerClient: 500 86 | requestSize: 500 87 | - name: fault-free-hotstuff-256-block400 88 | misc: 89 | runahead: 630 us 90 | duration: 221 s 91 | parallelism: 124 92 | useShortestPath: false 93 | network: 94 | replicaBandwidthUp: 25 Mbits 95 | replicaBandwidthDown: 25 Mbits 96 | clientBandwidthUp: 10 Gbits 97 | clientBandwidthDown: 10 Gbits 98 | latency: 99 | uniform: false 100 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 101 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 102 | packetLoss: 0.0 103 | replica: 104 | replicas: 256 105 | blockSize: 400 106 | replySize: 0 107 | client: 108 | numberOfHosts: 4 109 | clients: 4 110 | startTime: 100 s 111 | outStandingPerClient: 500 112 | requestSize: 500 113 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/kauri.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | # - name: packetloss-kauri-64 5 | # misc: 6 | # runahead: 630 us 7 | # duration: 221 s 8 | # parallelism: 34 9 | # useShortestPath: false 10 | # network: 11 | # replicaBandwidthUp: 25 Mbits 12 | # replicaBandwidthDown: 25 Mbits 13 | # clientBandwidthUp: 10 Gbits 14 | # clientBandwidthDown: 10 Gbits 15 | # latency: 16 | # uniform: false 17 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # # uniform: true 20 | # # replicas: 100000 us 21 | # # clients: 1000 us 22 | # packetLoss: 0.0 23 | # replica: 24 | # # replicas: 64 25 | # # fanout: 9 #8 26 | # # pipeDepth: 4 #3 #4 27 | # # pipeLatency: 20 #10 #50 28 | # # blockSize: 800 #1000 29 | # # replySize: 0 30 | # replicas: 64 31 | # fanout: 8 32 | # pipeDepth: 3 33 | # pipeLatency: 10 34 | # blockSize: 1000 35 | # client: 36 | # # numberOfHosts: 12 37 | # # clients: 12 38 | # # startTime: 100 s 39 | # # outStandingPerClient: 4000 40 | # # requestSize: 500 41 | # numberOfHosts: 4 42 | # clients: 4 43 | # startTime: 100 s 44 | # outStandingPerClient: 20000 45 | - name: packetloss-kauri-128-loss01 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.01 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 1000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: packetloss-kauri-128-loss02 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 34 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.02 90 | replica: 91 | replicas: 128 92 | fanout: 12 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 1000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | # - name: packetloss-kauri-256 104 | # misc: 105 | # runahead: 630 us 106 | # duration: 221 s 107 | # parallelism: 124 108 | # useShortestPath: false 109 | # network: 110 | # replicaBandwidthUp: 25 Mbits 111 | # replicaBandwidthDown: 25 Mbits 112 | # clientBandwidthUp: 10 Gbits 113 | # clientBandwidthDown: 10 Gbits 114 | # latency: 115 | # uniform: false 116 | # replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 117 | # clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 118 | # packetLoss: 0.0 119 | # replica: 120 | # replicas: 256 121 | # fanout: 16 122 | # pipeDepth: 3 123 | # pipeLatency: 10 124 | # blockSize: 1000 125 | # replySize: 0 126 | # client: 127 | # numberOfHosts: 4 128 | # clients: 4 129 | # startTime: 100 s 130 | # outStandingPerClient: 20000 131 | # requestSize: 500 132 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/kauri2k (noch eine Kopie).yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64-2k 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 3 33 | pipeLatency: 10 34 | blockSize: 2000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128-2k 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 2000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256-2k 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 2000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/kauri2k.yaml: -------------------------------------------------------------------------------- 1 | protocolName: kauri 2 | protocolConnectorPath: ./connectors/kauri.js 3 | experiments: 4 | - name: fault-free-kauri-64-2k 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 19 | # uniform: true 20 | # replicas: 100000 us 21 | # clients: 1000 us 22 | packetLoss: 0.0 23 | replica: 24 | # replicas: 64 25 | # fanout: 9 #8 26 | # pipeDepth: 4 #3 #4 27 | # pipeLatency: 20 #10 #50 28 | # blockSize: 800 #1000 29 | # replySize: 0 30 | replicas: 64 31 | fanout: 8 32 | pipeDepth: 3 33 | pipeLatency: 10 34 | blockSize: 2000 35 | client: 36 | # numberOfHosts: 12 37 | # clients: 12 38 | # startTime: 100 s 39 | # outStandingPerClient: 4000 40 | # requestSize: 500 41 | numberOfHosts: 4 42 | clients: 4 43 | startTime: 100 s 44 | outStandingPerClient: 20000 45 | - name: fault-free-kauri-128-2k 46 | misc: 47 | runahead: 630 us 48 | duration: 221 s 49 | parallelism: 34 50 | useShortestPath: false 51 | network: 52 | replicaBandwidthUp: 25 Mbits 53 | replicaBandwidthDown: 25 Mbits 54 | clientBandwidthUp: 10 Gbits 55 | clientBandwidthDown: 10 Gbits 56 | latency: 57 | uniform: false 58 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 59 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 60 | packetLoss: 0.0 61 | replica: 62 | replicas: 128 63 | fanout: 12 64 | pipeDepth: 3 65 | pipeLatency: 10 66 | blockSize: 2000 67 | replySize: 0 68 | client: 69 | numberOfHosts: 4 70 | clients: 4 71 | startTime: 100 s 72 | outStandingPerClient: 20000 73 | requestSize: 500 74 | - name: fault-free-kauri-256-2k 75 | misc: 76 | runahead: 630 us 77 | duration: 221 s 78 | parallelism: 124 79 | useShortestPath: false 80 | network: 81 | replicaBandwidthUp: 25 Mbits 82 | replicaBandwidthDown: 25 Mbits 83 | clientBandwidthUp: 10 Gbits 84 | clientBandwidthDown: 10 Gbits 85 | latency: 86 | uniform: false 87 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 88 | clients: ['eu-west-1': 1, 'us-west-1': 1, 'af-south-1': 1, 'ap-southeast-1': 1] 89 | packetLoss: 0.0 90 | replica: 91 | replicas: 256 92 | fanout: 16 93 | pipeDepth: 3 94 | pipeLatency: 10 95 | blockSize: 2000 96 | replySize: 0 97 | client: 98 | numberOfHosts: 4 99 | clients: 4 100 | startTime: 100 s 101 | outStandingPerClient: 20000 102 | requestSize: 500 103 | -------------------------------------------------------------------------------- /examples/prdc23/packetloss/pbft.yaml: -------------------------------------------------------------------------------- 1 | protocolName: themis 2 | protocolConnectorPath: ./connectors/themis.js 3 | experiments: 4 | - name: fault-free-pbft-64 5 | misc: 6 | runahead: 630 us 7 | duration: 221 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 25 Mbits 12 | replicaBandwidthDown: 25 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 64 22 | blockSize: 1000 23 | minBatchSize: 1000 24 | maxBatchSize: 1000 25 | batchReplies: true 26 | replySize: 0 27 | requestTimeout: 400000 28 | batchTimeout: 29 | secs: 120 30 | nano: 100_000_000 31 | client: 32 | numberOfHosts: 1 33 | clients: 1 34 | startTime: 100 s 35 | concurrent: 2000 36 | payload: 500 37 | duration: 120 38 | - name: fault-free-pbft-128 39 | misc: 40 | runahead: 630 us 41 | duration: 221 s 42 | parallelism: 34 43 | useShortestPath: false 44 | network: 45 | replicaBandwidthUp: 25 Mbits 46 | replicaBandwidthDown: 25 Mbits 47 | clientBandwidthUp: 10 Gbits 48 | clientBandwidthDown: 10 Gbits 49 | latency: 50 | uniform: false 51 | replicas: ['eu-west-1': 7, 'af-south-1': 7, 'ap-east-1': 6, 'ap-northeast-1': 6, 'ap-northeast-2': 6, 'ap-northeast-3': 6, 'ap-south-1': 6, 'ap-southeast-1': 6, 'ap-southeast-2': 6, 'ca-central-1': 6, 'eu-central-1': 6, 'eu-north-1': 6, 'eu-south-1': 6, 'eu-west-2': 6, 'eu-west-3': 6, 'me-south-1': 6, 'sa-east-1': 6, 'us-east-1': 6, 'us-east-2': 6, 'us-west-1': 6, 'us-west-2': 6] 52 | clients: ['eu-west-1': 1] 53 | packetLoss: 0.0 54 | replica: 55 | replicas: 128 56 | blockSize: 1000 57 | minBatchSize: 1000 58 | maxBatchSize: 1000 59 | batchReplies: true 60 | replySize: 0 61 | requestTimeout: 400000 62 | batchTimeout: 63 | secs: 120 64 | nano: 100_000_000 65 | client: 66 | numberOfHosts: 1 67 | clients: 1 68 | startTime: 100 s 69 | concurrent: 2000 70 | payload: 500 71 | duration: 120 72 | - name: fault-free-pbft-256 73 | misc: 74 | runahead: 630 us 75 | duration: 221 s 76 | parallelism: 34 77 | useShortestPath: false 78 | network: 79 | replicaBandwidthUp: 25 Mbits 80 | replicaBandwidthDown: 25 Mbits 81 | clientBandwidthUp: 10 Gbits 82 | clientBandwidthDown: 10 Gbits 83 | latency: 84 | uniform: false 85 | replicas: ['eu-west-1': 13, 'af-south-1': 13, 'ap-east-1': 13, 'ap-northeast-1': 13, 'ap-northeast-2': 12, 'ap-northeast-3': 12, 'ap-south-1': 12, 'ap-southeast-1': 12, 'ap-southeast-2': 12, 'ca-central-1': 12, 'eu-central-1': 12, 'eu-north-1': 12, 'eu-south-1': 12, 'eu-west-2': 12, 'eu-west-3': 12, 'me-south-1': 12, 'sa-east-1': 12, 'us-east-1': 12, 'us-east-2': 12, 'us-west-1': 12, 'us-west-2': 12] 86 | clients: ['eu-west-1': 1] 87 | packetLoss: 0.0 88 | replica: 89 | replicas: 256 90 | blockSize: 1000 91 | minBatchSize: 1000 92 | maxBatchSize: 1000 93 | batchReplies: true 94 | replySize: 0 95 | requestTimeout: 400000 96 | batchTimeout: 97 | secs: 120 98 | nano: 100_000_000 99 | client: 100 | numberOfHosts: 1 101 | clients: 1 102 | startTime: 100 s 103 | concurrent: 2000 104 | payload: 500 105 | duration: 120 106 | ############################################### 107 | ############################################### 108 | # - name: fault-free-pbft-64-500-1000 109 | # misc: 110 | # runahead: 630 us 111 | # duration: 141 s 112 | # parallelism: 34 113 | # useShortestPath: false 114 | # network: 115 | # replicaBandwidthUp: 25 Mbits 116 | # replicaBandwidthDown: 25 Mbits 117 | # clientBandwidthUp: 10 Gbits 118 | # clientBandwidthDown: 10 Gbits 119 | # latency: 120 | # uniform: false 121 | # replicas: ['eu-west-1': 4, 'af-south-1': 3, 'ap-east-1': 3, 'ap-northeast-1': 3, 'ap-northeast-2': 3, 'ap-northeast-3': 3, 'ap-south-1': 3, 'ap-southeast-1': 3, 'ap-southeast-2': 3, 'ca-central-1': 3, 'eu-central-1': 3, 'eu-north-1': 3, 'eu-south-1': 3, 'eu-west-2': 3, 'eu-west-3': 3, 'me-south-1': 3, 'sa-east-1': 3, 'us-east-1': 3, 'us-east-2': 3, 'us-west-1': 3, 'us-west-2': 3] 122 | # clients: ['eu-west-1': 1] 123 | # packetLoss: 0.0 124 | # replica: 125 | # replicas: 64 126 | # blockSize: 1000 127 | # minBatchSize: 500 128 | # maxBatchSize: 500 129 | # batchReplies: true 130 | # replySize: 0 131 | # requestTimeout: 400000 132 | # batchTimeout: 133 | # secs: 120 134 | # nano: 100_000_000 135 | # client: 136 | # numberOfHosts: 1 137 | # clients: 1 138 | # startTime: 100 s 139 | # concurrent: 1000 140 | # payload: 500 141 | # duration: 120 142 | ############################################### 143 | ############################################### 144 | -------------------------------------------------------------------------------- /examples/sadok-thesis/bftsmart-AWS.yaml: -------------------------------------------------------------------------------- 1 | protocolName: bftsmart 2 | protocolConnectorPath: ./connectors/bftsmart.js 3 | experiments: 4 | - name: 4replicasAWSOregon 5 | misc: 6 | duration: 1200 s 7 | parallelism: 16 8 | useShortestPath: false 9 | network: 10 | replicaBandwidthUp: 1 Gbit 11 | replicaBandwidthDown: 1 Gbit 12 | clientBandwidthUp: 1 Gbit 13 | clientBandwidthDown: 1 Gbit 14 | latency: 15 | uniform: false 16 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 17 | clients: ['us-west-1': 1] 18 | packetLoss: 0.0 19 | replica: 20 | replicas: 4 21 | blockSize: 100 22 | replicaInterval: 100 23 | replySize: 0 24 | stateSize: 0 25 | context: false 26 | replicaSig: nosig 27 | bft: true 28 | timeout: 2000 29 | client: 30 | numberOfHosts: 1 31 | threadsPerClient: 1 32 | opPerClient: 2000 33 | requestSize: 0 34 | clientInterval: 0 35 | readOnly: false 36 | verbose: true 37 | startTime: 30 s 38 | clientSig: nosig 39 | invokeOrderedTimeout: 40 40 | - name: 4replicasAWSIreland 41 | misc: 42 | duration: 1200 s 43 | parallelism: 16 44 | useShortestPath: false 45 | network: 46 | replicaBandwidthUp: 1 Gbit 47 | replicaBandwidthDown: 1 Gbit 48 | clientBandwidthUp: 1 Gbit 49 | clientBandwidthDown: 1 Gbit 50 | latency: 51 | uniform: false 52 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 53 | clients: ['eu-west-1': 1] 54 | packetLoss: 0.0 55 | replica: 56 | replicas: 4 57 | blockSize: 100 58 | replicaInterval: 100 59 | replySize: 0 60 | stateSize: 0 61 | context: false 62 | replicaSig: nosig 63 | bft: true 64 | timeout: 2000 65 | client: 66 | numberOfHosts: 1 67 | clients: 1 68 | threadsPerClient: 1 69 | opPerClient: 2000 70 | requestSize: 0 71 | clientInterval: 0 72 | readOnly: false 73 | startTime: 30 s 74 | verbose: true 75 | clientSig: nosig 76 | invokeOrderedTimeout: 40 77 | - name: 4replicasAWSSao 78 | misc: 79 | duration: 1200 s 80 | parallelism: 16 81 | useShortestPath: false 82 | network: 83 | replicaBandwidthUp: 1 Gbit 84 | replicaBandwidthDown: 1 Gbit 85 | clientBandwidthUp: 1 Gbit 86 | clientBandwidthDown: 1 Gbit 87 | latency: 88 | uniform: false 89 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 90 | clients: ['sa-east-1': 1] 91 | packetLoss: 0.0 92 | replica: 93 | replicas: 4 94 | blockSize: 100 95 | replicaInterval: 100 96 | replySize: 0 97 | stateSize: 0 98 | context: false 99 | replicaSig: nosig 100 | bft: true 101 | timeout: 2000 102 | client: 103 | numberOfHosts: 1 104 | threadsPerClient: 1 105 | opPerClient: 2000 106 | requestSize: 0 107 | clientInterval: 0 108 | readOnly: false 109 | verbose: true 110 | startTime: 30 s 111 | clientSig: nosig 112 | invokeOrderedTimeout: 40 113 | - name: 4replicasAWSSydney 114 | misc: 115 | duration: 1200 s 116 | parallelism: 16 117 | useShortestPath: false 118 | network: 119 | replicaBandwidthUp: 1 Gbit 120 | replicaBandwidthDown: 1 Gbit 121 | clientBandwidthUp: 1 Gbit 122 | clientBandwidthDown: 1 Gbit 123 | latency: 124 | uniform: false 125 | replicas: ['us-west-1': 1, 'eu-west-1': 1, 'sa-east-1':1, 'ap-southeast-2':1] 126 | clients: ['ap-southeast-2': 1] 127 | packetLoss: 0.0 128 | replica: 129 | replicas: 4 130 | blockSize: 100 131 | replicaInterval: 100 132 | replySize: 0 133 | stateSize: 0 134 | context: false 135 | replicaSig: nosig 136 | bft: true 137 | timeout: 2000 138 | client: 139 | numberOfHosts: 1 140 | threadsPerClient: 1 141 | opPerClient: 2000 142 | requestSize: 0 143 | clientInterval: 0 144 | readOnly: false 145 | verbose: true 146 | startTime: 30 s 147 | clientSig: nosig 148 | invokeOrderedTimeout: 40 149 | -------------------------------------------------------------------------------- /examples/sadok-thesis/hs-10ms.yaml: -------------------------------------------------------------------------------- 1 | protocolName: hotstuff 2 | protocolConnectorPath: ./connectors/hotstuff.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 1000 us 7 | duration: 30 s 8 | parallelism: 34 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 10 Gibits 14 | clientBandwidthDown: 10 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 1000 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | blockSize: 400 23 | replySize: 0 24 | client: 25 | clients: 16 26 | numberOfHosts: 2 27 | outStandingPerClient: 100 28 | requestSize: 0 29 | - name: 8rep # this will be passed to as data_dir value in shadow.yaml 30 | misc: 31 | runahead: 1000 us 32 | duration: 30 s 33 | parallelism: 34 34 | useShortestPath: false 35 | network: 36 | replicaBandwidthUp: 10 Gibits 37 | replicaBandwidthDown: 10 Gibits 38 | clientBandwidthUp: 10 Gibits 39 | clientBandwidthDown: 10 Gibits 40 | latency: 41 | uniform: true 42 | replicas: 10000 us 43 | clients: 1000 us 44 | packetLoss: 0.0 45 | replica: # should be validated by connectors (currently not done, they are passed as-is) 46 | replicas: 8 47 | blockSize: 400 48 | replySize: 0 49 | client: 50 | clients: 16 51 | numberOfHosts: 2 52 | outStandingPerClient: 100 53 | requestSize: 0 54 | - name: 16rep # this will be passed to as data_dir value in shadow.yaml 55 | misc: 56 | runahead: 1000 us 57 | duration: 30 s 58 | parallelism: 34 59 | useShortestPath: false 60 | network: 61 | replicaBandwidthUp: 10 Gibits 62 | replicaBandwidthDown: 10 Gibits 63 | clientBandwidthUp: 10 Gibits 64 | clientBandwidthDown: 10 Gibits 65 | latency: 66 | uniform: true 67 | replicas: 10000 us 68 | clients: 1000 us 69 | packetLoss: 0.0 70 | replica: # should be validated by connectors (currently not done, they are passed as-is) 71 | replicas: 16 72 | blockSize: 400 73 | replySize: 0 74 | client: 75 | clients: 16 76 | numberOfHosts: 2 77 | outStandingPerClient: 100 78 | requestSize: 0 79 | - name: 32rep # this will be passed to as data_dir value in shadow.yaml 80 | misc: 81 | runahead: 1000 us 82 | duration: 30 s 83 | parallelism: 34 84 | useShortestPath: false 85 | network: 86 | replicaBandwidthUp: 10 Gibits 87 | replicaBandwidthDown: 10 Gibits 88 | clientBandwidthUp: 10 Gibits 89 | clientBandwidthDown: 10 Gibits 90 | latency: 91 | uniform: true 92 | replicas: 10000 us 93 | clients: 1000 us 94 | packetLoss: 0.0 95 | replica: # should be validated by connectors (currently not done, they are passed as-is) 96 | replicas: 32 97 | blockSize: 400 98 | replySize: 0 99 | client: 100 | clients: 16 101 | numberOfHosts: 2 102 | outStandingPerClient: 100 103 | requestSize: 0 104 | - name: 64rep # this will be passed to as data_dir value in shadow.yaml 105 | misc: 106 | runahead: 1000 us 107 | duration: 30 s 108 | parallelism: 34 109 | useShortestPath: false 110 | network: 111 | replicaBandwidthUp: 10 Gibits 112 | replicaBandwidthDown: 10 Gibits 113 | clientBandwidthUp: 10 Gibits 114 | clientBandwidthDown: 10 Gibits 115 | latency: 116 | uniform: true 117 | replicas: 10000 us 118 | clients: 1000 us 119 | packetLoss: 0.0 120 | replica: # should be validated by connectors (currently not done, they are passed as-is) 121 | replicas: 64 122 | blockSize: 400 123 | replySize: 0 124 | client: 125 | clients: 16 126 | numberOfHosts: 2 127 | outStandingPerClient: 100 128 | requestSize: 0 129 | - name: 128rep # this will be passed to as data_dir value in shadow.yaml 130 | misc: 131 | runahead: 1000 us 132 | duration: 30 s 133 | parallelism: 34 134 | useShortestPath: false 135 | network: 136 | replicaBandwidthUp: 10 Gibits 137 | replicaBandwidthDown: 10 Gibits 138 | clientBandwidthUp: 10 Gibits 139 | clientBandwidthDown: 10 Gibits 140 | latency: 141 | uniform: true 142 | replicas: 10000 us 143 | clients: 1000 us 144 | packetLoss: 0.0 145 | replica: # should be validated by connectors (currently not done, they are passed as-is) 146 | replicas: 128 147 | blockSize: 400 148 | replySize: 0 149 | client: 150 | clients: 16 151 | numberOfHosts: 2 152 | outStandingPerClient: 100 153 | requestSize: 0 154 | -------------------------------------------------------------------------------- /examples/sadok-thesis/predefinedPlots/hotstuff/hs-10ms-latency.yaml: -------------------------------------------------------------------------------- 1 | - name: HotStuff-l10-lat 2 | values: 3 | - x: '4' 4 | y: '84.178' 5 | - x: '8' 6 | y: '85.734' 7 | - x: '16' 8 | y: '86.6358' 9 | - x: '32' 10 | y: '88.4466' 11 | - x: '64' 12 | y: '92.4532' 13 | - x: '128' 14 | y: '106.0368' 15 | style: 16 | pointStyle: star 17 | pointBorderColor: '#8e5ea2' 18 | borderColor: '#8e5ea2' 19 | -------------------------------------------------------------------------------- /examples/sadok-thesis/predefinedPlots/hotstuff/hs-10ms-throughput.yaml: -------------------------------------------------------------------------------- 1 | - name: HotStuff-l10-thr 2 | values: 3 | - x: '4' 4 | y: '19174' 5 | - x: '8' 6 | y: '18780' 7 | - x: '16' 8 | y: '18617' 9 | - x: '32' 10 | y: '18189' 11 | - x: '64' 12 | y: '17499' 13 | - x: '128' 14 | y: '15114' 15 | style: 16 | pointStyle: star 17 | pointBorderColor: '#8e5ea2' 18 | borderColor: '#8e5ea2' 19 | -------------------------------------------------------------------------------- /examples/sadok-thesis/predefinedPlots/hotstuff/hs-p1024-latency.yaml: -------------------------------------------------------------------------------- 1 | - name: HotStuff-p1024 2 | values: 3 | - x: '4' 4 | y: '19.363' 5 | - x: '8' 6 | y: '19.9232' 7 | - x: '16' 8 | y: '19.7376' 9 | - x: '32' 10 | y: '39.2842' 11 | - x: '64' 12 | y: '65.2438' 13 | - x: '128' 14 | y: '108.2954' 15 | style: 16 | pointStyle: star 17 | pointBorderColor: '#8e5ea2' 18 | borderColor: '#8e5ea2' 19 | -------------------------------------------------------------------------------- /examples/sadok-thesis/predefinedPlots/hotstuff/hs-p1024-throughput.yaml: -------------------------------------------------------------------------------- 1 | - name: HotStuff-p1024 2 | values: 3 | - x: '4' 4 | y: '114832' 5 | - x: '8' 6 | y: '118888' 7 | - x: '16' 8 | y: '120153' 9 | - x: '32' 10 | y: '61385' 11 | - x: '64' 12 | y: '37260' 13 | - x: '128' 14 | y: '22067' 15 | style: 16 | pointStyle: star 17 | pointBorderColor: '#8e5ea2' 18 | borderColor: '#8e5ea2' 19 | -------------------------------------------------------------------------------- /examples/themis/themis-uniform.yaml: -------------------------------------------------------------------------------- 1 | protocolName: themis 2 | protocolConnectorPath: ./connectors/themis.js 3 | experiments: 4 | - name: 4rep # this will be passed to as data_dir value in shadow.yaml 5 | misc: 6 | runahead: 630 us 7 | duration: 6 s 8 | parallelism: 1 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 10 Gibits 12 | replicaBandwidthDown: 10 Gibits 13 | clientBandwidthUp: 100 Gibits 14 | clientBandwidthDown: 100 Gibits 15 | latency: 16 | uniform: true 17 | replicas: 10000 us 18 | clients: 700 us 19 | packetLoss: 0.0 20 | replica: # should be validated by connectors (currently not done, they are passed as-is) 21 | replicas: 4 22 | minBatchSize: 400 23 | maxBatchSize: 400 24 | replySize: 1024 25 | batchReplies: true 26 | requestTimeout: 40000 27 | batchTimeout: 28 | secs: 0 29 | nano: 10_000_000 30 | client: 31 | numberOfHosts: 1 32 | clients: 4 33 | startTime: 2 s 34 | payload: 1024 35 | concurrent: 175 36 | duration: 8 # WATCH OUT FOR THIS VALUE (for now) 37 | -------------------------------------------------------------------------------- /examples/tusk/tusk.yaml: -------------------------------------------------------------------------------- 1 | protocolName: tusk 2 | protocolConnectorPath: ./connectors/tusk.js 3 | experiments: 4 | - name: fault-free-tusk-4 5 | misc: 6 | runahead: 630 us 7 | duration: 2100 s 8 | parallelism: 32 9 | useShortestPath: false 10 | network: 11 | replicaBandwidthUp: 500 Mbits 12 | replicaBandwidthDown: 500 Mbits 13 | clientBandwidthUp: 10 Gbits 14 | clientBandwidthDown: 10 Gbits 15 | latency: 16 | uniform: false 17 | replicas: ['eu-west-1': 1, 'af-south-1': 1, 'ap-east-1': 1, 'us-east-1': 1] 18 | clients: ['eu-west-1': 1] 19 | packetLoss: 0.0 20 | replica: 21 | replicas: 4 22 | blockSize: 500000 23 | client: 24 | numberOfHosts: 1 25 | clients: 1 26 | rate: 100000 27 | requestSize: 500 28 | startTime: 10 s 29 | concurrent: 2000 30 | duration: 2000 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Delphi-BFT", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "orchestrator.js", 6 | "dependencies": { 7 | "@iarna/toml": "^2.2.5", 8 | "await-exec": "^0.1.2", 9 | "awk": "^1.0.0", 10 | "chart.js": "^3.7.1", 11 | "chartjs-node-canvas": "^4.1.6", 12 | "dotenv": "^16.0.1", 13 | "eslint-config-prettier": "^8.5.0", 14 | "eslint-plugin-prettier": "^4.0.0", 15 | "js-yaml": "^4.1.0", 16 | "lodash": "^4.17.21", 17 | "mathjs": "^11.0.1", 18 | "node-fetch": "^2.6.7", 19 | "objects-to-csv": "^1.3.6", 20 | "pidusage": "^3.0.0", 21 | "simple-statistics": "^7.7.6", 22 | "systeminformation": "^5.12.5", 23 | "timediff": "^1.1.1", 24 | "util": "^0.12.4", 25 | "util.promisify": "^1.1.1", 26 | "winston": "^3.7.2" 27 | }, 28 | "devDependencies": { 29 | "prettier": "2.6.2" 30 | }, 31 | "scripts": { 32 | "test": "echo \"Error: no test specified\" && exit 1", 33 | "simulation": "node ./src/orchestrator.js", 34 | "format": "prettier --write '{,!(node_modules)/**/}*.js'" 35 | }, 36 | "author": "Christian Berger, Sadok Ben Toumia and Hans P. Reiser", 37 | "license": "ISC" 38 | } 39 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .prettierrc.json 3 | 4 | -------------------------------------------------------------------------------- /src/connectors/assets/BFT-SMaRt/sysconf.json: -------------------------------------------------------------------------------- 1 | { 2 | "system": { 3 | "communication": { 4 | "secretKeyAlgorithm": "PBKDF2WithHmacSHA1", 5 | "secretKeyAlgorithmProvider": "SunJCE", 6 | "hashAlgorithm": "SHA-256", 7 | "hashAlgorithmProvider": "SUN", 8 | "signatureAlgorithm": "SHA256withECDSA", 9 | "signatureAlgorithmProvider": "BC", 10 | "defaultKeyLoader": "ECDSA", 11 | "useSenderThread": "true", 12 | "defaultkeys": "true", 13 | "bindaddress": "auto", 14 | "inQueueSize": "500000", 15 | "outQueueSize": "500000", 16 | "useSignatures": "0" 17 | }, 18 | "totalordermulticast": { 19 | "batchtimeout": "-1", 20 | "fairbatch": "false", 21 | "nonces": "10", 22 | "verifyTimestamps": "false", 23 | "state_transfer": "true", 24 | "highMark": "10000", 25 | "revival_highMark": "10", 26 | "timeout_highMark": "200", 27 | "log": "true", 28 | "log_parallel": "false", 29 | "log_to_disk": "false", 30 | "sync_log": "false", 31 | "checkpoint_period": "1024", 32 | "global_checkpoint_period": "120000", 33 | "checkpoint_to_disk": "false", 34 | "sync_ckp": "false" 35 | }, 36 | "ssltls": { 37 | "protocol_version": "TLSv1.2", 38 | "key_store_file": "EC_KeyPair_256.pkcs12", 39 | "enabled_ciphers": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" 40 | }, 41 | "ttp": { 42 | "id": "7002" 43 | }, 44 | "shutdownhook": "true", 45 | "samebatchsize": "false", 46 | "numrepliers": "16" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/connectors/assets/gosig/gosig.toml: -------------------------------------------------------------------------------- 1 | [gosig] 2 | faults = 1 3 | reply_mode = 'All' 4 | stage_1_length = 2000 5 | stage_2_length = 4000 6 | gossip_time = 2000 7 | proposer_threshold = 7 8 | max_transactions = 100000 9 | max_rounds = 0 10 | 11 | -------------------------------------------------------------------------------- /src/connectors/assets/gosig/gossip.toml: -------------------------------------------------------------------------------- 1 | [gossip] 2 | gossip_count = 3 3 | gossip_period = 100 4 | update_expiration = 10000 5 | direct_sending = true 6 | -------------------------------------------------------------------------------- /src/connectors/assets/gosig/pbft.toml: -------------------------------------------------------------------------------- 1 | [pbft] 2 | faults = 1 3 | first_primary = 0 4 | checkpoint_interval = 1000 5 | high_mark_delta = 3000 6 | request_timeout = 10000 7 | keep_checkpoints = 2 8 | primary_forwarding = 'Full' 9 | backup_forwarding = 'Full' 10 | reply_mode = 'All' 11 | 12 | -------------------------------------------------------------------------------- /src/connectors/assets/mir/mir.toml: -------------------------------------------------------------------------------- 1 | [pbft] 2 | faults = 1 3 | first_primary = 0 4 | checkpoint_interval = 1000 5 | high_mark_delta = 3000 6 | request_timeout = 8000 7 | keep_checkpoints = 2 8 | primary_forwarding = 'Full' 9 | backup_forwarding = 'Full' 10 | reply_mode = 'All' 11 | # numbers of requests per batch 12 | batch_size = 100 13 | # length of ephemeral epochs 14 | epoch_length = 100 15 | # toggle low load timer 16 | use_low_load_timer = false 17 | # low load time in ms 18 | low_load_time = 400 19 | # window size of client watermarks 20 | # also needs to be set in themis-client/src/bft.rs in bft client new function 21 | client_mark_window = 100000 22 | # amount of clients 23 | # needed for client entrys in peers for the tracking of clientwatermarks 24 | client_amount = 10 25 | # activates bucket rotation 26 | use_bucket_rotation = true 27 | # interval at which buckets are rotatet 28 | bucket_rotation_interval = 500 29 | # activates signature verification sharding, requires use_client_signature to be true 30 | use_svs = true 31 | # activates client signatures on requests 32 | # additionally needed steps are putting clients = "Ecdsa" in auth entry in config.toml 33 | # and setting authentication of request tag in themis-core/src/app/mod.rs to None 34 | # each client requires an entry in config.toml with paths to public and private keys 35 | use_client_signatures = true 36 | # limits leaders to 4 37 | limit_leaders = true 38 | # if set to false, initiated epoch changes are blocked 39 | use_epoch_changes = false 40 | 41 | -------------------------------------------------------------------------------- /src/connectors/assets/themis/pbft.toml: -------------------------------------------------------------------------------- 1 | [pbft] 2 | first_primary = 0 3 | checkpoint_interval = 1200 4 | high_mark_delta = 3200 5 | request_timeout = 3000 6 | keep_checkpoints = 2 7 | primary_forwarding = 'Full' 8 | backup_forwarding = 'Full' 9 | reply_mode = 'All' 10 | -------------------------------------------------------------------------------- /src/connectors/assets/tusk/params.json: -------------------------------------------------------------------------------- 1 | { 2 | "batch_size": 500000, 3 | "gc_depth": 50, 4 | "header_size": 1000, 5 | "max_batch_delay": 5000, 6 | "max_header_delay": 5000, 7 | "sync_retry_delay": 10000, 8 | "sync_retry_nodes": 3 9 | } 10 | -------------------------------------------------------------------------------- /src/faults/crash.js: -------------------------------------------------------------------------------- 1 | const ipUtil = require('../util/ip-util.js') 2 | const _ = require('lodash') 3 | async function crash( 4 | nreplicas, 5 | hosts, 6 | threshold, 7 | timestamp, 8 | restartClients, 9 | log, 10 | ) { 11 | let nfaulty = Math.floor(nreplicas * threshold) 12 | log.info( 13 | `using a fault-threshold of ${threshold} for ${nreplicas}. Will crash ${nfaulty} replicas at ${timestamp}`, 14 | ) 15 | let newClients = [] 16 | for (const host of hosts) { 17 | if (host.isClient) { 18 | if (restartClients) { 19 | let newProcs = [] 20 | for (const proc of host.procs) { 21 | let newProc = _.cloneDeep(proc) 22 | proc.stopTime = timestamp 23 | newProc.startTime = timestamp 24 | newProcs.push(newProc) 25 | } 26 | host.procs.push(...newProcs) 27 | } 28 | continue 29 | } 30 | if (nfaulty <= 0) { 31 | continue 32 | } 33 | for (const proc of host.procs) { 34 | proc.stopTime = timestamp 35 | } 36 | nfaulty-- 37 | } 38 | } 39 | module.exports = { crash } 40 | -------------------------------------------------------------------------------- /src/util/cloudping.js: -------------------------------------------------------------------------------- 1 | const fetch = require('node-fetch') 2 | const https = require('https') 3 | // Temporary fix for CloudPing SSL issue 4 | const httpsAgent = new https.Agent({ 5 | rejectUnauthorized: false, 6 | }) 7 | 8 | // cloudping daily averages api endpoint 9 | 10 | const apiUrl = 'https://api-demo.cloudping.co/averages' 11 | 12 | /* 13 | async function getLatencies(log) { 14 | let latencies = new Object() 15 | 16 | log.info('getting latencies from cloudping ...') 17 | try { 18 | const response = await fetch(apiUrl, { method: 'GET', agent: httpsAgent }) 19 | if (response.ok) { 20 | log.info('got ok response from cloudping!') 21 | const json = await response.json() 22 | for (let i = 0; i < json.length; i++) { 23 | let currentRegion = json[i].region 24 | latencies[currentRegion] = new Object() 25 | for (let j = 0; j < json[i].averages.length; j++) { 26 | let destinationRegion = json[i].averages[j].regionTo 27 | let RTT = parseFloat(json[i].averages[j].average).toFixed(3) 28 | latencies[currentRegion][destinationRegion] = new Object() 29 | latencies[currentRegion][destinationRegion] = Math.floor( 30 | (RTT * 1000) / 2, 31 | ) 32 | } 33 | } 34 | return latencies 35 | } else { 36 | throw Error('could not retrieve latencies from cloudping') 37 | } 38 | } catch (e) { 39 | throw Error('could not retrieve latencies from cloudping') 40 | } 41 | } 42 | */ 43 | 44 | const fs = require('fs') 45 | 46 | // cloudping daily averages api endpoint 47 | 48 | const mapPath = '/home/cb/tool/src/util/aws21.json' 49 | 50 | function getLatencies(log) { 51 | let latencies = new Object() 52 | 53 | log.info('getting latencies from local AWS21 map') 54 | 55 | const json = JSON.parse(fs.readFileSync(mapPath, 'utf8')) 56 | for (let i = 0; i < json.length; i++) { 57 | let currentRegion = json[i].region 58 | latencies[currentRegion] = new Object() 59 | for (let j = 0; j < json[i].averages.length; j++) { 60 | let destinationRegion = json[i].averages[j].regionTo 61 | let RTT = parseFloat(json[i].averages[j].average).toFixed(3) 62 | latencies[currentRegion][destinationRegion] = new Object() 63 | latencies[currentRegion][destinationRegion] = Math.floor( 64 | (RTT * 1000) / 2, 65 | ) 66 | } 67 | } 68 | return latencies 69 | } 70 | 71 | module.exports = { getLatencies } 72 | -------------------------------------------------------------------------------- /src/util/csv-util.js: -------------------------------------------------------------------------------- 1 | const ObjectsToCsv = require('objects-to-csv') 2 | 3 | const values = [] 4 | 5 | async function save(dest) { 6 | await new ObjectsToCsv(values).toDisk(dest) 7 | } 8 | 9 | module.exports = { values, save } 10 | -------------------------------------------------------------------------------- /src/util/duration.js: -------------------------------------------------------------------------------- 1 | /* NOT USED 2 | * SHOULD BE USED FOR VALIDATING LATENCY INPUTS 3 | */ 4 | const unitToDuration = { 5 | s: 1000000000, 6 | ms: 1000000, 7 | us: 1000, 8 | ns: 1, 9 | } 10 | function parseDuration(durationString) { 11 | durationString = durationString.trim().replace(/ +(?= )/g, '') 12 | const [duration, unit] = durationString.split(' ') 13 | if (Object.keys(unitToDuration).indexOf(unit) == -1) { 14 | throw Error( 15 | `${durationString} is not a valid duration, unit must be one of ns, us, ms, s`, 16 | ) 17 | } 18 | if (!Number.isInteger(duration)) { 19 | throw Error(`${duration} in ${durationString} must be an Integer!`) 20 | } 21 | } 22 | 23 | function durationInNanoNumber(durationString) { 24 | durationString = durationString.trim().replace(/ +(?= )/g, '') 25 | const [duration, unit] = durationString.split(' ') 26 | return duration * unitToDuration[unit] 27 | } 28 | function durationInNanoString(durationString) { 29 | return `${durationInNanoNumber(durationString)} ns` 30 | } 31 | 32 | function nanoAsString(nanoNumber) { 33 | return `${nanoNumber} ns` 34 | } 35 | 36 | function after(currentString, delayString) { 37 | currentString = currentString.trim().replace(/ +(?= )/g, '') 38 | delayString = delayString.trim().replace(/ +(?= )/g, '') 39 | const currentNano = durationInNanoNumber(currentString) 40 | const delayNano = durationInNanoNumber(delayString) 41 | return nanoAsString(currentNano + delayNano) 42 | } 43 | 44 | module.exports = { parseDuration, durationInNanoString, after } 45 | -------------------------------------------------------------------------------- /src/util/exec.js: -------------------------------------------------------------------------------- 1 | const { spawn, exec } = require('child_process') 2 | function promisified_spawn(cmd, args, workingDir, log) { 3 | log.info( 4 | `launching ${cmd} with args: ${args} with working Directory: ${workingDir}`, 5 | ) 6 | return new Promise((resolve, reject) => { 7 | const process = spawn(cmd, args, { cwd: workingDir }) 8 | process.on('exit', function (code) { 9 | if (code) { 10 | log.error('child proess terminated with code: ' + code) 11 | reject(code) 12 | } 13 | log.info('child proess terminated with code: ' + code) 14 | resolve(code) 15 | }) 16 | process.on('close', function (code) { 17 | resolve(code) 18 | }) 19 | process.stdout.on('data', function (data) { 20 | log.info('childprocess: ' + data.toString()) 21 | }) 22 | process.stderr.on('data', function (data) { 23 | log.error('childprocess: ' + data.toString()) 24 | }) 25 | }) 26 | } 27 | 28 | module.exports = { promisified_spawn } 29 | -------------------------------------------------------------------------------- /src/util/helpers.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs').promises 2 | const yaml = require('js-yaml') 3 | const statistics = require('simple-statistics') 4 | const path = require('path') 5 | async function transformLatencies(hosts) { 6 | let awsHosts = [] 7 | for (let i = 0; i < hosts.length; i++) { 8 | let region = Object.keys(hosts[i])[0] 9 | let amount = Object.values(hosts[i])[0] 10 | while (amount--) { 11 | awsHosts.push(region) 12 | } 13 | } 14 | return awsHosts 15 | } 16 | async function backUpArtifact(source, dest) { 17 | await fs.copyFile(source, dest) 18 | } 19 | async function deleteDirectoryIfExists(path) { 20 | await fs.rm(path, { recursive: true, force: true }) 21 | } 22 | 23 | function median(values) { 24 | if (values.length === 0) return null 25 | 26 | values.sort(function (first, second) { 27 | return first - second 28 | }) 29 | 30 | var mid = Math.floor(values.length / 2) 31 | 32 | return values.length & 1 ? values[mid] : (values[mid - 1] + values[mid]) / 2.0 33 | } 34 | 35 | function removeOutliers(data) { 36 | let outlierConstant = 1.5 37 | let sorted = data.sort(function (a, b) { 38 | return a - b 39 | }) 40 | let uq = statistics.quantile(sorted, 0.75) 41 | let lq = statistics.quantile(sorted, 0.25) 42 | let IQR = (uq - lq) * outlierConstant 43 | let quartileSet = [lq - IQR, uq + IQR] 44 | let resultSet = [] 45 | for (let i = 0; i < sorted.length; i++) { 46 | if (sorted[i] >= quartileSet[0] && sorted[i] <= quartileSet[1]) 47 | resultSet.push(sorted[i]) 48 | } 49 | return resultSet 50 | } 51 | function isNullOrEmpty(obj) { 52 | return obj === null || obj === undefined || obj === '' 53 | } 54 | function JSONtoDot(topLevelPrefix, json) { 55 | let res = '' 56 | if (typeof json !== 'object') { 57 | return topLevelPrefix + ' = ' + json 58 | } 59 | for (const [key, value] of Object.entries(json)) { 60 | const currentLevelPrefix = 61 | topLevelPrefix !== '' ? topLevelPrefix + '.' + key : key 62 | res += JSONtoDot(currentLevelPrefix, value) + '\n' 63 | continue 64 | } 65 | return res 66 | } 67 | async function readAndMergeEDF(EDFPath) { 68 | let EDF = await yaml.load(await fs.readFile(EDFPath, 'utf8')) 69 | if (!EDF.plots) return EDF 70 | for (let plot of Object.entries(EDF.plots)) { 71 | let currentPlotObj = plot[1] 72 | if (isNullOrEmpty(currentPlotObj.predefinedDatasets)) continue 73 | if ( 74 | typeof currentPlotObj.predefinedDatasets === 'string' || 75 | currentPlotObj.predefinedDatasets instanceof String 76 | ) { 77 | // its is a path 78 | currentPlotObj.predefinedDatasets = await yaml.load( 79 | await fs.readFile( 80 | path.join(EDFPath, `../${currentPlotObj.predefinedDatasets}`), 81 | 'utf-8', 82 | ), 83 | ) 84 | } 85 | 86 | // else: predefinedPlots are embedded in current File 87 | } 88 | return EDF 89 | } 90 | module.exports = { 91 | transformLatencies, 92 | deleteDirectoryIfExists, 93 | median, 94 | removeOutliers, 95 | isNullOrEmpty, 96 | readAndMergeEDF, 97 | backUpArtifact, 98 | JSONtoDot, 99 | } 100 | -------------------------------------------------------------------------------- /src/util/ip-util.js: -------------------------------------------------------------------------------- 1 | const seenIPs = new Set() 2 | async function getIPs(hosts) { 3 | let ipList = [] 4 | for (const [key, value] of Object.entries(hosts)) { 5 | for (let i = 0; i < value; i++) { 6 | let hostIP = '' 7 | do { 8 | hostIP = 9 | 11 + 10 | '.' + 11 | Math.floor(Math.random() * 255) + 12 | '.' + 13 | Math.floor(Math.random() * 255) + 14 | '.' + 15 | Math.floor(Math.random() * 255) 16 | } while (seenIPs.has(hostIP)) 17 | seenIPs.add(hostIP) 18 | let hostName = key + i 19 | ipList.push({ name: hostName, ip: hostIP }) 20 | } 21 | } 22 | return ipList 23 | } 24 | 25 | async function clearIPSet() { 26 | seenIPs.clear() 27 | } 28 | 29 | module.exports = { getIPs, clearIPSet } 30 | -------------------------------------------------------------------------------- /src/util/plot.js: -------------------------------------------------------------------------------- 1 | const { ChartJSNodeCanvas } = require('chartjs-node-canvas') 2 | const path = require('path') 3 | const fs = require('fs').promises 4 | const renderer = new ChartJSNodeCanvas({ 5 | type: 'svg', 6 | width: 640, 7 | height: 360, 8 | }) 9 | 10 | const plotsMap = new Map() 11 | 12 | async function createPlots(plots) { 13 | for (const plotObj of plots) { 14 | plotsMap[plotObj.name] = { 15 | type: 'line', 16 | options: { 17 | plugins: { 18 | title: { 19 | display: true, 20 | text: plotObj.details.title, 21 | }, 22 | }, 23 | scales: { 24 | y: { 25 | title: { 26 | display: true, 27 | text: plotObj.details.yAxisTitle, 28 | }, 29 | }, 30 | x: { 31 | title: { 32 | display: true, 33 | text: plotObj.details.xAxisTitle, 34 | }, 35 | }, 36 | }, 37 | }, 38 | data: { 39 | datasets: [], 40 | }, 41 | } 42 | for (const datasetObj of plotObj.shadowDatasets) { 43 | plotsMap[plotObj.name].data.datasets.push({ 44 | label: datasetObj.name, 45 | data: [], 46 | ...datasetObj.style, 47 | }) 48 | } 49 | if (plotObj.predefinedDatasets) { 50 | for (const predefinedDatasetObj of plotObj.predefinedDatasets) { 51 | plotsMap[plotObj.name].data.datasets.push({ 52 | label: predefinedDatasetObj.name, 53 | ...predefinedDatasetObj.style, 54 | data: predefinedDatasetObj.values, 55 | }) 56 | } 57 | } 58 | } 59 | } 60 | 61 | async function pushValue(plotId, datasetId, label, value) { 62 | console.log(JSON.stringify(plotsMap)) 63 | for (let dataset of plotsMap[plotId].data.datasets) { 64 | if (dataset.label == datasetId) { 65 | dataset.data.push({ x: String(label), y: value }) 66 | continue 67 | } 68 | console.log(`${dataset.label} != ${datasetId}`) 69 | } 70 | } 71 | async function generatePlots(experimentsPath) { 72 | let savePath = path.join(experimentsPath, 'plots') 73 | await fs.mkdir(savePath, { recursive: true }) 74 | for (const [key, value] of Object.entries(plotsMap)) { 75 | const buffer = renderer.renderToBufferSync(value) 76 | await fs.writeFile( 77 | path.join(savePath, './' + key + '.svg'), 78 | buffer, 79 | 'base64', 80 | ) 81 | } 82 | } 83 | 84 | function pushStatsToDatasets(plotsObj, stats) { 85 | for (let p of plotsObj) { 86 | if (p.metric == 'tps') { 87 | pushValue(p.name, p.datasetId, p.label, stats.maxThroughput) 88 | continue 89 | } 90 | if (p.metric == 'latency') { 91 | pushValue(p.name, p.datasetId, p.label, stats.latencyOutlierRemoved) 92 | continue 93 | } 94 | if (p.metric == 'cpu-shadow') { 95 | pushValue(p.name, p.datasetId, p.label, stats.cpuShadow) 96 | continue 97 | } 98 | if (p.metric == 'mem-shadow') { 99 | pushValue(p.name, p.datasetId, p.label, stats.memShadow) 100 | continue 101 | } 102 | if (p.metric == 'cpu-app') { 103 | pushValue(p.name, p.datasetId, p.label, stats.cpuApp) 104 | continue 105 | } 106 | if (p.metric == 'mem-app') { 107 | pushValue(p.name, p.datasetId, p.label, stats.memApp) 108 | continue 109 | } 110 | if (p.metric == 'mem-host') { 111 | pushValue(p.name, p.datasetId, p.label, stats.hostActive) 112 | continue 113 | } 114 | if (p.metric == 'elapsed') { 115 | pushValue(p.name, p.datasetId, p.label, stats.elapsed) 116 | continue 117 | } 118 | } 119 | } 120 | 121 | module.exports = { createPlots, pushStatsToDatasets, generatePlots } 122 | -------------------------------------------------------------------------------- /src/util/resource-monitor.js: -------------------------------------------------------------------------------- 1 | const pidusage = require('pidusage') 2 | const util = require('util') 3 | const { median } = require('./helpers') 4 | const exec = util.promisify(require('node:child_process').exec) 5 | const si = require('systeminformation') 6 | 7 | const procIntervals = new Map() 8 | 9 | async function getPids(processName, log) { 10 | try { 11 | let result = await exec(`pidof ${processName}`) 12 | return result.stdout.toString().split(' ').map(Number) 13 | } catch (error) { 14 | log.error(`could not retrieve usage data for ${processName}`) 15 | return null 16 | } 17 | } 18 | 19 | async function compute(processName, log) { 20 | let pids = await getPids(processName, log) 21 | if (pids == null) throw 'could not fetch usage data' 22 | pidusage(pids, function (err, stats) { 23 | let cputotal = 0.0 24 | let mem = 0.0 25 | if (stats != null && stats != undefined) { 26 | Object.keys(stats).forEach(function (key) { 27 | cputotal += stats[key] == undefined ? 0 : stats[key].cpu 28 | mem += stats[key] == undefined ? 0 : stats[key].memory / 1000000000 29 | }) 30 | } 31 | log.info(`current cpu usage of ${processName} process: ${cputotal}`) 32 | log.info(`current mem usage of ${processName} process: ${mem}`) 33 | procIntervals[processName].stats.cpu.push(cputotal) 34 | procIntervals[processName].stats.mem.push(mem) 35 | }) 36 | } 37 | async function register(processName, time, log) { 38 | let interval = setInterval(async function () { 39 | await compute(processName, log).catch((error) => { 40 | log.error( 41 | `an error occurred while fetching usage data for ${processName} unregistering...`, 42 | ) 43 | unregister(log) 44 | }) 45 | }, time) 46 | let intervalObject = {} 47 | intervalObject['interval'] = interval 48 | intervalObject['stats'] = {} 49 | intervalObject.stats.cpu = [] 50 | intervalObject.stats.mem = [] 51 | procIntervals[processName] = intervalObject 52 | } 53 | async function unregister(log) { 54 | log.info('clearing intervals ...') 55 | let usage = {} 56 | for (let proc in procIntervals) { 57 | clearInterval(procIntervals[proc].interval) 58 | usage[proc] = {} 59 | usage[proc].medianCPU = null 60 | if (procIntervals[proc].stats.cpu) 61 | usage[proc].medianCPU = median(procIntervals[proc].stats.cpu) 62 | usage[proc].maxMEM = Math.max(...procIntervals[proc].stats.mem) 63 | procIntervals.delete(proc) 64 | } 65 | log.info('intervals cleared!') 66 | return usage 67 | } 68 | async function registerSI(time, log) { 69 | let interval = setInterval(async function () { 70 | let totalMemUsage = (await si.mem()).active / 1000000000 71 | log.info(`current total mem usage of host: ${totalMemUsage}`) 72 | procIntervals['total'].stats.mem.push(totalMemUsage) 73 | }, time) 74 | let intervalObject = {} 75 | intervalObject['interval'] = interval 76 | intervalObject['stats'] = {} 77 | intervalObject.stats.cpu = null 78 | intervalObject.stats.mem = [] 79 | procIntervals['total'] = intervalObject 80 | } 81 | 82 | module.exports = { register, unregister, registerSI } 83 | -------------------------------------------------------------------------------- /src/util/timestamp.js: -------------------------------------------------------------------------------- 1 | const unitToTimestamp = { 2 | hr: 3600, 3 | min: 60, 4 | s: 1, 5 | } 6 | function parseTimestamp(timestampString) { 7 | timestampString = timestampString.trim().replace(/ +(?= )/g, '') 8 | const [timestamp, unit] = timestampString.split(' ') 9 | if (Object.keys(unitToTimestamp).indexOf(unit) == -1) { 10 | throw Error( 11 | `${timestampString} is not a valid timeStamp, unit must be one of s, min and hr`, 12 | ) 13 | } 14 | if (!Number.isInteger(timestamp)) { 15 | throw Error(`${timestamp} in ${timestampString} must be an Integer!`) 16 | } 17 | } 18 | 19 | function timestampInSecondsNumber(timestampString) { 20 | timestampString = timestampString.trim().replace(/ +(?= )/g, '') 21 | const [timestamp, unit] = timestampString.split(' ') 22 | return timestamp * unitToTimestamp[unit] 23 | } 24 | function timestampInSecondsString(timestampString) { 25 | return `${timestampInSecondsNumber(timestampString)} s` 26 | } 27 | 28 | function secondsAsString(secondsNumber) { 29 | return `${secondsNumber} s` 30 | } 31 | function after(currentString, afterString) { 32 | currentString = currentString.trim().replace(/ +(?= )/g, '') 33 | afterString = afterString.trim().replace(/ +(?= )/g, '') 34 | const currentSeconds = timestampInSecondsNumber(currentString) 35 | const afterSeconds = timestampInSecondsNumber(afterString) 36 | return secondsAsString(currentSeconds + afterSeconds) 37 | } 38 | module.exports = { 39 | parseTimestamp, 40 | timestampInSecondsString, 41 | secondsAsString, 42 | after, 43 | } 44 | --------------------------------------------------------------------------------