1) Single CPU thread benchmark: benchmark_pps_ipg

In this benchmark, we perform several tests by sending packets using bittwist at packets per second (PPS) inter-packet gap (IPG) with a set number of packets onto the loopback interface. We use bittwiste to create all the packets for this benchmark. The benchmark results (actual) are compared to the expected values (calculated) with the goal of keeping the absolute difference between the two datasets below 0.05%.

Benchmark configurations:

VersionBit-Twist 3.8
DateJuly 6, 2023
System
CPUIntel Core i7-7700K CPU @ 4.20 GHz
RAM16 GB SODIMM DDR4 3000 MT/s
DiskSamsung 960 PRO NVMe M.2 SSD
OSUbuntu 22.04.2 LTS
Packet sizes All packets are UDP packets without payload, i.e. packet size is 42 bytes (Ethernet header = 14 bytes + IP header = 20 bytes + UDP header = 8 bytes).
PPS and packet count
PPS0.5Packets10, 20, 30, 40, 50
PPS1Packets20, 40, 60, 80, 100
PPS100Packets2000, 4000, 6000, 8000, 10000
PPS500KPackets10M, 20M, 30M, 40M, 50M

Benchmark results:
Each of the charts below shows the actual vs expected IPG in microseconds (left y-axis) at the specified PPS. The difference between actual and expected is shown in percentage (right y-axis). Absolute difference above the desired threshold of 0.05% is marked in red indicating potential area for improvement. The number of packets sent is indicated by the x-axis.

2) On-wire max. throughput benchmark: benchmark_max_throughput

In this benchmark, we perform several tests by sending packets of increasing length using bittwist onto an actual network interface card connected to another host. The tests are repeated at several line rates in Mbps up to the maximum line rate of the NICs. We use bittwiste to create all the packets for this benchmark. The benchmark results (actual) are compared to the expected values (calculated) with the goal of keeping the absolute difference between the two datasets below 0.05%.

Benchmark configurations:

VersionBit-Twist 3.8
DateJuly 6, 2023
System x 2
CPUIntel Core i7-7700K CPU @ 4.20 GHz
RAM16 GB SODIMM DDR4 3000 MT/s
DiskSamsung 960 PRO NVMe M.2 SSD
NICQualcomm Atheros Killer E2400 Gigabit Ethernet Controller
OSUbuntu 22.04.2 LTS
CableRJ45 CAT6 Ethernet cable (2m)
Packet sizes All packets are UDP packets with 0x00 bytes payload added to extend them to the length of, 64, 128, 256, 512, 1024, 1280, and 1514 bytes, as per recommendation from RFC 2544.
Line rates 10, 100, 1000 Mbps
Packet count We schedule each test to run for approximately 60 seconds, as per recommendation from RFC 2544, using this formula for packet count = (line_rate_mbps * 1000 * 1000 * 30) / (packet_bytes * 8)

Benchmark results:
Each of the charts below shows the actual vs expected throughput in Mbps (left y-axis) at the configured line rate in Mbps. The difference between actual and expected is shown in percentage (right y-axis). Absolute difference above the desired threshold of 0.05% is marked in red indicating potential area for improvement. The packet length in bytes is indicated by the x-axis.