Red Hat Training

A Red Hat training course is available for RHEL 8

17.2. 优化 Windows 虚拟机

当在 RHEL 8 上托管的虚拟机(VM)中使用 Microsoft Windows 作为客户机操作系统时,客户端的性能可能会受到负面影响。

因此,红帽建议您使用以下组合来优化 Windows 虚拟机:

17.2.1. 为 Windows 虚拟机安装 KVM 半虚拟驱动程序

提高 Windows 虚拟机(VM)性能的主要方法是为客户机操作系统上的 Windows 安装 KVM 半虚拟化(virtio)驱动程序。

注意

virtio-win 驱动程序针对 Windows 10 和 11 的最新版本进行了认证(WHQL),可在相应的 virtio-win 发布时提供。但是,virtio-win 驱动程序通常是测试过的,并预计可以在之前 Windows 10 和 11 的构建上正常工作。

要在 Windows 虚拟机上安装驱动程序,请执行以下操作:

  1. 在主机机器上准备安装介质。如需更多信息,请参阅 在主机 中准备 virtio 驱动程序安装介质
  2. 将安装介质附加到现有 Windows 虚拟机,或者在创建新 Windows 虚拟机时附加该介质。如需更多信息,请参阅 在 RHEL 上安装 Windows 虚拟机
  3. 在 Windows 客户机操作系统上安装 virtio 驱动程序。如需更多信息,请参阅在 Windows 客户端中安装 virtio 驱动程序
  4. 在 Windows 客户机操作系统上安装 QEMU Guest Agent。如需更多信息,请参阅 在 Windows 客户机上安装 QEMU 客户机代理

17.2.1.1. Windows virtio 驱动程序如何工作

半虚拟化驱动程序通过降低 I/O 延迟并将吞吐量提高到几乎裸机水平来提高虚拟机(VM)的性能。红帽建议您为运行 I/O 密集型任务和应用程序的虚拟机使用半虚拟化驱动程序。

virtio 驱动程序是 KVM 的半虚拟化设备驱动程序,可用于在 KVM 主机上运行的 Windows 虚拟机。这些驱动程序由 virtio-win 软件包提供,其中包括以下设备的驱动程序:

  • 块(存储)设备
  • 网络接口控制器
  • 视频控制器
  • 内存 ballooning 设备
  • 半虚拟串口设备
  • 熵源设备
  • 半虚拟 panic 设备
  • 输入设备,如鼠标、键盘或平板电脑
  • 一组小型模拟设备
注意

有关模拟、virtio 和分配的设备的附加信息,请参阅管理虚拟设备

通过使用 KVM virtio 驱动程序,以下 Microsoft Windows 版本应该与物理系统类似:

17.2.1.2. 在主机中准备 virtio 驱动程序安装介质

要在 Windows 虚拟机(VM)上安装或更新 KVM virtio 驱动程序,您必须首先在主机上准备 virtio 驱动程序安装介质。为此,请将 virtio-win 软件包提供的 .iso 文件作为存储设备附加到 Windows 虚拟机。

先决条件

  • 确定在 RHEL 8 主机系统中启用了虚拟化。如需更多信息,请参阅启用虚拟化
  • 确保具有虚拟机的 root 访问权限。

流程

  1. 刷新您的订阅数据:

    # subscription-manager refresh
    All local data refreshed
  2. 获取 virtio-win 软件包的最新版本。

    • 如果没有安装 virtio-win

      # yum install -y virtio-win
    • 如果安装了 virtio-win:

      # yum upgrade -y virtio-win

      如果安装成功,则 virtio-win 驱动程序文件位于 /usr/share/virtio-win/ 目录中。其中包括 ISO 文件和一个 drivers 目录,目录中包含驱动程序文件,每个架构及受支持的 Windows 版本各对应一个文件。

      # ls /usr/share/virtio-win/
      drivers/  guest-agent/  virtio-win-1.9.9.iso  virtio-win.iso
  3. virtio-win.iso 文件作为存储设备附加到 Windows 虚拟机。

    • 在创建新的 Windows 虚拟机时,请使用 virt-install 命令选项附加文件。
    • 在现有 Windows 虚拟机上安装驱动程序时,请使用 virt-xml 工具将文件附加为 CD-ROM:

      # virt-xml WindowsVM --add-device --disk virtio-win.iso,device=cdrom
      Domain 'WindowsVM' defined successfully.

