From 143585792cf80c7c5d816fbf0228adb704192fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 31 Oct 2021 19:43:38 +0100 Subject: [PATCH 1/3] aquatic_udp: mio: actually clean connections according to config --- aquatic_udp/src/lib/mio/network.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/aquatic_udp/src/lib/mio/network.rs b/aquatic_udp/src/lib/mio/network.rs index 73dacfc..b6902cc 100644 --- a/aquatic_udp/src/lib/mio/network.rs +++ b/aquatic_udp/src/lib/mio/network.rs @@ -4,7 +4,7 @@ use std::sync::{ atomic::{AtomicUsize, Ordering}, Arc, }; -use std::time::Duration; +use std::time::{Duration, Instant}; use std::vec::Drain; use aquatic_common::access_list::AccessListQuery; @@ -53,6 +53,7 @@ pub fn run_socket_worker( let timeout = Duration::from_millis(50); let mut iter_counter = 0usize; + let mut now = Instant::now(); loop { poll.poll(&mut events, Some(timeout)) @@ -84,13 +85,15 @@ pub fn run_socket_worker( local_responses.drain(..), ); - iter_counter += 1; + if iter_counter % 32 == 0 { + if now.elapsed().as_secs() >= config.cleaning.interval { + connections.clean(); - if iter_counter == 1000 { - connections.clean(); - - iter_counter = 0; + now = Instant::now(); + } } + + iter_counter = iter_counter.wrapping_add(1); } } From 03a344eb8e96343a95129de67b5c923781a30959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 31 Oct 2021 19:57:30 +0100 Subject: [PATCH 2/3] aquatic_udp: mio: print num torrents and peers in statistics --- aquatic_udp/src/lib/mio/tasks.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/aquatic_udp/src/lib/mio/tasks.rs b/aquatic_udp/src/lib/mio/tasks.rs index 4d9fe16..c4bcac3 100644 --- a/aquatic_udp/src/lib/mio/tasks.rs +++ b/aquatic_udp/src/lib/mio/tasks.rs @@ -38,27 +38,47 @@ pub fn gather_and_print_statistics(state: &State, config: &Config) { bytes_sent_per_second * 8.0 / 1_000_000.0, ); + let mut total_num_torrents_ipv4 = 0usize; + let mut total_num_torrents_ipv6 = 0usize; + let mut total_num_peers_ipv4 = 0usize; + let mut total_num_peers_ipv6 = 0usize; + let mut peers_per_torrent = Histogram::new(); { let torrents = &mut state.torrents.lock(); for torrent in torrents.ipv4.values() { - let num_peers = (torrent.num_seeders + torrent.num_leechers) as u64; + let num_peers = torrent.num_seeders + torrent.num_leechers; - if let Err(err) = peers_per_torrent.increment(num_peers) { + if let Err(err) = peers_per_torrent.increment(num_peers as u64) { ::log::error!("error incrementing peers_per_torrent histogram: {}", err) } + + total_num_peers_ipv4 += num_peers; } for torrent in torrents.ipv6.values() { - let num_peers = (torrent.num_seeders + torrent.num_leechers) as u64; + let num_peers = torrent.num_seeders + torrent.num_leechers; - if let Err(err) = peers_per_torrent.increment(num_peers) { + if let Err(err) = peers_per_torrent.increment(num_peers as u64) { ::log::error!("error incrementing peers_per_torrent histogram: {}", err) } + + total_num_peers_ipv6 += num_peers; } + + total_num_torrents_ipv4 += torrents.ipv4.len(); + total_num_torrents_ipv6 += torrents.ipv6.len(); } + println!( + "ipv4 torrents: {}, peers: {}; ipv6 torrents: {}, peers: {}", + total_num_torrents_ipv4, + total_num_peers_ipv4, + total_num_torrents_ipv6, + total_num_peers_ipv6, + ); + if peers_per_torrent.entries() != 0 { println!( "peers per torrent: min: {}, p50: {}, p75: {}, p90: {}, p99: {}, p999: {}, max: {}", From 1949ed2e9c3152f2f9157d10ff2be4ba749b0bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 31 Oct 2021 21:12:52 +0100 Subject: [PATCH 3/3] aquatic_udp: mio: rewrite connection cleaning interval logic --- aquatic_udp/src/lib/mio/network.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/aquatic_udp/src/lib/mio/network.rs b/aquatic_udp/src/lib/mio/network.rs index b6902cc..388d5f3 100644 --- a/aquatic_udp/src/lib/mio/network.rs +++ b/aquatic_udp/src/lib/mio/network.rs @@ -53,7 +53,7 @@ pub fn run_socket_worker( let timeout = Duration::from_millis(50); let mut iter_counter = 0usize; - let mut now = Instant::now(); + let mut last_cleaning = Instant::now(); loop { poll.poll(&mut events, Some(timeout)) @@ -86,10 +86,12 @@ pub fn run_socket_worker( ); if iter_counter % 32 == 0 { - if now.elapsed().as_secs() >= config.cleaning.interval { + let now = Instant::now(); + + if last_cleaning + Duration::from_secs(config.cleaning.interval) > now { connections.clean(); - now = Instant::now(); + last_cleaning = now; } }