1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
use criterion::{criterion_group, criterion_main, Criterion};
use pcap_file::pcap::{PcapParser, PcapReader};
use pcap_file::pcapng::{PcapNgParser, PcapNgReader};
use pcap_file::PcapError;
/// Bench and compare Pcap readers and parsers
pub fn pcap(c: &mut Criterion) {
let pcap = std::fs::read("benches/bench.pcap").unwrap();
let mut group = c.benchmark_group("Pcap");
group.throughput(criterion::Throughput::Bytes(pcap.len() as u64));
group.bench_function("Parser", |b| {
b.iter(|| {
let (mut src, parser) = PcapParser::new(&pcap).unwrap();
loop {
match parser.next_packet(src) {
Ok((rem, _)) => src = rem,
Err(PcapError::IncompleteBuffer) => break,
Err(_) => panic!(),
}
}
})
});
group.bench_function("ParserRaw", |b| {
b.iter(|| {
let (mut src, parser) = PcapParser::new(&pcap).unwrap();
loop {
match parser.next_raw_packet(src) {
Ok((rem, _)) => src = rem,
Err(PcapError::IncompleteBuffer) => break,
Err(_) => panic!(),
}
}
})
});
group.bench_function("Reader", |b| {
b.iter(|| {
let mut src = &pcap[..];
let mut reader = PcapReader::new(&mut src).unwrap();
while let Some(pkt) = reader.next_packet() {
pkt.unwrap();
}
})
});
group.bench_function("ReaderRaw", |b| {
b.iter(|| {
let mut src = &pcap[..];
let mut reader = PcapReader::new(&mut src).unwrap();
while let Some(pkt) = reader.next_raw_packet() {
pkt.unwrap();
}
})
});
}
/// Bench and compare PcapNg readers and parsers
pub fn pcapng(c: &mut Criterion) {
let pcapng = std::fs::read("benches/bench.pcapng").unwrap();
let mut group = c.benchmark_group("PcapNg");
group.throughput(criterion::Throughput::Bytes(pcapng.len() as u64));
group.bench_function("Parser", |b| {
b.iter(|| {
let (mut src, mut parser) = PcapNgParser::new(&pcapng).unwrap();
loop {
match parser.next_block(src) {
Ok((rem, _)) => src = rem,
Err(PcapError::IncompleteBuffer) => break,
Err(_) => panic!(),
}
}
})
});
group.bench_function("ParserRaw", |b| {
b.iter(|| {
let (mut src, mut parser) = PcapNgParser::new(&pcapng).unwrap();
loop {
match parser.next_raw_block(src) {
Ok((rem, _)) => src = rem,
Err(PcapError::IncompleteBuffer) => break,
Err(_) => panic!(),
}
}
})
});
group.bench_function("Reader", |b| {
b.iter(|| {
let mut src = &pcapng[..];
let mut reader = PcapNgReader::new(&mut src).unwrap();
while let Some(pkt) = reader.next_block() {
pkt.unwrap();
}
})
});
group.bench_function("ReaderRaw", |b| {
b.iter(|| {
let mut src = &pcapng[..];
let mut reader = PcapNgReader::new(&mut src).unwrap();
while let Some(pkt) = reader.next_raw_block() {
pkt.unwrap();
}
})
});
}
criterion_group!(benches, pcap, pcapng);
criterion_main!(benches);
|