  We present MoonGen, a flexible high-speed packet generator. It can saturate
10 GbE links with minimum sized packets using only a single CPU core by running
on top of the packet processing framework DPDK. Linear multi-core scaling
allows for even higher rates: We have tested MoonGen with up to 178.5 Mpps at
120 Gbit/s. We move the whole packet generation logic into user-controlled Lua
scripts to achieve the highest possible flexibility. In addition, we utilize
hardware features of Intel NICs that have not been used for packet generators
previously. A key feature is the measurement of latency with sub-microsecond
precision and accuracy by using hardware timestamping capabilities of modern
commodity NICs. We address timing issues with software-based packet generators
and apply methods to mitigate them with both hardware support on commodity NICs
and with a novel method to control the inter-packet gap in software. Features
that were previously only possible with hardware-based solutions are now
provided by MoonGen on commodity hardware. MoonGen is available as free
software under the MIT license at https://github.com/emmericp/MoonGen
