57 lines
1.5 KiB
Rust
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);
|