From 42a9e8f99e5e4bb819cb66721a210e02a7bf9388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 15:54:18 +0100 Subject: [PATCH 1/7] Add scripts/bench/setup-udp-bookworm.sh --- scripts/bench/setup-udp-bookworm.sh | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100755 scripts/bench/setup-udp-bookworm.sh diff --git a/scripts/bench/setup-udp-bookworm.sh b/scripts/bench/setup-udp-bookworm.sh new file mode 100755 index 0000000..59a7f5b --- /dev/null +++ b/scripts/bench/setup-udp-bookworm.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Prepare for running aquatic_bench for UDP on Debian 12 + +# Install dependencies +sudo apt-get update && apt-get upgrade -y +sudo apt-get install -y curl vim htop screen cmake build-essential pkg-config git screen cvs zlib1g zlib1g-dev golang +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +source "$HOME/.cargo/env" + +# Build aquatic +. ./scripts/env-native-cpu-without-avx-512 +cargo build --profile "release-debug" -p aquatic_udp +cargo build --profile "release-debug" -p aquatic_udp_load_test +cargo build --profile "release-debug" -p aquatic_bencher --features udp + +cd $HOME +mkdir -p projects +cd projects + +# Install opentracker +cvs -d :pserver:cvs@cvs.fefe.de:/cvs -z9 co libowfat +cd libowfat +make +cd .. +git clone git://erdgeist.org/opentracker +cd opentracker +make +sudo cp ./opentracker /usr/local/bin/ +cd .. + +# Install chihaya +git clone https://github.com/chihaya/chihaya.git +cd chihaya +go build ./cmd/chihaya +sudo cp ./chihaya /usr/local/bin/ +cd .. \ No newline at end of file From 87e7811751ff06b916c02180f3e1741acd2063e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 15:54:18 +0100 Subject: [PATCH 2/7] Update bencher settings and setup script --- crates/bencher/README.md | 4 ++-- crates/bencher/src/protocols/udp.rs | 5 ++++- scripts/bench/setup-udp-bookworm.sh | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/bencher/README.md b/crates/bencher/README.md index edfeb62..70cc8a0 100644 --- a/crates/bencher/README.md +++ b/crates/bencher/README.md @@ -1,3 +1,3 @@ -# aquatic_load_tester +# aquatic_bencher -Automated load testing of aquatic and other BitTorrent trackers. Linux only. \ No newline at end of file +Automated benchmarking of aquatic and other BitTorrent trackers. Linux only. \ No newline at end of file diff --git a/crates/bencher/src/protocols/udp.rs b/crates/bencher/src/protocols/udp.rs index 5ad3f60..4c906d6 100644 --- a/crates/bencher/src/protocols/udp.rs +++ b/crates/bencher/src/protocols/udp.rs @@ -266,6 +266,7 @@ impl ProcessRunner for AquaticUdpRunner { c.socket_workers = self.socket_workers; c.swarm_workers = self.swarm_workers; + c.protocol.max_response_peers = 50; let c = toml::to_string_pretty(&c)?; @@ -363,6 +364,8 @@ impl ProcessRunner for ChihayaUdpRunner { udp: addr: "127.0.0.1:3000" private_key: "abcdefghijklmnopqrst" + max_numwant: 50 + default_numwant: 50 storage: name: "memory" "#, @@ -412,7 +415,7 @@ impl ProcessRunner for AquaticUdpLoadTestRunner { c.workers = self.workers as u8; c.duration = 60; - c.requests.weight_connect = 100; + c.requests.weight_connect = 0; c.requests.weight_announce = 100; c.requests.weight_scrape = 1; diff --git a/scripts/bench/setup-udp-bookworm.sh b/scripts/bench/setup-udp-bookworm.sh index 59a7f5b..84d111a 100755 --- a/scripts/bench/setup-udp-bookworm.sh +++ b/scripts/bench/setup-udp-bookworm.sh @@ -24,6 +24,8 @@ make cd .. git clone git://erdgeist.org/opentracker cd opentracker +sed -i "s/^OPTS_production=-O3/OPTS_production=-O3 -march=native -mtune=native/g" Makefile +sed -i "s/if \(numwant > 200\) numwant = 200/if (numwant > 50) numwant = 50/g" ot_udp.c make sudo cp ./opentracker /usr/local/bin/ cd .. From 0f469ff7258eda821b36bd3b7b8ac39412161957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 18:16:53 +0100 Subject: [PATCH 3/7] udp: increase default config value worker_channel_size --- crates/udp/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/udp/src/config.rs b/crates/udp/src/config.rs index fb46ee8..baaabf7 100644 --- a/crates/udp/src/config.rs +++ b/crates/udp/src/config.rs @@ -58,7 +58,7 @@ impl Default for Config { socket_workers: 1, swarm_workers: 1, log_level: LogLevel::Error, - worker_channel_size: 1024 * 16, + worker_channel_size: 1024 * 128, request_channel_recv_timeout_ms: 100, network: NetworkConfig::default(), protocol: ProtocolConfig::default(), From 23fe6d4e2084b975dd39e7d12286af945be28a9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 19:14:42 +0100 Subject: [PATCH 4/7] bencher: remove chihaya GOMAXPROCS option It makes no difference to performance --- crates/bencher/src/protocols/udp.rs | 49 +++++++++-------------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/crates/bencher/src/protocols/udp.rs b/crates/bencher/src/protocols/udp.rs index 4c906d6..e982ddb 100644 --- a/crates/bencher/src/protocols/udp.rs +++ b/crates/bencher/src/protocols/udp.rs @@ -86,8 +86,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(2), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(2)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[1, 2, 4, 6]), @@ -104,8 +103,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(4), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(4)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[1, 2, 4, 6]), @@ -122,8 +120,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(6), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(6)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 6, 8]), @@ -140,8 +137,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(8), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(8)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 6, 8]), @@ -160,8 +156,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(12), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(12)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 6, 8, 12]), @@ -180,8 +175,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(16), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(16)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12]), @@ -202,8 +196,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(24), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(24)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12, 16]), @@ -225,8 +218,7 @@ impl UdpCommand { OpenTrackerUdpRunner::new(32), ], UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(None), - ChihayaUdpRunner::new(Some(32)), + ChihayaUdpRunner::new(), ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12, 16]), @@ -336,13 +328,11 @@ impl ProcessRunner for OpenTrackerUdpRunner { } #[derive(Debug, Clone)] -struct ChihayaUdpRunner { - gomaxprocs: Option, -} +struct ChihayaUdpRunner; impl ChihayaUdpRunner { - fn new(gomaxprocs: Option) -> Rc> { - Rc::new(Self { gomaxprocs }) + fn new() -> Rc> { + Rc::new(Self) } } @@ -371,28 +361,19 @@ impl ProcessRunner for ChihayaUdpRunner { "#, )?; - let mut c = Command::new("taskset"); - - let mut c = c + Ok(Command::new("taskset") .arg("--cpu-list") .arg(vcpus.as_cpu_list()) .arg(&command.chihaya) .arg("--config") .arg(tmp_file.path()) .stdout(Stdio::piped()) - .stderr(Stdio::piped()); - - if let Some(gomaxprocs) = self.gomaxprocs { - c = c.env("GOMAXPROCS", gomaxprocs.to_string()); - } - - Ok(c.spawn()?) + .stderr(Stdio::piped()) + .spawn()?) } fn keys(&self) -> IndexMap { - indexmap! { - "GOMAXPROCS".to_string() => format!("{:?}", self.gomaxprocs), - } + Default::default() } } From b1c2a9bff4dbad7d6cd308eddb7fd0c040383ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 19:18:18 +0100 Subject: [PATCH 5/7] bencher: tweak UDP set config --- crates/bencher/src/protocols/udp.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/crates/bencher/src/protocols/udp.rs b/crates/bencher/src/protocols/udp.rs index e982ddb..9398fd3 100644 --- a/crates/bencher/src/protocols/udp.rs +++ b/crates/bencher/src/protocols/udp.rs @@ -146,8 +146,7 @@ impl UdpCommand { implementations: indexmap! { UdpTracker::Aquatic => vec![ AquaticUdpRunner::new(5, 1), - AquaticUdpRunner::new(6, 1), - AquaticUdpRunner::new(9, 1), + AquaticUdpRunner::new(10, 1), AquaticUdpRunner::new(4, 2), AquaticUdpRunner::new(8, 2), ], @@ -165,7 +164,6 @@ impl UdpCommand { implementations: indexmap! { UdpTracker::Aquatic => vec![ AquaticUdpRunner::new(7, 1), - AquaticUdpRunner::new(8, 1), AquaticUdpRunner::new(14, 1), AquaticUdpRunner::new(6, 2), AquaticUdpRunner::new(12, 2), @@ -184,12 +182,13 @@ impl UdpCommand { implementations: indexmap! { UdpTracker::Aquatic => vec![ AquaticUdpRunner::new(11, 1), - AquaticUdpRunner::new(12, 1), AquaticUdpRunner::new(22, 1), AquaticUdpRunner::new(10, 2), AquaticUdpRunner::new(20, 2), AquaticUdpRunner::new(9, 3), AquaticUdpRunner::new(18, 3), + AquaticUdpRunner::new(8, 4), + AquaticUdpRunner::new(16, 4), ], UdpTracker::OpenTracker => vec![ OpenTrackerUdpRunner::new(12), @@ -199,19 +198,19 @@ impl UdpCommand { ChihayaUdpRunner::new(), ], }, - load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12, 16]), + load_test_runs: simple_load_test_runs(cpu_mode, &[8, 12, 16]), }, 16 => SetConfig { implementations: indexmap! { UdpTracker::Aquatic => vec![ - AquaticUdpRunner::new(15, 1), - AquaticUdpRunner::new(30, 1), AquaticUdpRunner::new(14, 2), AquaticUdpRunner::new(28, 2), AquaticUdpRunner::new(13, 3), AquaticUdpRunner::new(26, 3), AquaticUdpRunner::new(12, 4), AquaticUdpRunner::new(24, 4), + AquaticUdpRunner::new(11, 5), + AquaticUdpRunner::new(22, 5), ], UdpTracker::OpenTracker => vec![ OpenTrackerUdpRunner::new(16), @@ -221,7 +220,7 @@ impl UdpCommand { ChihayaUdpRunner::new(), ], }, - load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12, 16]), + load_test_runs: simple_load_test_runs(cpu_mode, &[8, 12, 16]), }, } } From 858cea143aa2034064d2cc66e2d277bcb0c55c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 19:25:57 +0100 Subject: [PATCH 6/7] bencher: udp: remove chihaya from high core count load tests It tends to crash here --- crates/bencher/src/protocols/udp.rs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/crates/bencher/src/protocols/udp.rs b/crates/bencher/src/protocols/udp.rs index 9398fd3..fce0ecd 100644 --- a/crates/bencher/src/protocols/udp.rs +++ b/crates/bencher/src/protocols/udp.rs @@ -154,9 +154,6 @@ impl UdpCommand { OpenTrackerUdpRunner::new(6), OpenTrackerUdpRunner::new(12), ], - UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(), - ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 6, 8, 12]), }, @@ -172,9 +169,6 @@ impl UdpCommand { OpenTrackerUdpRunner::new(8), OpenTrackerUdpRunner::new(16), ], - UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(), - ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[4, 8, 12]), }, @@ -194,9 +188,6 @@ impl UdpCommand { OpenTrackerUdpRunner::new(12), OpenTrackerUdpRunner::new(24), ], - UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(), - ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[8, 12, 16]), }, @@ -216,9 +207,6 @@ impl UdpCommand { OpenTrackerUdpRunner::new(16), OpenTrackerUdpRunner::new(32), ], - UdpTracker::Chihaya => vec![ - ChihayaUdpRunner::new(), - ], }, load_test_runs: simple_load_test_runs(cpu_mode, &[8, 12, 16]), }, From 363c901ca227f486bf1179dfcc13228774052f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sat, 30 Dec 2023 19:32:09 +0100 Subject: [PATCH 7/7] bencher: add note in run.rs about stats for multiple threads --- crates/bencher/src/run.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/bencher/src/run.rs b/crates/bencher/src/run.rs index d556e41..09573e0 100644 --- a/crates/bencher/src/run.rs +++ b/crates/bencher/src/run.rs @@ -84,6 +84,8 @@ impl RunConfig { ::std::thread::sleep(Duration::from_secs(1)); } + // Note: a more advanced version tracking threads too would add argument + // "-L" and add "comm" to output format list let tracker_process_stats_res = Command::new("ps") .arg("-p") .arg(tracker.0.id().to_string())