diff --git a/Logbook.md b/Logbook.md index f00a4a5..3e7fc3a 100644 --- a/Logbook.md +++ b/Logbook.md @@ -1,5 +1,11 @@ # Leios logbook +## 2024-11-05 + +### Latency measurements of 52-node cluster + +The folder [data/BenchTopology/](data/BenchTopology/README.md) contains latency measurments and topology for a 52-machine `cardano-node` cluster that is used for benchmarking. The machine is spread among three AWS regions. + ## 2024-11-04 ### Uniform vs. Non-uniform IB generation in Short Leios @@ -8,7 +14,7 @@ Drafted a version of Short Leios where IB generation is uniform over the Propose -## 2024-01-01 +## 2024-11-01 ### Haskell Simulation diff --git a/data/BenchTopology/README.md b/data/BenchTopology/README.md new file mode 100644 index 0000000..c08ac12 --- /dev/null +++ b/data/BenchTopology/README.md @@ -0,0 +1,65 @@ +# Latencies of a 52-node benchmarking cluster + +This folder contains latency measurements for a 54-node benchmarking cluster. + + +## [`topology-dense-52.json`](topology-dense-52.json) + +The topology specification for our benchmarking cluster. +We use 3 different AWS regions. Each node is connected to 6 other nodes: +* 4 in the same region +* 1 in each other region + +The topology is static (i.e., no dynamic P2P), which is a requirement for reproducible diffusion metrics in benchmarks. + +All nodes named 'node-*' are block producers for the benchmark. The 'explorer' node is an administrative node so to speak, which we use for monitoring an ongoing cluster run. You can probably disregard that one for a Leios simulation. + + +## [`topology-dense-52-by-region.pdf`](topology-dense-52-by-region.pdf) + +A rendered graph grouping nodes by AWS region. (The AWS region labels 'US' and 'AP' appear swapped in the PDF, apologies). + + +## [`topology-dense-52-as-torus.pdf`](topology-dense-52-as-torus.pdf) + +A rendered graph illustrating the torus-like nature of the topology. + + +## [`example-node-configs/`](example-node-configs.tar.gz) + +A directory containing the actual 'topology.json' files for each node used to configure a benchmarking run on the cluster. + +The node-to-ip-mapping.txt is added only as a human-readable lookup for the IPs used, in case you need that for clarification. + +Note that the IP addresses have been anonymized in a manner that preserves subnet relationships. + + +## [`latency.sqlite3`](latency.sqlite3.gz) + +The latency matrix for a deployed cluster. All of the machines are `AWS EC2 c5.2xlarge`. + +On each node, a series of pings is performed to each of its peers specified in the topology. This also implies that each of the edges is measured in two directions. Each series of pings is performed three times, with varying package sizes (min, max, and default size). All results end up in the database's 'ping' table, which looks like this (example): + +``` +sqlite> .mode table +sqlite> select * from ping limit 1; ++--------+--------+------+------+---------------+-------------+ +| source | dest | size | time | source_region | dest_region | ++--------+--------+------+------+---------------+-------------+ +| node-0 | node-1 | 24 | 90.3 | EU | US | ++--------+--------+------+------+---------------+-------------+ +``` + +### Example queries: + +```sql +SELECT source, dest, AVG(time) FROM ping WHERE size = 64 AND source < dest GROUP BY source, dest; +``` + +Most likely what you want for the simulation: the avg ping RTT in ms, at default packet size, for all edges defined in the topology - disregarding bi-directional measurements, which might differ very very slightly. (i.e. ping from 'node-0' to 'node-1' shown, but from 'node-1' to 'node-0' not shown) + +```sql +SELECT source, dest, source_region, dest_region, AVG(time) FROM ping WHERE size = 64 GROUP BY source, dest; +``` + +Same as above, but more detailed and including bi-directional measurements. Result includes the nodes' AWS regions, so you can gauge how "expensive" the transition between certain regions was at the time of measurement. diff --git a/data/BenchTopology/example-node-configs.tar.gz b/data/BenchTopology/example-node-configs.tar.gz new file mode 100644 index 0000000..9c462c8 Binary files /dev/null and b/data/BenchTopology/example-node-configs.tar.gz differ diff --git a/data/BenchTopology/latency.sqlite3.gz b/data/BenchTopology/latency.sqlite3.gz new file mode 100644 index 0000000..c140380 Binary files /dev/null and b/data/BenchTopology/latency.sqlite3.gz differ diff --git a/data/BenchTopology/topology-dense-52-as-torus.pdf b/data/BenchTopology/topology-dense-52-as-torus.pdf new file mode 100644 index 0000000..f803a85 Binary files /dev/null and b/data/BenchTopology/topology-dense-52-as-torus.pdf differ diff --git a/data/BenchTopology/topology-dense-52-by-region.pdf b/data/BenchTopology/topology-dense-52-by-region.pdf new file mode 100644 index 0000000..dddb52a Binary files /dev/null and b/data/BenchTopology/topology-dense-52-by-region.pdf differ diff --git a/data/BenchTopology/topology-dense-52.json b/data/BenchTopology/topology-dense-52.json new file mode 100644 index 0000000..df5494e --- /dev/null +++ b/data/BenchTopology/topology-dense-52.json @@ -0,0 +1,900 @@ +{ + "coreNodes": [ + { + "name": "node-0", + "nodeId": 0, + "org": "ORG", + "pools": 1, + "producers": [ + "node-1", + "node-2", + "node-3", + "node-51", + "node-18", + "node-36" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-3", + "nodeId": 3, + "org": "ORG", + "pools": 1, + "producers": [ + "node-4", + "node-5", + "node-6", + "node-0", + "node-21", + "node-39" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-6", + "nodeId": 6, + "org": "ORG", + "pools": 1, + "producers": [ + "node-7", + "node-8", + "node-9", + "node-3", + "node-24", + "node-42" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-9", + "nodeId": 9, + "org": "ORG", + "pools": 1, + "producers": [ + "node-10", + "node-11", + "node-12", + "node-6", + "node-27", + "node-45" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-12", + "nodeId": 12, + "org": "ORG", + "pools": 1, + "producers": [ + "node-13", + "node-14", + "node-15", + "node-9", + "node-30", + "node-48" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-15", + "nodeId": 15, + "org": "ORG", + "pools": 1, + "producers": [ + "node-16", + "node-17", + "node-18", + "node-12", + "node-33", + "node-51" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-18", + "nodeId": 18, + "org": "ORG", + "pools": 1, + "producers": [ + "node-19", + "node-20", + "node-21", + "node-15", + "node-36", + "node-0" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-21", + "nodeId": 21, + "org": "ORG", + "pools": 1, + "producers": [ + "node-22", + "node-23", + "node-24", + "node-18", + "node-39", + "node-3" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-24", + "nodeId": 24, + "org": "ORG", + "pools": 1, + "producers": [ + "node-25", + "node-26", + "node-27", + "node-21", + "node-42", + "node-6" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-27", + "nodeId": 27, + "org": "ORG", + "pools": 1, + "producers": [ + "node-28", + "node-29", + "node-30", + "node-24", + "node-45", + "node-9" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-30", + "nodeId": 30, + "org": "ORG", + "pools": 1, + "producers": [ + "node-31", + "node-32", + "node-33", + "node-27", + "node-48", + "node-12" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-33", + "nodeId": 33, + "org": "ORG", + "pools": 1, + "producers": [ + "node-34", + "node-35", + "node-36", + "node-30", + "node-51", + "node-15" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-36", + "nodeId": 36, + "org": "ORG", + "pools": 1, + "producers": [ + "node-37", + "node-38", + "node-39", + "node-33", + "node-0", + "node-18" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-39", + "nodeId": 39, + "org": "ORG", + "pools": 1, + "producers": [ + "node-40", + "node-41", + "node-42", + "node-36", + "node-3", + "node-21" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-42", + "nodeId": 42, + "org": "ORG", + "pools": 1, + "producers": [ + "node-43", + "node-44", + "node-45", + "node-39", + "node-6", + "node-24" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-45", + "nodeId": 45, + "org": "ORG", + "pools": 1, + "producers": [ + "node-46", + "node-47", + "node-48", + "node-42", + "node-9", + "node-27" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-48", + "nodeId": 48, + "org": "ORG", + "pools": 1, + "producers": [ + "node-49", + "node-50", + "node-51", + "node-45", + "node-12", + "node-30" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-51", + "nodeId": 51, + "org": "ORG", + "pools": 1, + "producers": [ + "node-1", + "node-2", + "node-0", + "node-48", + "node-15", + "node-33" + ], + "region": "eu-central-1", + "stakePool": true + }, + { + "name": "node-1", + "nodeId": 1, + "org": "ORG", + "pools": 1, + "producers": [ + "node-2", + "node-0", + "node-4", + "node-49", + "node-16", + "node-34" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-4", + "nodeId": 4, + "org": "ORG", + "pools": 1, + "producers": [ + "node-5", + "node-3", + "node-7", + "node-1", + "node-19", + "node-37" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-7", + "nodeId": 7, + "org": "ORG", + "pools": 1, + "producers": [ + "node-8", + "node-6", + "node-10", + "node-4", + "node-22", + "node-40" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-10", + "nodeId": 10, + "org": "ORG", + "pools": 1, + "producers": [ + "node-11", + "node-9", + "node-13", + "node-7", + "node-25", + "node-43" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-13", + "nodeId": 13, + "org": "ORG", + "pools": 1, + "producers": [ + "node-14", + "node-12", + "node-16", + "node-10", + "node-28", + "node-46" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-16", + "nodeId": 16, + "org": "ORG", + "pools": 1, + "producers": [ + "node-17", + "node-15", + "node-19", + "node-13", + "node-31", + "node-49" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-19", + "nodeId": 19, + "org": "ORG", + "pools": 1, + "producers": [ + "node-20", + "node-18", + "node-22", + "node-16", + "node-34", + "node-1" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-22", + "nodeId": 22, + "org": "ORG", + "pools": 1, + "producers": [ + "node-23", + "node-21", + "node-25", + "node-19", + "node-37", + "node-4" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-25", + "nodeId": 25, + "org": "ORG", + "pools": 1, + "producers": [ + "node-26", + "node-24", + "node-28", + "node-22", + "node-40", + "node-7" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-28", + "nodeId": 28, + "org": "ORG", + "pools": 1, + "producers": [ + "node-29", + "node-27", + "node-31", + "node-25", + "node-43", + "node-10" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-31", + "nodeId": 31, + "org": "ORG", + "pools": 1, + "producers": [ + "node-32", + "node-30", + "node-34", + "node-28", + "node-46", + "node-13" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-34", + "nodeId": 34, + "org": "ORG", + "pools": 1, + "producers": [ + "node-35", + "node-33", + "node-37", + "node-31", + "node-49", + "node-16" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-37", + "nodeId": 37, + "org": "ORG", + "pools": 1, + "producers": [ + "node-38", + "node-36", + "node-40", + "node-34", + "node-1", + "node-19" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-40", + "nodeId": 40, + "org": "ORG", + "pools": 1, + "producers": [ + "node-41", + "node-39", + "node-43", + "node-37", + "node-4", + "node-22" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-43", + "nodeId": 43, + "org": "ORG", + "pools": 1, + "producers": [ + "node-44", + "node-42", + "node-46", + "node-40", + "node-7", + "node-25" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-46", + "nodeId": 46, + "org": "ORG", + "pools": 1, + "producers": [ + "node-47", + "node-45", + "node-49", + "node-43", + "node-10", + "node-28" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-49", + "nodeId": 49, + "org": "ORG", + "pools": 1, + "producers": [ + "node-50", + "node-48", + "node-1", + "node-46", + "node-13", + "node-31" + ], + "region": "us-east-1", + "stakePool": true + }, + { + "name": "node-2", + "nodeId": 2, + "org": "ORG", + "pools": 1, + "producers": [ + "node-0", + "node-1", + "node-5", + "node-50", + "node-17", + "node-35" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-5", + "nodeId": 5, + "org": "ORG", + "pools": 1, + "producers": [ + "node-3", + "node-4", + "node-8", + "node-2", + "node-20", + "node-38" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-8", + "nodeId": 8, + "org": "ORG", + "pools": 1, + "producers": [ + "node-6", + "node-7", + "node-11", + "node-5", + "node-23", + "node-41" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-11", + "nodeId": 11, + "org": "ORG", + "pools": 1, + "producers": [ + "node-9", + "node-10", + "node-14", + "node-8", + "node-26", + "node-44" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-14", + "nodeId": 14, + "org": "ORG", + "pools": 1, + "producers": [ + "node-12", + "node-13", + "node-17", + "node-11", + "node-29", + "node-47" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-17", + "nodeId": 17, + "org": "ORG", + "pools": 1, + "producers": [ + "node-15", + "node-16", + "node-20", + "node-14", + "node-32", + "node-50" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-20", + "nodeId": 20, + "org": "ORG", + "pools": 1, + "producers": [ + "node-18", + "node-19", + "node-23", + "node-17", + "node-35", + "node-2" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-23", + "nodeId": 23, + "org": "ORG", + "pools": 1, + "producers": [ + "node-21", + "node-22", + "node-26", + "node-20", + "node-38", + "node-5" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-26", + "nodeId": 26, + "org": "ORG", + "pools": 1, + "producers": [ + "node-24", + "node-25", + "node-29", + "node-23", + "node-41", + "node-8" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-29", + "nodeId": 29, + "org": "ORG", + "pools": 1, + "producers": [ + "node-27", + "node-28", + "node-32", + "node-26", + "node-44", + "node-11" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-32", + "nodeId": 32, + "org": "ORG", + "pools": 1, + "producers": [ + "node-30", + "node-31", + "node-35", + "node-29", + "node-47", + "node-14" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-35", + "nodeId": 35, + "org": "ORG", + "pools": 1, + "producers": [ + "node-33", + "node-34", + "node-38", + "node-32", + "node-50", + "node-17" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-38", + "nodeId": 38, + "org": "ORG", + "pools": 1, + "producers": [ + "node-36", + "node-37", + "node-41", + "node-35", + "node-2", + "node-20" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-41", + "nodeId": 41, + "org": "ORG", + "pools": 1, + "producers": [ + "node-39", + "node-40", + "node-44", + "node-38", + "node-5", + "node-23" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-44", + "nodeId": 44, + "org": "ORG", + "pools": 1, + "producers": [ + "node-42", + "node-43", + "node-47", + "node-41", + "node-8", + "node-26" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-47", + "nodeId": 47, + "org": "ORG", + "pools": 1, + "producers": [ + "node-45", + "node-46", + "node-50", + "node-44", + "node-11", + "node-29" + ], + "region": "ap-southeast-2", + "stakePool": true + }, + { + "name": "node-50", + "nodeId": 50, + "org": "ORG", + "pools": 1, + "producers": [ + "node-48", + "node-49", + "node-2", + "node-47", + "node-14", + "node-32" + ], + "region": "ap-southeast-2", + "stakePool": true + } + ], + "relayNodes": [ + { + "name": "explorer", + "nodeId": 52, + "org": "ORG", + "pools": null, + "producers": [ + "node-0", + "node-1", + "node-2", + "node-3", + "node-4", + "node-5", + "node-6", + "node-7", + "node-8", + "node-9", + "node-10", + "node-11", + "node-12", + "node-13", + "node-14", + "node-15", + "node-16", + "node-17", + "node-18", + "node-19", + "node-20", + "node-21", + "node-22", + "node-23", + "node-24", + "node-25", + "node-26", + "node-27", + "node-28", + "node-29", + "node-30", + "node-31", + "node-32", + "node-33", + "node-34", + "node-35", + "node-36", + "node-37", + "node-38", + "node-39", + "node-40", + "node-41", + "node-42", + "node-43", + "node-44", + "node-45", + "node-46", + "node-47", + "node-48", + "node-49", + "node-50", + "node-51" + ], + "region": "eu-central-1", + "stakePool": null + } + ] +}