Files

57 lines
1.5 KiB
Rust

use criterion::{Criterion, criterion_group, criterion_main};
use epoll_perf::{
DrainPolicy, ServerConfig, ServerModel,
client::{ClientConfig, ClientPool},
};
use std::time::{Duration, Instant};
static BASIC_CLIENT_CONFIG: ClientConfig = ClientConfig {
num_clients: 10,
payload_size: 1024,
writes_per_client: 2048,
addr: None,
};
fn bench_single_consumer(c: &mut Criterion) {
let server = ServerConfig {
bind_addr: "127.0.0.1:0".parse().unwrap(),
model: ServerModel::SingleThread,
edge_triggered: false,
drain_policy: DrainPolicy::UntilWouldBlock,
event_buffer_size: 1024,
}
.start();
let client = ClientPool::spawn(&ClientConfig {
addr: Some(server.addr),
..BASIC_CLIENT_CONFIG
});
c.bench_function("single_consumer", |b| {
b.iter_custom(|iters| {
let mut total = Duration::ZERO;
for _i in 0..iters {
// reset server/client/timer
server.reset();
client.reset();
let start = Instant::now();
// wait for completion
client.wait();
while server.processed_bytes() < client.total_bytes() {
std::hint::spin_loop();
}
// tally result
total += start.elapsed();
}
total
});
});
server.shutdown();
}
criterion_group!(epoll_benches, bench_single_consumer);
criterion_main!(epoll_benches);