Install Windows VirtIO Drivers

Overview

VirtIO provides an efficient abstraction for hypervisors and a common set of IO virtualization drivers. It was chosen to be the main platform for IO virtualization in KVM. Currently, the following four drivers are available:

  • Balloon - The balloon driver affects the memory management of the guest OS.

  • VIOSERIAL - The serial driver affects single serial device limitation within KVM.

  • NetKVM - The network driver affects Ethernet network adapters.

  • VIOSTOR - The block driver affects SCSI-based controllers.

Windows-based systems require VirtIO drivers primarily to recognize the VirtIO (SCSI) controller and network adapter presented by the IONOS KVM-based hypervisor. This can be accomplished in a variety of ways depending on the state of the virtual machine.

IONOS provides pre-configured Windows Server images that already contain the required VirtIO drivers and the optimal network adapter configuration. Additionally, a VirtIO ISO to simplify the driver installation process for Windows 2008 R2, Windows 2012 & Windows 2012 R2 systems is also available. This ISO can be found in the CD-ROM drop-down menu under IONOS Images which can be used for new Windows installations (only required for customer-provided images), as well as Windows images that have been migrated from other environments. Example: via VMDK upload.

Note: We recommend using the latest Windows VirtIO driver from IONOS.

Install Windows VirtIO drivers

To install Windows VirtIO drivers, follow these steps:

  1. Add a CD-ROM drive.

  2. Log in to the DCD with your username and password, and follow these instructions: a. In the Workspace, select the required server. b. In the Inspector pane, select the Storage tab. c. Click CD-ROM to add a CD-ROM drive. d. In the dialog box, enter the following:

    • Choose an IONOS Image with drivers (windows-VirtIO-driver-<version>.iso).

    • Select the Boot from Device checkbox.

    • Confirm your action by clicking Create CD-ROM Drive.

    e. Provision your changes. f. Connect to the server using the Remote Console. The installation menu opens. g. Follow the options provided by the installation menu. h. Remove the CD-ROM drive as soon as the menu asks you to do so, and shut down the VM. i. In the DCD, specify from which storage to boot. j. Restart the server using the DCD. k. Provision your changes. l. Connect to the server again using the Remote Console to make further changes.

  3. Set optimal values: For an optimal configuration, apply the following settings:

    • MTU:

      • Internal network interface: 1500 MTU

      • External network interface: 1500 MTU

    • Offloading for Receive (RX) and Transmit (TX):

      • Offload Tx IP checksum: Enabled

      • Offload Tx LSO: Enabled

      • Offload Tx TCP checksum: Enabled

      • Fix IP checksum on LSO: Enabled

      • Hardware checksum: Enabled

  4. Disable TCP Offloading/Chimney:

    • Default: netsh int tcp set global chimney=disabled

    • Everything:

    rss=disabled
    chimney=disabled
    congestionprovider=none
    netdma=disabled dca=disabled
    ecncapability=disabled
    timestamps=enabled
    • Alternatively, modify the Windows registry:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
    "EnableTCPA"=dword:00000000
    "EnableRSS"=dword:00000000
    "EnableTCPChimney"=dword:00000000

Result: The installation will be active after a restart. You can use the netsh interface tcp show global command to verify the status of the configurations.

  1. Set correct values for any network adapter automatically by executing the Get-NetAdapter command via PowerShell. The following output is displayed: a. In the Name field, use the output value instead of Ethernet. b. Create a new file from the File > New menu in the PowerShell ISE. c. Copy and paste the following code and remember to update $name ="Ethernet" appropriately:

    Clear-Host
    $name ="Ethernet"
    Set-NetAdapterAdvancedProperty-name $name -RegistryKeyword "MTU" -Registryvalue 1500
    Set-NetAdapterAdvancedProperty -name $name -RegistryKeyword "*rss" -Registryvalue 0
    Set-NetAdapterAdvancedProperty -name $name -RegistryKeyword"*TCPChecksumOffloadIPv4" -Registryvalue 0
    Set-NetAdapterAdvancedProperty -name $name -RegistryKeyword "*UDPChecksumOffloadIPv4" -Registryvalue 0
    netsh interface tcp set global chimney=disabled
    netsh interface tcp set global autotuninglevel=normal
    netsh interface tcp set global netdma=disabled
    netsh interface tcp set global dca=disabled
    netsh interface tcp set global ecncapability=disabled
    netsh interface tcp set global timestamps=enabled
    Get-NetAdapterAdvancedProperty
    netsh int tcp show global

    d. Click File > Execute. e. Verify the settings. f. Restart the VM.

Result: The correct settings are applied automatically.

6. Activate TCP/IP auto-tuning. It ensures optimal data transfer between the client and the server by monitoring network traffic and automatically adjusting the Receive Window Size. You must permanently activate the option for optimal performance.

  • Execute the netsh interface tcp set global autotuninglevel=normal command to activate TCP/IP auto-tuning.

  • Execute the netsh interface tcp show global command to check the current setting.

Last updated