Red Hat Training

A Red Hat training course is available for RHEL 8

第 17 章 安装和管理 Windows 虚拟机

要在 RHEL 8 主机上使用 Microsoft Windows 作为虚拟机(VM)中的客户机操作系统,红帽建议采取额外步骤来确保这些虚拟机正常运行。

为此,以下小节提供有关在主机上安装和优化 Windows 虚拟机的信息,以及在这些虚拟机中安装和配置驱动程序的信息。

17.1. 安装 Windows 虚拟机

下面提供了有关如何在 RHEL 8 主机上创建完全虚拟 Windows 机器、在虚拟机(VM)中启动图形 Windows 安装程序以及优化安装的 Windows 客户机操作系统(OS)的信息。

您可以使用 virt-install 命令或 RHEL 8 web 控制台创建虚拟机并安装它。

先决条件

流程

  1. 创建虚拟机。具体步骤请查看 第 2.2 节 “创建虚拟机”

    • 如果使用 virt-install 实用程序创建虚拟机,请在该命令中添加以下选项:

      • 使用 KVM virtio 驱动程序的存储介质。例如:

        --disk path=/usr/share/virtio-win/virtio-win.iso,device=disk,bus=virtio
      • 要安装的 Windows 版本。例如:对于 Windows 10:

        --os-variant win10

        要获得可用 Windows 版本列表以及相应的选项,请使用以下命令:

        # osinfo-query os
    • 如果使用 Web 控制台创建虚拟机,在 Create New Virtual Machine 窗口的 Operating System 字段中指定您的 Windows 版本。创建虚拟机并安装客户机操作系统后,使用 Disks 接口将带有 virtio 驱动程序的存储介质附加到虚拟机。具体步骤请查看 第 11.3.7.3 节 “使用 web 控制台将现有磁盘附加到虚拟机”
  2. 在虚拟机中安装 Windows OS。

    有关如何安装 Windows 操作系统的详情,请参考相关微软安装文档。

  3. 在 Windows 客户机操作系统中配置 KVM virtio 驱动程序。详情请查看 第 17.2.1 节 “为 Windows 虚拟机安装 KVM 半虚拟驱动程序”

其它资源

17.2. 优化 Windows 虚拟机

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

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

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

提高 Windows 虚拟机(VM)性能的主要方法是在客户端操作系统(OS)上安装用于 Windows 的 KVM 参数化(virtio)驱动程序。

要做到这一点:

  1. 准备主机机器上的安装介质。更多信息请参阅 第 17.2.1.2 节 “在主机中准备 virtio 驱动程序安装介质”
  2. 将安装介质附加到现有 Windows 虚拟机中,或者在创建新 Windows 虚拟机时附加该介质。
  3. 在 Windows 客户机操作系统上安装 virtio 驱动程序。更多信息请参阅 第 17.2.1.3 节 “在 Windows 客户端中安装 virtio 驱动程序”

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

通过降低 I/O 延迟并将吞吐量增加到几乎裸机级别,半虚拟化驱动程序可以提高虚拟机(VM)的性能。红帽建议您对运行 I/O-heavy 任务和应用程序的虚拟机使用半虚拟化驱动程序。

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

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

有关模拟、virtio 和分配的设备的更多信息,请参阅 第 10 章 管理虚拟设备

使用 KVM virtio 驱动程序,以下 Microsoft Windows 版本应该和物理系统相似:

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

要在 Windows 虚拟机(VM)上安装 KVM virtio 驱动程序,您必须首先为主机上的 virtio 驱动程序准备安装介质。要做到这一点,在主机上安装 virtio-win 软件包,并使用它提供的 .iso 文件作为虚拟机存储。

先决条件

  • 确定在 RHEL 8 主机系统中启用了虚拟化。

流程

  1. 下载驱动程序

    1. 浏览 下载 Red Hat Enterprise Linux
    2. 选择与系统架构相关的 Product Variant。例如,对于 Intel 64 和 AMD64,选择 Red Hat Enterprise Linux for x86_64
    3. 确定 Version8
    4. Packages 中,搜索 virtio-win
    5. Download Latest

      RPM 文件下载。

  2. 从下载目录中安装 virtio-win 软件包。例如:

    # yum install ~/Downloads/virtio-win-1.9.9-3.el8.noarch.rpm
    [...]
    Installed:
      virtio-win-1.9.9-3.el8.noarch

    如果安装成功,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 虚拟机时,使用该文件作为磁盘。
    • 将文件作为光盘添加到现有 Windows 虚拟机中。例如:

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

其它资源

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

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

先决条件

流程

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

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

    Virtio win 安装程序 2
  6. 在 Custom Setup 窗口中,选择您要安装的设备驱动程序。推荐的驱动程序集是自动选择的,驱动程序的描述会显示在列表右边。
  7. 点下 一步,然后点 Install
  8. 安装完成后,点完成
  9. 重启虚拟机以完成驱动程序安装。

验证

  1. This PC 中,打开系统磁盘。这通常是 (C:)
  2. Program Files 目录中,打开 Virtio-Win 目录。

    如果 Virtio-Win 目录存在并包含每个所选驱动程序的子目录,则安装可以成功。

    virtio win installer 3

