mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-02 10:45:30 +00:00
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:
parent
eded822c31
commit
8d7cbb7926
8 changed files with 122 additions and 115 deletions
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue