renet/benches/bench.rs

118 lines
3.8 KiB
Rust
Raw Normal View History

#![feature(test)]
mod wire {
2021-06-27 15:31:59 +08:00
use smoltcp::phy::ChecksumCapabilities;
use smoltcp::wire::{IpAddress, IpProtocol};
2021-06-27 15:31:59 +08:00
#[cfg(feature = "proto-ipv4")]
use smoltcp::wire::{Ipv4Address, Ipv4Packet, Ipv4Repr};
#[cfg(feature = "proto-ipv6")]
use smoltcp::wire::{Ipv6Address, Ipv6Packet, Ipv6Repr};
use smoltcp::wire::{TcpControl, TcpPacket, TcpRepr, TcpSeqNumber};
use smoltcp::wire::{UdpPacket, UdpRepr};
2021-08-23 23:11:53 +08:00
extern crate test;
#[cfg(feature = "proto-ipv6")]
2021-06-27 15:31:59 +08:00
const SRC_ADDR: IpAddress = IpAddress::Ipv6(Ipv6Address([
0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
]));
#[cfg(feature = "proto-ipv6")]
2021-06-27 15:31:59 +08:00
const DST_ADDR: IpAddress = IpAddress::Ipv6(Ipv6Address([
0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
]));
#[cfg(all(not(feature = "proto-ipv6"), feature = "proto-ipv4"))]
const SRC_ADDR: IpAddress = IpAddress::Ipv4(Ipv4Address([192, 168, 1, 1]));
#[cfg(all(not(feature = "proto-ipv6"), feature = "proto-ipv4"))]
const DST_ADDR: IpAddress = IpAddress::Ipv4(Ipv4Address([192, 168, 1, 2]));
#[bench]
#[cfg(any(feature = "proto-ipv6", feature = "proto-ipv4"))]
fn bench_emit_tcp(b: &mut test::Bencher) {
2021-06-27 15:31:59 +08:00
static PAYLOAD_BYTES: [u8; 400] = [0x2a; 400];
let repr = TcpRepr {
2021-06-27 15:31:59 +08:00
src_port: 48896,
dst_port: 80,
2021-08-23 23:11:53 +08:00
control: TcpControl::Syn,
2021-06-27 15:31:59 +08:00
seq_number: TcpSeqNumber(0x01234567),
ack_number: None,
window_len: 0x0123,
window_scale: None,
2021-08-23 23:11:53 +08:00
max_seg_size: None,
sack_permitted: false,
sack_ranges: [None, None, None],
2021-06-27 15:31:59 +08:00
payload: &PAYLOAD_BYTES,
};
let mut bytes = vec![0xa5; repr.buffer_len()];
b.iter(|| {
2021-08-23 23:11:53 +08:00
let mut packet = TcpPacket::new_unchecked(&mut bytes);
2021-06-27 15:31:59 +08:00
repr.emit(
&mut packet,
&SRC_ADDR,
&DST_ADDR,
&ChecksumCapabilities::default(),
);
});
}
#[bench]
#[cfg(any(feature = "proto-ipv6", feature = "proto-ipv4"))]
fn bench_emit_udp(b: &mut test::Bencher) {
2021-06-27 15:31:59 +08:00
static PAYLOAD_BYTES: [u8; 400] = [0x2a; 400];
let repr = UdpRepr {
src_port: 48896,
dst_port: 80,
};
2021-08-23 23:11:53 +08:00
let mut bytes = vec![0xa5; repr.header_len() + PAYLOAD_BYTES.len()];
b.iter(|| {
2021-08-23 23:11:53 +08:00
let mut packet = UdpPacket::new_unchecked(&mut bytes);
2021-06-27 15:31:59 +08:00
repr.emit(
&mut packet,
&SRC_ADDR,
&DST_ADDR,
2021-08-23 23:11:53 +08:00
PAYLOAD_BYTES.len(),
|buf| buf.copy_from_slice(&PAYLOAD_BYTES),
2021-06-27 15:31:59 +08:00
&ChecksumCapabilities::default(),
);
});
}
#[bench]
#[cfg(feature = "proto-ipv4")]
fn bench_emit_ipv4(b: &mut test::Bencher) {
let repr = Ipv4Repr {
2021-06-27 15:31:59 +08:00
src_addr: Ipv4Address([192, 168, 1, 1]),
dst_addr: Ipv4Address([192, 168, 1, 2]),
protocol: IpProtocol::Tcp,
payload_len: 100,
2021-06-27 15:31:59 +08:00
hop_limit: 64,
};
let mut bytes = vec![0xa5; repr.buffer_len()];
b.iter(|| {
2021-08-23 23:11:53 +08:00
let mut packet = Ipv4Packet::new_unchecked(&mut bytes);
repr.emit(&mut packet, &ChecksumCapabilities::default());
});
}
#[bench]
#[cfg(feature = "proto-ipv6")]
fn bench_emit_ipv6(b: &mut test::Bencher) {
let repr = Ipv6Repr {
2021-06-27 15:31:59 +08:00
src_addr: Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]),
dst_addr: Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]),
next_header: IpProtocol::Tcp,
payload_len: 100,
2021-06-27 15:31:59 +08:00
hop_limit: 64,
};
let mut bytes = vec![0xa5; repr.buffer_len()];
b.iter(|| {
2021-08-23 23:11:53 +08:00
let mut packet = Ipv6Packet::new_unchecked(&mut bytes);
repr.emit(&mut packet);
});
}
}