其它资源

  • 您可以使用 Microsoft Windows 安装程序(MSI)命令行界面(CLI)而不是图形界面来安装驱动程序。有关 MSI 的详情,请查看微软文档
  • 如果安装 NetKVM 驱动程序,您可能需要配置 Windows 客户机的网络参数。具体步骤请查看 第 17.2.3 节 “配置 NetKVM 驱动程序参数”

17.2.2. 启用 Hyper-Vlightenments

hyper-Vlightenments 为 KVM 提供了一个模拟 Microsoft Hyper-V 管理程序的方法。这提高了 Windows 虚拟机的性能。

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

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

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

流程

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

    # virsh edit windows-vm
  2. 在 XML 中添加以下行:

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <frequencies state='on'/>
    </hyperv>
  3. 按如下方式更改配置的 clock 部分:

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

验证

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

    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <runtime state='on' />
      <synic state='on'/>
      <stimer state='on'/>
      <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描述

evmcs

在 L0(KVM)和 L1(Hyper-V)hypervisor 间实现半虚拟化协议,这样可更快地退出虚拟机监控程序。这个功能只供 Intel 处理器使用。

on, off

frequencies

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

on, off

ipi

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

on, off

no-nonarch-coresharing

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

on, off, auto

reenlightenment

通知何时存在迁移期间才会发生的时间戳计数器(TSC)频率更改。它还允许客户端使用旧的频率,直到准备好切换到新频率。

on, off

relaxed

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

on, off

reset

启用 Hyper-V 重置。

on, off

runtime

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

on, off

spinlock

  • 虚拟机的操作系统用来通知 Hyper-V,调用虚拟处理器试图获取可能由同一分区中另一个虚拟处理器保存的资源。
  • Hyper-V 用于在虚拟机的操作系统中指示在 Hyper-V 显示过量旋转前,应该尝试使用 spinlock 的次数。

on, off

stimer

为虚拟处理器启用合成计时器。请注意,当未提供此浏览功能时,某些 Windows 版本会恢复使用 HPET(甚至 RTC,如果 HPET 不可用时也会使用 RTC),这可能导致大量 CPU 消耗,即使虚拟 CPU 处于闲置状态。

on, off

stimer-direct

当一个过期事件是通过普通中断发送时,启用合成计时器。

on, off.

synic

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

on, off

time

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

  • 基于 MSR 的 82 Hyper-V clock 源(HV_X64_MSR_TIME_REF_COUNT, 0x40000020)
  • 通过 MSR 启用的 TSC83 页(HV_X64_MSR_REFERENCE_TSC, 0x40000021)

on, off

tlbflush

清除虚拟处理器的 TLB。

on, off

vapic

启用虚拟 APIC,它为用户提供了一个对高使用内存的高级编程中断控制器(APIC)寄存器的加速 MSR 访问权限。

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. 找到红帽 VirtIO 以太网适配器。

    1. 在 Device Manager 窗口中,点 Network adapters 旁边的 +
    2. 在网络适配器列表中,双击 Red Hat VirtIO Ethernet Adapter。该设备的属性窗口将打开。
  3. 查看设备参数。

    在 Properties 窗口中点 Advanced 选项卡。

  4. 修改设备参数。

    1. 点击您要修改的参数。此时会显示那个参数的选项。
    2. 根据需要修改选项。

      有关 NetKVM 参数选项的详情,请参考 第 17.2.4 节 “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.ConnectionRate(Mb)

代表每秒(以 MB 为单位)的连接率的整数。Windows 2008 及之后的版本的默认值为 10G(每秒10,000MB)。

Init.Do802.1PQ

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

Init.MTUSize

定义最大传输单元(MTU)的整数。默认值为 1500。从 500 到 65500 的值都可以接受。

Init.MaxTxBuffers

代表将被分配的 TX 环描述符数的整数。

默认值为 1024。

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

Init.MaxRxBuffers

代表将要分配的 RX 环描述符数的整数。

默认值为 256。

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

Offload.Tx.Checksum

指定 TX checksum 卸载模式。

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

* All(默认),为 IPv4 和 IPv6 都启用 IP、TCP 和 UDP checksum offloading

* TCP/UDP(v4,v6) ,为 IPv4 和 IPv6 都启用 TCP 和 UDP checksum offloading

* TCP/UDP(v4),只为 IPv4 启用 TCP 和 UDP checksum offloading

* TCP(v4),只为 IPv4 启用 TCP checksum

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

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

警告

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

流程

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

  • 删除未使用的设备,比如 USB 或者 CD-ROM,并禁用端口。
  • 禁用自动 Windows 更新。有关如何进行此操作的更多信息,请参阅 配置组策略设置用于自动更新 配置 Windows 更新 for©

    请注意,对于从微软安装最新的更新和修补程序来说, Windows 更新非常重要。因此,红帽不推荐禁用 Windows 更新

  • 禁用后台服务,如 SuperFetch 和 Windows Search。有关停止服务的详情,请参考禁用系统服务Stop-Service
  • 禁用 useplatformclock。为此,请运行以下命令:

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

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。