Traditionally, I/O of VMs is implemented using the canonical "trap and emulate"
paradigm, such that whenever a VM performs some sensitive operation,
it exits (=traps) into the hypervisor, which in turn reacts similarly to (=emulates) how the bare
metal hardware would react to this action when performed by the bare metal
operation system. A newer approach to implement virtual I/O is to avoid
the virtualization exits and the associated overheads by dedicating cores to
hypervisor I/O threads that continuously poll the memory of the relevant virtual
device queues and react accordingly.
VMware’s Enhanced Network Stack (ENS) implements this paradigm .
The challenge we are addressing is to adaptively decide how many dedicated
sidecores are needed – if at all – at any point in time, in a general-purpose setup
where the workload dynamically changes and the number of active VMs may exceed
the number of physical cores. Our sidecore manager
(i) continuously monitors the host utilization and I/O activity, and (ii) dynamically
(de)allocates dedicated polling cores in a manner that optimizes performance.