9.16. 虚拟化
使用大量队列可能会导致 Windows 虚拟机失败
当启用了虚拟可信平台模块(vTPM)设备,且将 multi-queue virtio-net 功能配置为使用超过 250 个队列时,Windows 虚拟机(VM)可能会失败。
这个问题是由 vTPM 设备的限制造成的。vTPM 设备对打开的文件描述符的最大数有一个硬编码的限制。因为会为每个新队列打开多个文件描述符,因此可能会超过内部 vTPM 的限值,从而导致虚拟机失败。
要临时解决这个问题,请选择以下两个选项之一:
- 保持 vTPM 设备启用,但使用少于 250 个队列。
- 禁用 vTPM 设备以使用超过 250 个队列。
Jira:RHEL-13336[1]
在 AMD Milan 系统上有时无法提供 Milan
VM CPU 类型
在某些 AMD Milan 系统上,默认在 BIOS 中禁用了增强 REP MOVSB(erms
)和 Fast Short REP MOVSB(fsrm
)功能标记。因此,在这些系统上可能无法使用 Milan
CPU 类型。另外,在具有不同功能标志设置的 Milan 主机之间的虚拟机实时迁移可能会失败。要临时解决这个问题,在主机的 BIOS 中手动打开 erms
和 fsrm
。
Bugzilla:2077770[1]
当在 AMD EPYC 上使用主机透传模式时,虚拟机不会检测到 SMT CPU 拓扑
当在AMD EPYC 主机上以CPU主机直通模式引导虚拟机(VM)时,不会显示TOPOEXT
CPU 功能标志。因此,虚拟机无法检测到每个内核有多个线程的虚拟 CPU 拓扑。要临时解决这个问题,使用 EPYC CPU 模型而不是主机透传引导虚拟机。
使用 virtio-blk 将 LUN 设备附加到虚拟机中无法正常工作
q35 机器类型不支持 virtio 1.0 设备,因此 RHEL 8 不支持 virtio 1.0 中弃用的功能。特别是,RHEL 8 主机无法从 virtio-blk 设备发送 SCSI 命令。因此,使用 virtio-blk 控制器时,将物理磁盘作为 LUN 设备附加到虚拟机会失败。
请注意,物理磁盘仍可被传递给客户端操作系统,但应该使用 device='disk'
选项而不是 device='lun'
选项进行配置。
Bugzilla:1777138[1]
当使用很多 virtio-blk 磁盘时,虚拟机有时无法启动
在虚拟机(VM)中添加大量 virtio-blk 设备可能会耗尽平台中可用的中断向量。如果发生了这种情况,VM 的客户机操作系统无法引导,并显示 dracut-initqueue[392]: Warning: Could not boot
错误。
带有 iommu_platform=on
的虚拟机无法在 IBM POWER 上启动
RHEL 8 目前不支持 IBM POWER 系统上的虚拟机(VM)的 iommu_platform=on
参数。因此,在 IBM POWER 硬件上启动使用这个参数的虚拟机会导致虚拟机在引导过程中变得无响应。
在使用 ibmvfc
驱动程序时,IBM POWER 主机现在可以正常工作
当在 PowerVM 逻辑分区(LPAR)上运行 RHEL 8 时,以前可能会因为 ibmvfc
驱动程序的问题而发生各种错误。因此,在某些情况下,主机上会触发内核 panic,例如:
- 使用 Live Partition Mobility(LPM)功能
- 重置主机适配器
- 使用 SCSI 错误处理(SCSI EH)功能
有了此更新,ibmvfc
的处理已被修复,上面描述的内核 panics 不再发生。
Bugzilla:1961722[1]
在 IBM POWER 系统中使用 perf kvm record
可能会导致虚拟机崩溃
当在 IBM POWER 硬件的 little-endian 变体中使用 RHEL 8 主机时,使用 perf kvm record
命令为 KVM 虚拟机(VM)收集追踪事件样本会导致虚拟机变得没有响应。在以下情况下发生这种情况:
-
perf
工具由非特权用户使用,-p
选项用来标识虚拟机 - 例如perf kvm record -e trace_cycles -p 12345
。 -
虚拟机是使用
virsh
shell 启动的。
要临时解决这个问题,请使用带有-i
选项的 perf kvm
工具来监控使用 virsh
shell 创建的虚拟机。例如:
# perf kvm record -e trace_imc/trace_cycles/ -p <guest pid> -i
请注意,在使用 -i
选项时,子任务不会继承计数器,因此线程不会被监控。
Bugzilla:1924016[1]
带有启用 Hyper-V 的 Windows Server 2016 虚拟机无法引导
目前,无法引导使用 Windows Server 2016 作为客户端操作系统的虚拟机,它启用了 Hyper-V 角色,并使用以下 CPU 模型之一:
- EPYC-IBPB
- EPYC
要临时解决这个问题,使用 EPYC-v3 CPU 模型,或者为虚拟机手动启用 xsaves CPU 标记。
Bugzilla:1942888[1]
将 POWER9 客户端从 RHEL 7-ALT 主机迁移到 RHEL 8 会失败
目前,将 POWER9 虚拟机从 RHEL 7-ALT 主机系统迁移到 RHEL 8 会变得没有响应,显示Migration status: active
状态)。
要临时解决这个问题,在 RHEL 7-ALT 主机上禁用 Transparent Huge Pages(THP),这样可使迁移成功完成。
Bugzilla:1741436[1]
使用 virt-customize
有时会导致 guestfs-firstboot
失败
使用 virt-customize
工具修改了虚拟机(VM)磁盘镜像后,guestfs-firstboot
服务在某些情况下会因为 SELinux 权限不正确而失败。这会导致虚拟机启动过程中出现各种问题,如创建用户失败或系统注册失败。
要避免这个问题,请使用带有 --selinux-relabel
选项的 virt-customize
命令。
从 macvtap 虚拟网络中删除转发接口会重置这个网络的所有连接计数
目前,从带有多个转发接口的 macvtap
虚拟网络中删除一个转发接口也会重置网络的其他转发接口的连接状态。因此,实时网络 XML 中的连接信息是不正确的。但请注意,这不会影响虚拟网络的功能。要临时解决这个问题,请重启主机上的 libvirtd
服务。
带有 SLOF 的虚拟机无法在 netcat 界面中引导
当使用 netcat(nc
)接口来访问当前在 Slimline Open Firmware(SLOF)提示符下等待的虚拟机控制台时,用户输入会被忽略,虚拟机仍无响应。要临时解决这个问题,请在连接虚拟机时使用 nc -C
选项,或者使用 telnet 接口。
Bugzilla:1974622[1]
在某些情况下,在 virt-manager
中将中介设备附加到虚拟机会失败
virt-manager
应用程序目前能够检测中介设备,但不能识别该设备是否处于活跃状态。因此,尝试使用 virt-manager
将不活跃的中介设备附加到正在运行的虚拟机(VM)会失败。同样,尝试使用不活跃的中介设备创建新虚拟机会失败,并显示 device not found
错误。
要临时解决这个问题,请使用 virsh nodedev-start
或 mdevctl start
命令来激活中介设备,然后再在 virt-manager
中使用它。
RHEL 9 虚拟机无法在 POWER8 兼容模式下启动
目前,如果虚拟机也使用类似如下的 CPU 配置,启动将 RHEL 9 作为客户机操作系统来运行的虚拟机(VM)会失败:
<cpu mode="host-model"> <model>power8</model> </cpu>
要临时解决这个问题,请不要在 RHEL 9 虚拟机中使用 POWER8 兼容性模式。
另外,请注意,在 POWER8 主机上无法运行 RHEL 9 虚拟机。
在 virtiofs
上不会自动清除 SUID 和 SGID
当您使用 killpriv_v2
功能运行 virtiofsd
服务时,您的系统在执行某些文件系统操作后可能无法自动清除 SUID 和HMC 权限。因此,不能清除权限可能会导致潜在的安全威胁。要临时解决这个问题,请输入以下命令禁用 killpriv_v2
功能:
# virtiofsd -o no_killpriv_v2
Bugzilla:1966475[1]
在主机上重启 OVS 服务可能会阻止在其上运行的虚拟机的网络连接
当 Open vSwitch (OVS)服务在主机上重启时或崩溃时,在此主机上运行的虚拟机(VM)无法恢复网络设备的状态。因此,虚拟机可能无法完全接收数据包。
此问题只会影响在 virtio
网络堆栈中使用压缩 virtqueue 格式的系统。
要临时解决这个问题,使用 virtio
网络设备定义中的 packed=off
参数来禁用压缩的 virtqueue。当禁用压缩的 virtqueue 时,网络设备的状态在某些情况下可以从 RAM 中恢复。
nodedev-dumpxml
无法正确列出某些介质设备的属性
目前,nodedev-dumpxml
无法正确列出使用 nodedev-create
命令创建的介质设备的属性。要临时解决这个问题,请使用 nodedev-define
和 nodedev-start
命令。
启动带有 NVIDIA A16 GPU 的虚拟机有时会导致主机 GPU 停止工作
目前,如果您启动了一个使用 NVIDIA A16 GPU 直通设备的虚拟机,在某些情况下,主机系统上的 NVIDIA A16 GPU 物理设备会停止工作。
要临时解决这个问题,请重新 hypervisor ,并将 GPU 设备的 reset_method
设置为 bus
:
# echo bus > /sys/bus/pci/devices/<DEVICE-PCI-ADDRESS>/reset_method # cat /sys/bus/pci/devices/<DEVICE-PCI-ADDRESS>/reset_method bus
详情请查看 红帽知识库。
Jira:RHEL-2451[1]