17.2.1.3. 在 Windows 客户端中安装 virtio 驱动程序

要在 Windows 客户机操作系统上安装 KVM virtio 驱动程序,您必须添加一个包含驱动程序(在创建虚拟机(VM)之前或之后)的存储设备,并在 Windows 客户机操作系统中安装驱动程序。

此流程提供了使用图形界面安装驱动程序的说明。您也可以使用 Microsoft Windows Installer(MSI) 命令行界面。

先决条件

流程

  1. 在 Windows 客户机操作系统中,打开 File Explorer 应用程序。
  2. 单击 This PC
  3. Devices and drives 窗格中,打开 virtio-win 介质。
  4. 根据安装在虚拟机上的操作系统,运行其中一个安装程序:

    • 如果使用 32 位操作系统,请运行 virtio-win-gt-x86.msi 安装程序。
    • 如果使用 64 位操作系统,请运行 virtio-win-gt-x64.msi 安装程序。
  5. 在打开的 Virtio-win-driver-installer 设置向导中,请按照显示的说明进行操作,直到到达 Custom Setup 步骤。

    显示 Virtio-win-guest-tools 设置向导的图片。
  6. 在 Custom Setup 窗口中,选择您要安装的设备驱动程序。会自动选择建议的驱动程序集,驱动程序的描述显示在列表右侧。
  7. 单击 next,然后单击 Install
  8. 安装完成后,点完成
  9. 重启虚拟机以完成驱动程序安装。

验证

  1. 在 Windows 虚拟机上,进到 Device Manager

    1. 点 Start
    2. 搜索 Device Manager
  2. 确保设备使用正确的驱动程序:

    1. 点击设备来打开 Driver Properties 窗口。
    2. 进到 Driver 选项卡。
    3. 单击 Driver Details

后续步骤

17.2.1.4. 在 Windows 客户端中更新 virtio 驱动程序

要在 Windows 客户机操作系统(OS)上更新 KVM virtio 驱动程序,如果 Windows OS 版本支持它,您可以使用 Windows Update 服务。如果没有,请从附加到 Windows 虚拟机(VM)的 virtio 驱动程序安装介质中重新安装驱动程序。

先决条件

步骤 1:使用 Windows Update 更新驱动程序

在 Windows 10 中,Windows Server 2016 及更新版本的操作系统,使用 Windows Update 图形界面检查驱动程序更新是否可用:

  1. 启动 Windows 虚拟机并登录到其客户机操作系统。
  2. 导航到 Optional updates 页面:

    Settings → Windows Update → Advanced options → Optional updates

  3. 安装 Red Hat, Inc.的所有更新。

步骤 2:通过重新安装驱动程序来更新驱动程序

在 Windows 10 和 Windows Server 2016 之前的操作系统上,或者操作系统无法访问 Windows Update,请重新安装驱动程序。这会将 Windows 客户机操作系统网络配置恢复为默认值(DHCP)。如果要保留自定义的网络配置,还需要创建一个备份并使用 netsh 工具恢复它:

  1. 启动 Windows 虚拟机并登录到其客户机操作系统。
  2. 打开 Windows 命令提示:

    1. 使用 Super+R 键盘快捷键。
    2. 在显示的窗口中,键入 cmd 并按 Ctrl+Shift+Enter 以以管理员身份运行。
  3. 使用 Windows 命令提示备份 OS 网络配置:

    C:\WINDOWS\system32\netsh dump > backup.txt
  4. 从附加的安装介质重新安装 KVM virtio 驱动程序。执行以下操作之一:

    • 使用 Windows Command Prompt 重新安装驱动程序,其中 X 是安装介质驱动器符。以下命令安装所有 virtio 驱动程序。

      • 如果使用 64 位 vCPU:

        C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x64.msi /passive /norestart
      • 如果使用 32 位 vCPU:

        C:\WINDOWS\system32\msiexec.exe /i X:\virtio-win-gt-x86.msi /passive /norestart
    • 在不重启虚拟机的情况下 ,使用图形界面 重新安装驱动程序。
  5. 使用 Windows 命令提示恢复 OS 网络配置:

    C:\WINDOWS\system32\netsh -f backup.txt
  6. 重启虚拟机以完成驱动程序安装。

