18.2. 优化 Windows 虚拟机
当在 RHEL 8 上托管的虚拟机(VM)中使用 Microsoft Windows 作为客户机操作系统时,客户端的性能可能会受到负面影响。
因此,红帽建议您使用以下组合来优化 Windows 虚拟机:
- 使用半虚拟驱动程序。如需更多信息,请参阅为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
- 启用 Hyper-V enlightenments。如需更多信息,请参阅启用 Hyper-Vlightenments。
- 配置 NetKVM 驱动程序参数。如需更多信息,请参阅配置 NetKVM 驱动程序参数。
- 优化或禁用 Windows 后台进程。如需更多信息,请参阅 优化 Windows 虚拟机上的后台进程。
18.2.1. 为 Windows 虚拟机安装 KVM 半虚拟驱动程序
提高 Windows 虚拟机(VM)性能的主要方法是为客户机操作系统上的 Windows 安装 KVM 半虚拟化(virtio
)驱动程序。
virtio-win
驱动程序针对 Windows 10 和 11 的最新版本进行了认证(WHQL),可在相应的 virtio-win
发布时提供。但是,virtio-win
驱动程序通常是测试过的,并预计可以在之前 Windows 10 和 11 的构建上正常工作。
要在 Windows 虚拟机上安装驱动程序,请执行以下操作:
- 在主机机器上准备安装介质。如需更多信息,请参阅 在主机 中准备 virtio 驱动程序安装介质。
- 将安装介质附加到现有 Windows 虚拟机,或者在创建新 Windows 虚拟机时附加该介质。如需更多信息,请参阅 在 RHEL 上安装 Windows 虚拟机。
-
在 Windows 客户机操作系统上安装
virtio
驱动程序。如需更多信息,请参阅在 Windows 客户端中安装 virtio 驱动程序。 -
在 Windows 客户机操作系统上安装
QEMU Guest Agent
。如需更多信息,请参阅 在 Windows 客户机上安装 QEMU 客户机代理。
18.2.1.1. Windows virtio 驱动程序如何工作
半虚拟化驱动程序通过降低 I/O 延迟并将吞吐量提高到几乎裸机水平来提高虚拟机(VM)的性能。红帽建议您为运行 I/O 密集型任务和应用程序的虚拟机使用半虚拟化驱动程序。
virtio
驱动程序是 KVM 的半虚拟化设备驱动程序,可用于在 KVM 主机上运行的 Windows 虚拟机。这些驱动程序由 virtio-win
软件包提供,其中包括以下设备的驱动程序:
- 块(存储)设备
- 网络接口控制器
- 视频控制器
- 内存 ballooning 设备
- 半虚拟串口设备
- 熵源设备
- 半虚拟 panic 设备
- 输入设备,如鼠标、键盘或平板电脑
- 一组小型模拟设备
有关模拟、virtio
和分配的设备的附加信息,请参阅管理虚拟设备。
通过使用 KVM virtio 驱动程序,以下 Microsoft Windows 版本应该与物理系统类似:
- Windows Server 版本: 请参阅红帽知识库中的带有 KVM 的 Red Hat Enterprise Linux 认证的客户机操作系统。
Windows Desktop (非服务器)版本:
- Windows 10 (32 位和 64 位版本)
18.2.1.2. 在主机中准备 virtio 驱动程序安装介质
要在 Windows 虚拟机(VM)上安装或更新 KVM virtio
驱动程序,您必须首先在主机上准备 virtio
驱动程序安装介质。为此,请将 virtio-win
软件包提供的 .iso
文件作为存储设备附加到 Windows 虚拟机。
先决条件
- 确定在 RHEL 8 主机系统中启用了虚拟化。如需更多信息,请参阅启用虚拟化。
- 确保具有虚拟机的 root 访问权限。
流程
刷新您的订阅数据:
# subscription-manager refresh All local data refreshed
获取
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
将
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.
-
在创建新的 Windows 虚拟机时,请使用
18.2.1.3. 在 Windows 客户端中安装 virtio 驱动程序
要在 Windows 客户机操作系统上安装 KVM virtio
驱动程序,您必须添加一个包含驱动程序(在创建虚拟机(VM)之前或之后)的存储设备,并在 Windows 客户机操作系统中安装驱动程序。
此流程提供了使用图形界面安装驱动程序的说明。您也可以使用 Microsoft Windows Installer(MSI) 命令行界面。
先决条件
-
带有 KVM
virtio
驱动程序的安装介质必须附加到虚拟机。有关准备介质的说明,请参考 在主机上准备 virtio 驱动程序安装介质。
流程
-
在 Windows 客户机操作系统中,打开
File Explorer
应用程序。 -
单击
This PC
。 -
在
Devices and drives
窗格中,打开virtio-win
介质。 根据安装在虚拟机上的操作系统,运行其中一个安装程序:
-
如果使用 32 位操作系统,请运行
virtio-win-gt-x86.msi
安装程序。 -
如果使用 64 位操作系统,请运行
virtio-win-gt-x64.msi
安装程序。
-
如果使用 32 位操作系统,请运行
在打开的
Virtio-win-driver-installer
设置向导中,请按照显示的说明进行操作,直到到达Custom Setup
步骤。- 在 Custom Setup 窗口中,选择您要安装的设备驱动程序。会自动选择建议的驱动程序集,驱动程序的描述显示在列表右侧。
- 单击 ,然后单击 。
- 安装完成后,点 。
- 重启虚拟机以完成驱动程序安装。
验证
在 Windows 虚拟机上,进到 Device Manager :
- 点 Start
- 搜索 Device Manager
确保设备使用正确的驱动程序:
- 点击设备来打开 Driver Properties 窗口。
- 进到 Driver 选项卡。
- 单击 Driver Details。
后续步骤
- 如果安装了 NetKVM 驱动程序,您可能还需要配置 Windows 客户机的网络参数。如需更多信息,请参阅配置 NetKVM 驱动程序参数。
18.2.1.4. 在 Windows 客户端中更新 virtio 驱动程序
要在 Windows 客户机操作系统(OS)上更新 KVM virtio
驱动程序,如果 Windows OS 版本支持它,您可以使用 Windows Update
服务。如果没有,请从附加到 Windows 虚拟机(VM)的 virtio
驱动程序安装介质中重新安装驱动程序。
先决条件
- 一个 已安装了 virtio 驱动程序 的 Windows 客户机操作系统。
-
如果不使用
Windows Update
,则必须将带有最新 KVMvirtio
驱动程序的安装介质附加到 Windows 虚拟机。有关准备介质的说明,请参考 在主机上准备 virtio 驱动程序安装介质。
步骤 1:使用 Windows Update 更新驱动程序
在 Windows 10 中,Windows Server 2016 及更新版本的操作系统,使用 Windows Update
图形界面检查驱动程序更新是否可用:
- 启动 Windows 虚拟机并登录到其客户机操作系统。
导航到 Optional updates 页面:
Settings
Windows Update Advanced options Optional updates - 安装 Red Hat, Inc.的所有更新。
步骤 2:通过重新安装驱动程序来更新驱动程序
在 Windows 10 和 Windows Server 2016 之前的操作系统上,或者操作系统无法访问 Windows Update
,请重新安装驱动程序。这会将 Windows 客户机操作系统网络配置恢复为默认值(DHCP)。如果要保留自定义的网络配置,还需要创建一个备份并使用 netsh
工具恢复它:
- 启动 Windows 虚拟机并登录到其客户机操作系统。
打开 Windows 命令提示:
- 使用 Super+R 键盘快捷键。
-
在显示的窗口中,键入
cmd
并按 Ctrl+Shift+Enter 以以管理员身份运行。
使用 Windows 命令提示备份 OS 网络配置:
C:\WINDOWS\system32\netsh dump > backup.txt
从附加的安装介质重新安装 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
- 在不重启虚拟机的情况下 ,使用图形界面 重新安装驱动程序。
使用 Windows 命令提示恢复 OS 网络配置:
C:\WINDOWS\system32\netsh -f backup.txt
- 重启虚拟机以完成驱动程序安装。
18.2.1.5. 在 Windows 客户机上启用 QEMU 客户机代理
要允许 RHEL 主机在 Windows 虚拟机(VM)上执行 某些操作的子集,您必须启用 QEMU 客户机代理(GA)。为此,请将包含 QEMU 客户机代理安装程序的存储设备添加到现有虚拟机或者在创建新虚拟机时,在 Windows 客户机操作系统上安装驱动程序。
要使用图形界面安装客户机代理(GA),请参阅以下流程 。要在命令行界面中安装 GA,请使用 Microsoft Windows 安装程序(MSI)。
先决条件
- 带有客户机代理的安装介质被附加到虚拟机。有关准备介质的说明,请参考 在主机上准备 virtio 驱动程序安装介质。
流程
-
在 Windows 客户机操作系统中,打开
File Explorer
应用程序。 -
单击
This PC
。 -
在
Devices and drives
窗格中,打开virtio-win
介质。 -
打开
guest-agent
文件夹。 根据安装在虚拟机上的操作系统,运行以下一个安装程序:
-
如果使用 32 位操作系统,请运行
qemu-ga-i386.msi
安装程序。 -
如果使用 64 位操作系统,请运行
qemu-ga-x86_64.msi
安装程序。
-
如果使用 32 位操作系统,请运行
-
可选:如果要使用半虚拟化串行驱动程序(
virtio-serial
)作为主机和 Windows 客户机之间的通信接口,请验证在 Windows 客户机上是否安装了virtio-serial
驱动程序。有关安装virtio
驱动程序的更多信息,请参阅: 在 Windows 客户机 上安装 virtio 驱动程序。
验证
在 Windows 虚拟机上,进到 Services 窗口。
Computer Management > Services
-
确保
QEMU 客户机代理
服务的状态为Running
。
其它资源
18.2.2. 启用 Hyper-V enlightenments
Hyper-V enlightenments 为 KVM 提供了一个模拟 Microsoft Hyper-V hypervisor的方法。这提高了 Windows 虚拟机的性能。
以下小节提供了有关支持的 Hyper-V enlightenments 以及如何启用它们的信息。
18.2.2.1. 在 Windows 虚拟机上启用 Hyper-V enlightenments
Hyper-V enlightenments 在运行在 RHEL 8 主机上的 Windows 虚拟机(VM)中提供了更好的性能。有关如何启用它们的步骤,请查看以下操作。
流程
使用
virsh edit
命令打开虚拟机的 XML 配置。例如:# virsh edit windows-vm
将以下
<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>
子部分,请按上所示进行修改。按如下方式更改配置的
clock
部分:<clock offset='localtime'> ... <timer name='hypervclock' present='yes'/> </clock>
- 保存并退出 XML 配置。
- 如果虚拟机正在运行,请重新启动它。
验证
使用
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>
18.2.2.2. 可配置 Hyper-V enlightenments
您可以配置特定的 Hyper-V 功能来优化 Windows 虚拟机。下表提供了有关这些可配置 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 |
| on, off |
stimer | 为虚拟处理器启用合成计时器。请注意,某些 Windows 版本在未提供这种启示时将恢复使用 HPET(或在 HPET 不可用时使用 RTC),这可能导致大量 CPU 消耗,即使虚拟 CPU 处于空闲状态。 | on, off |
stimer-direct | 当通过正常的中断发送过期事件时,启用合成计时器。 | on, off. |
synic | 与 stimer 一起激活合成计时器。Windows 8 以周期性模式使用此功能。 | on, off |
time | 启用以下虚拟机可用的特定于 Hyper-V 的时钟源,
| on, off |
tlbflush | 清除虚拟处理器的 TLB。 | on, off |
vapic | 启用虚拟 APIC,其提供 MSR 对高使用率、内存映射高级可编程中断控制器(APIC)寄存器的加速访问。 | on, off |
vendor_id | 设置 Hyper-V 厂商 id。 |
|
vpindex | 启用虚拟处理器索引。 | on, off |
18.2.3. 配置 NetKVM 驱动程序参数
安装 NetKVM 驱动程序后,您可以对其进行配置以更好地适合您的环境。以下流程中列出的参数可以使用 Windows 设备管理器(devmgmt.msc
)进行配置。
修改驱动程序的参数会导致 Windows 重新加载该驱动程序。这会中断现有的网络活动。
先决条件
NetKVM 驱动程序安装在虚拟机上。
如需更多信息,请参阅为 Windows 虚拟机安装 KVM 半虚拟驱动程序。
流程
打开 Windows Device Manager。
有关打开设备管理器的详情,请参考 Windows 文档。
找到 Red Hat VirtIO Ethernet Adapter。
- 在 Device Manager 窗口中,点 Network adapters 旁边的 。
在网络适配器列表中,双击 Red Hat VirtIO Ethernet Adapter。
该设备的 Properties 窗口将打开。
查看设备参数。
在 Properties 窗口中,点击 Advanced 选项卡。
修改设备参数。
点击您要修改的参数。
此时会显示那个参数的选项。
根据需要修改选项。
有关 NetKVM 参数选项的详情,请参考 NetKVM 驱动程序参数。
- 点 保存更改。
18.2.4. NetKVM 驱动程序参数
下表提供了有关可配置的 NetKVM 驱动程序日志记录参数的信息。
参数 | 描述 2 |
---|---|
Logging.Enable | 确定是否启用日志记录的布尔值。默认值为 Enabled。 |
Logging.Level | 定义日志级别的整数。当整数增加时,日志的详细程度也会增加。
注意 高日志级别会减慢您的虚拟机速度。 |
下表提供了有关可配置的 NetKVM 驱动程序初始参数的信息。
参数 | 描述 |
---|---|
分配 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 中,这个参数的有效值为:
|
Offload.Rx.Checksum | 指定 RX 校验和卸载功能。 在 Red Hat Enterprise Linux 8 中,这个参数的有效值为:
|
Offload.Tx.LSO | 指定 TX 大片段卸载(LSO)功能。 在 Red Hat Enterprise Linux 8 中,这个参数的有效值为:
|
MinRxBufferPercent | 指定 RX 队列中可用缓冲区的最小数(以 RX 缓冲区总数的百分比表示)。如果实际的可用缓冲区数低于该值,则 NetKVM 驱动程序向操作系统指示低资源状况(请求操作系统尽快返回 RX 缓冲区)
最小值(默认)-
最大值 - |
其它资源
18.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 保持在登录屏幕中。