Performance testing was done on a server with following specifications:
- CPU: Intel Xeon E5firstname.lastname@example.org GHz
- RAM: 32 GB DDR3@1600 Mhz
- OS: Debian, linux kernel 5.4.0
- NIC: Intel X-520-2, 2x 10 Gb
DNS traffic to this server was generated and sent by Spirent TestCenter SPT-2000A through a 10 Gbps line. All DNS traffic was sent over UDP with 33% of queries and responses containing EDNS record.
DNS Probe was run with default Sysrepo configuration with only
export-format changed to
cdns when measuring C-DNS performance, and
coremask set to configure the number of packet processing threads (1, 2 or 4).
The following table contains results of the performance tests for DNS Probe. DNS Probe was run in four different configurations depending on the packet processing backend and export format used.
|Probe configuration (pkts/s) / Packet processing threads||1||2||4|
|DPDK - Parquet||718 000||1 441 000||2 647 000|
|DPDK - C-DNS||1 420 000||2 739 000||5 176 000|
|AF_PACKET - Parquet||487 000||780 000||1 350 000|
|AF_PACKET - C-DNS||805 000||1 242 000||2 017 000|
The following graph summarizes the results. It can be seen that performance scales linearly with the number of packet processing threads in all four combinations of backend and output format.
For a baseline comparison, dnscap and netsniff-ng utilities for capturing DNS traffic to PCAPs were tested on the same data set. It has to be noted that this comparison is not entirely fair because DNS Probe performs more packet processing and also matches the corresponding DNS queries and responses.
|Utility (pkts/s) / Packet processing threads||1||2||4|
|netsniff-ng||1 966 000||2 605 000||2 384 000|
|dnscap||1 329 000|
The following tables contain the same measurements as the tables above, only with the numbers converted to Gbps.
|Probe configuration (Gbps) / Packet processing threads||1||2||4|
|DPDK - Parquet||1,20||2,42||4,44|
|DPDK - C-DNS||2,38||4,60||8,69|
|AF_PACKET - Parquet||0,81||1,31||2,26|
|AF_PACKET - C-DNS||1,35||2,00||3,39|
|Utility (Gbps) / Packet processing threads||1||2||4|