17.2.1.5. 在 Windows 客户端上安装 QEMU 客户机代理

要允许主机在 Windows 虚拟机(VM)上执行各种操作,您可以安装 QEMU 客户机代理。为此,请将包含 QEMU 客户机代理安装程序的存储设备添加到现有虚拟机或者在创建新虚拟机时,在 Windows 客户机操作系统上安装驱动程序。

此流程提供了使用图形界面安装客户机代理的说明。您也可以使用 Microsoft Windows Installer(MSI) 命令行界面。

先决条件

流程

  1. 在 Windows 客户机操作系统中,打开 File Explorer 应用程序。
  2. 单击 This PC
  3. Devices and drives 窗格中,打开 virtio-win 介质。
  4. 打开 guest-agent 文件夹。
  5. 根据安装在虚拟机上的操作系统,运行以下一个安装程序:

    • 如果使用 32 位操作系统,请运行 qemu-ga-i386.msi 安装程序。
    • 如果使用 64 位操作系统,请运行 qemu-ga-x86_64.msi 安装程序。

验证

  1. 在 Windows 虚拟机上,进到 Services 窗口。

    Computer Management > Services

  2. 确保 QEMU 客户机代理服务的 StatusRunning

17.2.2. 启用 Hyper-V enlightenments

Hyper-V enlightenments 为 KVM 提供了一个模拟 Microsoft Hyper-V hypervisor的方法。这提高了 Windows 虚拟机的性能。

以下小节提供了有关支持的 Hyper-V enlightenments 以及如何启用它们的信息。

17.2.2.1. 在 Windows 虚拟机上启用 Hyper-V enlightenments

Hyper-V enlightenments 在运行在 RHEL 8 主机上的 Windows 虚拟机(VM)中提供了更好的性能。有关如何启用它们的步骤,请查看以下操作。

流程

  1. 使用 virsh edit 命令打开虚拟机的 XML 配置。例如:

    # virsh edit windows-vm
  2. 将以下 <hyperv> 子部分添加到 XML 的 <features> 部分:

    <features>
      [...]
      <hyperv>
        <relaxed state='on'/>
        <vapic state='on'/>
        <spinlocks state='on' retries='8191'/>
        <vpindex state='on'/>
        <runtime state='on' />
        <synic state='on'/>
        <stimer state='on'>
          <direct state='on'/>
        </stimer>
        <frequencies state='on'/>
      </hyperv>
      [...]
    </features>

    如果 XML 已包含 <hyperv> 子部分,请按上所示进行修改。

  3. 按如下方式更改配置的 clock 部分:

    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>
  4. 保存并退出 XML 配置。
  5. 如果虚拟机正在运行,请重新启动它。

验证

  • 使用 virsh dumpxml 命令显示正在运行的虚拟机的 XML 配置。如果包括以下段,则虚拟机上启用了 Hyper-V enlightenments 。

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'>
        <direct state='on'/>
      </stimer>
      <frequencies state='on'/>
    </hyperv>
    
    <clock offset='localtime'>
      ...
      <timer name='hypervclock' present='yes'/>
    </clock>

17.2.2.2. 可配置 Hyper-V enlightenments

您可以配置特定的 Hyper-V 功能来优化 Windows 虚拟机。下表提供了有关这些可配置 Hyper-V 功能及其值的信息。

表 17.1. 可配置 Hyper-V 功能

Enlightenment描述

crash

向虚拟机提供 MSR,可用于在虚拟机崩溃时存储信息和日志。QEMU 日志中提供的信息。

注意

如果启用了 hv_crash,则不会创建 Windows 崩溃转储。

on, off

evmcs

在 L0(KVM)和 L1(Hyper-V) hypervisor 之间实施半虚拟化协议,从而使 L2 更快地退出到 hypervisor 。

注意

这个功能只供 Intel 处理器使用。

on, off

frequencies

启用 Hyper-V frequency Machine Specific Registers (MSR)。

