Overview of Virtual Machine Multiple Queues (VMMQ)

Virtual Machine Multiple Queues (VMMQ) is a NIC offload technology that extends Native RSS (RSSv1) to a Hyper-V virtual environment.

VMMQ provides scalable network traffic processing for virtual ports (VPorts) in the parent partition of a virtualized node. A VPort represents an internal port on the NIC switch of a network adapter that supports single root I/O virtualization (SR-IOV). For an overview of the SR-IOV interface and its components see SR-IOV Architecture. Previously, RSS processing was not available for VPorts. VMMQ extends the native RSS feature to VPorts that are associated with the physical function (PF) of a NIC, including the default VPort.

VMMQ works by efficiently distributing network traffic within the NIC hardware. You can assign multiple hardware queues from the NIC to a single PF VPort. The NIC distributes network traffic across these queues using RSS hashing, placing packets directly onto the assigned processor. Offloading traffic distribution to the NIC improves CPU performance because the software doesn't have to complete this task.

You may want to enable the VMMQ feature to reduce the host CPU consumption and enable higher throughput to the virtual system by spreading the CPU load across multiple processors. You can add VMMQ support to new or existing NDIS 6.60 and later drivers. If an adapter supports VMMQ, the driver is vendor-supplied, and the OS is Windows Server 2019, then VMMQ is enabled by default. If the adapter doesn’t support VMMQ, the driver is system-supplied, or the OS is Windows Server 2016, then VMMQ is disabled by default or not available. If the OS is earlier than Windows Server 2016 then VMMQ is not available.

VMMQ is available for the VPorts exposed in the parent partition regardless of whether the NIC is operating in SR-IOV or Virtual Machine Queue (VMQ) mode.

Expected feature interactions

In this section

VMMQ send and receive processing

Advertising VMMQ capabilities

Standardized INF keywords for VMMQ

Allocating VPorts for VMMQ

Enabling, disabling, and updating VMMQ on a VPort