As a hobby, I play with software routers in virtual machines (always FreeBSD). One recent project of mine was to emulate DSL bandwidth and latency in a VM, from varying bandwidths of 1.5 Mbps (ADSL) to 50 Mbps (VDSL2).
By default, when using FreeBSD on a hypervisor, the kern.hz
tunable is set to 100
. This is to prevent additional CPU use from idling.
But dummynet
recommends kern.hz=1000
which is also the default on physical hardware. This is to prevent additional latency as dummynet
uses clock ticks, and this also works with VMs.
Using dummynet
and the default kern.hz=100
on both VirtualBox and bhyve hosts had about 10-20ms delay.
If I set kern.hz=1000
in /boot/loader.conf
, the latency from dummynet
drops to <1ms on average, and at worst 1-2ms.
However, this has the disadvantage of higher idle CPU use (as mentioned earlier) in the VM running dummynet
. I only recommend setting kern.hz=1000
in a VM only if you are using something like dummynet
which relies on clock ticks and some idle CPU use is acceptable.
Leave a Reply