on, off

ipi

启用半虚拟化处理器间中断(IPI)支持。

on, off

no-nonarch-coresharing

通知客户端操作系统:虚拟处理器永远不会共享物理核,除非它们被报告为同级 SMT 线程。Windows 和 Hyper-V 客户机需要这些信息才能适当地减轻与并发多线程(SMT)相关的 CPU 漏洞。

on, off, auto

reenlightenment

仅在迁移期间发生时间戳计数器(TSC)频率更改时通知。它还允许 guest 继续使用旧频率,直到准备好切换至新频率。

on, off

relaxed

禁用 Windows 完整性检查,当虚拟机在负载较重的主机上运行时,该检查通常会导致 BSOD 。这和 Linux 内核选项 no_timer_check 类似,它会在 Linux 在 KVM 中运行时自动启用。

on, off

runtime

设定运行客户机代码以及代表客户端代码的处理器时间。

on, off

spinlocks

  • 虚拟机的操作系统用来通知 Hyper-V,调用虚拟处理器正在尝试获取一个可能由同一分区中其他虚拟处理器占有的资源。
  • Hyper-V 用来向虚拟机的操作系统指明在向 Hyper-V 指示过度旋转情形之前应该尝试获取 spinlock 的次数。

on, off

stimer

为虚拟处理器启用合成计时器。请注意,某些 Windows 版本在未提供这种启示时将恢复使用 HPET(或在 HPET 不可用时使用 RTC),这可能导致大量 CPU 消耗,即使虚拟 CPU 处于空闲状态。

on, off

stimer-direct

当通过正常的中断发送过期事件时,启用合成计时器。

on, off.

synic

与 stimer 一起激活合成计时器。Windows 8 以周期性模式使用此功能。

on, off

time

启用以下虚拟机可用的特定于 Hyper-V 的时钟源,

  • 基于 MSR 的 82 个 Hyper-V 时钟源(HV_X64_MSR_TIME_REF_COUNT, 0x40000020)
  • 参考通过 MSR 启用的 TSC 83 页面(HV_X64_MSR_REFERENCE_TSC,0x40000021)

on, off

tlbflush

清除虚拟处理器的 TLB。

on, off

vapic

启用虚拟 APIC,其提供 MSR 对高使用率、内存映射高级可编程中断控制器(APIC)寄存器的加速访问。

on, off

vendor_id

设置 Hyper-V 厂商 id。

  • on, off
  • id 值 - 最多 12 个字符的字符串

vpindex

启用虚拟处理器索引。

on, off

17.2.3. 配置 NetKVM 驱动程序参数

安装 NetKVM 驱动程序后,您可以对其进行配置以更好地适合您的环境。以下流程中列出的参数可以使用 Windows 设备管理器(devmgmt.msc)进行配置。

重要

修改驱动程序的参数会导致 Windows 重新加载该驱动程序。这会中断现有的网络活动。

先决条件

流程

  1. 打开 Windows Device Manager。

    有关打开设备管理器的详情,请参考 Windows 文档。

  2. 找到 Red Hat VirtIO Ethernet Adapter

    1. 在 Device Manager 窗口中,点 Network adapters 旁边的 +
    2. 在网络适配器列表中,双击 Red Hat VirtIO Ethernet Adapter

      该设备的 Properties 窗口将打开。

  3. 查看设备参数。

    Properties 窗口中,点击 Advanced 选项卡。

  4. 修改设备参数。

    1. 点击您要修改的参数。

      此时会显示那个参数的选项。

    2. 根据需要修改选项。

      有关 NetKVM 参数选项的详情,请参考 NetKVM 驱动程序参数

    3. OK 保存更改。

17.2.4. NetKVM 驱动程序参数

下表提供了有关可配置的 NetKVM 驱动程序日志记录参数的信息。

表 17.2. 日志参数

参数描述 2

Logging.Enable

确定是否启用日志记录的布尔值。默认值为 Enabled。

Logging.Level

定义日志级别的整数。当整数增加时,日志的详细程度也会增加。

  • 默认值为 0(仅错误)。
  • 1-2 添加配置信息。
  • 3-4 添加数据包流信息。
  • 5-6 添加中断以及 DPC 级别追踪信息。
