Single Root I/O Virtualization (SR-IOV) is a PCI-SIG hardware standard that enables a single physical PCIe network adapter to partition its resources into multiple isolated virtual interfaces, known as Virtual Functions (VFs). In virtualised environments on Windows 11—such as developer hypervisor testbenches, network function virtualisation (NFV) appliances, or database guest clusters running on Hyper-V—SR-IOV bypasses the host software virtual switch entirely. By assigning a hardware Virtual Function directly to a guest virtual machine, network frames traverse directly between physical network wires and guest memory, delivering near-bare-metal packet throughput and zero hypervisor CPU processing overhead. Using PowerShell, administrators can inspect hardware readiness, create SR-IOV-enabled virtual switches, and audit virtual function assignments.
Understanding SR-IOV Physical and Virtual Functions
In the SR-IOV architectural model, network hardware exposes two distinct types of PCI functions:
- Physical Function (PF): The primary PCIe function of the network adapter. It includes full configuration resources, manages link negotiation, and controls the creation and lifecycle of Virtual Functions. The host operating system manages the PF.
- Virtual Function (VF): A lightweight PCIe function that shares the physical port and transceiver of the PF. A VF exposes dedicated hardware transmit and receive queues that can be assigned directly to a guest virtual machine, eliminating software packet copying in the host virtual switch.
To leverage SR-IOV on Windows 11, three hardware requirements must be met: CPU support for Second Level Address Translation (SLAT) and Input-Output Memory Management Unit (IOMMU / Intel VT-d or AMD-Vi), firmware support enabled in the UEFI BIOS, and an SR-IOV-certified physical network adapter (such as Intel X520/X710 or Mellanox ConnectX).
Verifying Hardware and BIOS SR-IOV Support
Before creating virtual switches, verify whether your installed physical network adapters support SR-IOV. Open an elevated PowerShell session (Run as Administrator) and run:
Get-NetAdapterSriov
The output reports the hardware status across all adapters:
Name InterfaceDescription SriovSupport
---- -------------------- ------------
Ethernet 1 Intel(R) Ethernet Server Adapter X520 Supported
Ethernet 2 Realtek PCIe GbE Family Controller NotSupported
To inspect detailed hardware capabilities, including the maximum number of Virtual Functions supported by the adapter hardware, format the output as a list:
Get-NetAdapterSriov -Name "Ethernet 1" | Format-List *
Critical properties to verify include:
- SriovSupport: Must report
Supported. If it displaysNoSriovSupportInBios, reboot into system UEFI firmware settings and enable Intel VT-d or AMD IOMMU and SR-IOV Global Enable. - NumVfs: The total number of hardware Virtual Functions supported by the adapter silicon (typically 32, 64, or 128).
Creating an SR-IOV-Enabled Hyper-V Virtual Switch
On Windows Hyper-V, SR-IOV capability must be declared when the virtual switch is originally created. You cannot convert an existing standard virtual switch into an SR-IOV switch after creation.
To create a new external virtual switch with SR-IOV enabled:
New-VMSwitch -Name "SRIOV-vSwitch" -NetAdapterName "Ethernet 1" -EnableIov $True
To verify that the switch successfully registered the hardware I/O virtualization capabilities:
Get-VMSwitch -Name "SRIOV-vSwitch" | Select-Object Name, IovEnabled, IovVirtualFunctionCount
The IovEnabled property will return True, confirming that the virtual switch is ready to allocate hardware Virtual Functions to guest virtual machines.
Assigning SR-IOV Virtual Functions to Virtual Machines
Once the switch is configured, enable SR-IOV on the virtual network adapter of the target virtual machine:
Set-VMNetworkAdapter -VMName "Database-VM" -IovWeight 100
The -IovWeight parameter controls hardware virtual function allocation: setting a value between 1 and 100 requests a hardware Virtual Function, while setting 0 restricts the VM to standard software synthetic networking.
To inspect the assigned adapter properties:
Get-VMNetworkAdapter -VMName "Database-VM" | Select-Object VMName, SwitchName, IovWeight, Status
Auditing Active Virtual Function Allocations
When the virtual machine boots up, Hyper-V requests a Virtual Function from the physical adapter driver. To monitor active VF assignments and hardware PCI mappings on the host, run:
Get-NetAdapterSriovVf -Name "Ethernet 1"
The command outputs a tabular overview of active VFs:
VfId FunctionLocation MacAddress AllocatedTo
---- ---------------- ---------- -----------
0 PCI\VEN_8086... 00-15-5D-01-4A-22 Database-VM
Inside the guest virtual machine (whether Windows or Linux), the guest operating system detects a dedicated PCIe device (such as the Intel Virtual Function Driver), completely bypassing the host software switch for low-latency line-rate packet processing.
Disabling SR-IOV on a Virtual Machine
If you need to perform virtual machine live migrations to a secondary host lacking identical SR-IOV hardware, you can revert the virtual adapter to synthetic mode without restarting the VM:
Set-VMNetworkAdapter -VMName "Database-VM" -IovWeight 0
The network connection seamlessly fails over to the standard Hyper-V synthetic data path, ensuring uninterrupted network communication while freeing the hardware Virtual Function.