Init. Tested against cargo bench, the single-threaded consumer is confirmed working.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user