aquatic_bench: test multiple threads at once, with disappointing results

DashMap doesn't scale as well as I had hoped. Only the scrape
handler performed somewhat better with more threads, since it
doesn't exlusively lock the torrent map. The announce and connect
handlers, however, gained barely nothing from more threads.
This commit is contained in:
Joakim Frostegård 2020-04-11 17:32:05 +02:00
parent eded822c31
commit 8d7cbb7926
8 changed files with 122 additions and 115 deletions

View file

@ -1,6 +1,7 @@
use std::io::Cursor;
use std::time::Instant;
use std::time::{Duration, Instant};
use std::net::SocketAddr;
use std::sync::Arc;
use rand::{Rng, SeedableRng, thread_rng, rngs::{SmallRng, StdRng}};
@ -15,9 +16,9 @@ const ITERATIONS: usize = 10_000_000;
pub fn bench(
requests: Vec<([u8; MAX_REQUEST_BYTES], SocketAddr)>
) -> (f64, f64){
let state = State::new();
state: State,
requests: Arc<Vec<([u8; MAX_REQUEST_BYTES], SocketAddr)>>
) -> (usize, Duration){
let mut responses = Vec::with_capacity(ITERATIONS);
let mut buffer = [0u8; MAX_PACKET_SIZE];
@ -29,10 +30,10 @@ pub fn bench(
let now = Instant::now();
let mut requests: Vec<(ConnectRequest, SocketAddr)> = requests.into_iter()
let mut requests: Vec<(ConnectRequest, SocketAddr)> = requests.iter()
.map(|(request_bytes, src)| {
if let Request::Connect(r) = request_from_bytes(&request_bytes, 255).unwrap() {
(r, src)
if let Request::Connect(r) = request_from_bytes(request_bytes, 255).unwrap() {
(r, *src)
} else {
unreachable!()
}
@ -57,35 +58,13 @@ pub fn bench(
let duration = Instant::now() - now;
let requests_per_second = ITERATIONS as f64 / (duration.as_micros() as f64 / 1000000.0);
let time_per_request = duration.as_nanos() as f64 / ITERATIONS as f64;
assert_eq!(num_responses, ITERATIONS);
// println!("\nrequests/second: {:.2}", requests_per_second);
// println!("time per request: {:.2}ns", time_per_request);
/*
let mut dummy = 0usize;
for (response, _src) in responses {
if let Response::Connect(response) = response {
if response.connection_id.0 > 0 {
dummy += 1;
}
}
}
if dummy == ITERATIONS {
println!("dummy test output: {}", dummy);
}
*/
if dummy == 123u8 {
println!("dummy info");
}
(requests_per_second, time_per_request)
(ITERATIONS, duration)
}