注意

高日志级别会减慢您的虚拟机速度。

下表提供了有关可配置的 NetKVM 驱动程序初始参数的信息。

表 17.3. 初始参数

参数描述

分配 MAC

为半虚拟 NIC 定义本地管理的 MAC 地址的字符串。默认不设置。

Init.Do802.1PQ

启用 Priority/VLAN 标签填充和删除支持的布尔值。默认值为 Enabled。

Init.MaxTxBuffers

代表将被分配的 TX 环描述符数的整数。值受 QEMU 的 Tx 队列的大小的限制。

默认值为 1024。

有效值有: 16、32、64、128、256、512 和 1024。

init.MaxRxBuffers

代表将要分配的 RX 环描述符数的整数。值受 QEMU 的 Tx 队列的大小的限制。

默认值为 1024。

有效值为: 16、32、64、128、256、512、1024、2048 和 4096。

Offload.Tx.Checksum

指定 TX 校验和卸载功能。

在 Red Hat Enterprise Linux 8 中,这个参数的有效值为:

  • All (默认),其为 IPv4 和 IPv6 启用 IP、TCP 和 UDP 校验和卸载
  • TCP/UDP (v4,v6),其为 IPv4 和 IPv6 启用 TCP 和 UDP 校验和卸载
  • TCP/UDP (v4),其仅为 IPv4 启用 TCP 和 UDP 校验和卸载
  • TCP(v4) ,其仅为 IPv4 启用 TCP 检验和卸载

Offload.Rx.Checksum

指定 RX 校验和卸载功能。

在 Red Hat Enterprise Linux 8 中,这个参数的有效值为:

  • All (默认),其为 IPv4 和 IPv6 启用 IP、TCP 和 UDP 校验和卸载
  • TCP/UDP (v4,v6),其为 IPv4 和 IPv6 启用 TCP 和 UDP 校验和卸载
  • TCP/UDP (v4),其仅为 IPv4 启用 TCP 和 UDP 校验和卸载
  • TCP(v4) ,其仅为 IPv4 启用 TCP 检验和卸载

Offload.Tx.LSO

指定 TX 大片段卸载(LSO)功能。

在 Red Hat Enterprise Linux 8 中,这个参数的有效值为:

  • Maximal(默认),其为 TCPv4 和 TCPv6 启用 LSO 卸载
  • IPv4,其只为 TCPv4 启用 LSO 卸载
  • 禁用禁用了 LSO 卸载的功能

MinRxBufferPercent

指定 RX 队列中可用缓冲区的最小数(以 RX 缓冲区总数的百分比表示)。如果实际的可用缓冲区数低于该值,则 NetKVM 驱动程序向操作系统指示低资源状况(请求操作系统尽快返回 RX 缓冲区)

最小值(默认)- 0 ,意味着驱动程序永远不会指示低资源状况。

最大值 - 100,意味着驱动程序一直指示低资源状况。

17.2.5. 在 Windows 虚拟机中优化后台进程

要优化运行 Windows OS 的虚拟机(VM)的性能,您可以配置或禁用各种 Windows 进程。

警告

如果您更改配置,某些进程可能无法按预期工作。

流程

您可以通过执行以下任一组合来优化 Windows 虚拟机:

  • 删除未使用的设备,如 USB 或 CD-ROM,并禁用端口。
  • 禁用后台服务,如 SuperFetch 和 Windows Search。有关停止服务的详情,请参考禁用系统服务Stop-Service
  • 禁用 useplatformclock。为此,请运行以下命令:

    # bcdedit /set useplatformclock No
  • 检查和禁用不必要的调度任务,如调度的磁盘清除。有关如何操作的更多信息,请参阅 禁用已调度的任务
  • 确定磁盘没有加密。
  • 减少服务器应用程序的周期性活动。您可以编辑对应的计时器。如需更多信息,请参阅多媒体计时器
  • 关闭虚拟机上的 Server Manager 应用程序。
  • 禁用 antivirus 软件。请注意,禁用 antivirus 可能会破坏虚拟机的安全。
  • 禁用屏保。
  • 在没有使用时,仍然将 Windows OS 保持在登录屏幕中。