在模拟计算机中运行的来宾操作系统访问这些设备,并像在真实硬件上运行一样运行。例如,您可以将 ISO 映像作为参数传递给 Qemu,在模拟计算机中运行的操作系统将看到插入 CD 驱动器的真实 CD-ROM。
Qemu 可以模拟从 ARM 到 Sparc 的多种硬件,但 Proxmox VE 只关注 32 位和 64 位 PC 克隆模拟,因为它代表了绝大多数服务器硬件。由于处理器扩展的可用性,当模拟架构与主机架构相同时,PC 克隆的仿真也是最快的之一。
您有时可能会遇到术语KVM(基于内核的虚拟机)。这意味着 Qemu 通过 Linux KVM 模块在虚拟化处理器扩展的支持下运行。在 Proxmox VE 的上下文中,Qemu和 KVM可以互换使用,因为 Proxmox VE 中的 Qemu 将始终尝试加载 KVM 模块。
Proxmox VE 中的 Qemu 作为根进程运行,因为这是访问块和 PCI 设备所必需的。
仿真设备和半虚拟化设备
Qemu 模拟的 PC 硬件包括主板、网络控制器、SCSI、IDE 和 SATA 控制器、串行端口(完整列表可以在kvm(1)手册页中看到),所有这些都在软件中进行了模拟。所有这些设备都是与现有硬件设备完全等效的软件,如果来宾中运行的操作系统具有适当的驱动程序,它将像在真实硬件上运行一样使用这些设备。这允许 Qemu 运行未经修改的操作系统。
然而,这会带来性能成本,因为在软件中运行本应在硬件中运行的内容涉及主机 CPU 的大量额外工作。为了缓解这种情况,Qemu 可以呈现给来宾操作系统半虚拟化设备,其中来宾操作系统识别出它在 Qemu 内部运行并与管理程序合作。
如果您希望 Proxmox VE 备份管理器在备份 VM 时跳过磁盘,您可以在该磁盘上设置无备份选项。默认设置是备份VM时同时备份磁盘。
如果您希望 Proxmox VE 存储复制机制在启动复制作业时跳过磁盘,您可以在该磁盘上设置跳过复制选项。从 Proxmox VE 5.0 开始,复制要求磁盘映像位于zfspool类型的存储上 ,因此当 VM 配置了复制时,将磁盘映像添加到其他存储需要跳过此磁盘映像的复制。默认设置是复制时不跳过磁盘。
修剪/丢弃
如果您的存储支持精简配置(请参阅 Proxmox VE 指南中的存储章节),您可以激活驱动器上的丢弃选项。使用Discard set 和启用TRIM 的来宾操作系统[ 30 ],当 VM 的文件系统在删除文件后将块标记为未使用时,控制器会将此信息转发到存储,然后存储将相应地缩小磁盘映像。为了让来宾能够发出TRIM命令,您必须在驱动器上启用Discard选项。某些客户操作系统可能还需要设置 SSD 仿真标志。需要注意的是丢弃的 VirtIO Block 只有使用 Linux 内核 5.0 或更高版本的来宾才支持驱动器。
一个CPU插座是PC主板,你可以插入一个CPU上的物理插槽。然后,该 CPU 可以包含一个或多个内核,这些内核是独立的处理单元。从性能的角度来看,无论您是拥有单个 4 核 CPU 插槽还是两个具有两个核心的 CPU 插槽,几乎都无关紧要。但是,某些软件许可证取决于机器拥有的插槽数,在这种情况下,将插槽数设置为许可证允许的数量是有意义的。
增加虚拟 CPU(核心和插槽)的数量通常会提高性能,尽管这在很大程度上取决于 VM 的使用。多线程应用程序当然会受益于大量的虚拟 CPU,对于您添加的每个虚拟 CPU,Qemu 将在主机系统上创建一个新的执行线程。如果您不确定 VM 的工作负载,通常将总内核数设置为 2 是一个安全的选择。
如果所有 VM的总内核数大于服务器上的内核数(例如,在只有 8 个内核的机器上有 4 个 VM,每 VM 4 个内核),这是完全安全的。在这种情况下,主机系统将平衡服务器内核之间的 Qemu 执行线程,就像您正在运行标准的多线程应用程序一样。但是,Proxmox VE 会阻止您启动虚拟 CPU 内核多于物理可用内核的 VM,因为这只会由于上下文切换的成本而降低性能。
资源限制
除了虚拟内核的数量之外,您还可以配置一个虚拟机可以获得多少与主机 CPU 时间以及其他虚拟机相关的资源。使用cpulimit(“主机 CPU 时间”)选项,您可以限制整个 VM 在主机上可以使用的 CPU 时间。它是一个浮点值,以百分比表示 CPU 时间,因此1.0等于100%,2.5到250%等等。如果单个进程将完全使用一个单核,则CPU 时间使用率为 100%。如果具有四个内核的 VM 充分利用其所有内核,则理论上将使用400%. 实际上,使用率甚至可能更高一些,因为除了 vCPU 核心线程之外,Qemu 还可以为 VM 外围设备提供额外的线程。如果 VM 应该有多个 vCPU,则此设置很有用,因为它并行运行几个进程,但整个 VM 不应能够同时 100% 运行所有 vCPU。举一个具体的例子:假设我们有一个虚拟机,它可以从拥有 8 个 vCPU 中受益,但是这 8 个核心在任何时候都不应全负载运行 - 因为这会使服务器超载,以至于其他虚拟机和 CT 将无法更少的 CPU。因此,我们将cpulimit限制设置为 4.0 (=400%)。如果所有内核都做同样繁重的工作,它们都将获得 50% 的真实主机内核 CPU 时间。但是,如果只有 4 个可以工作,他们每个人仍然可以获得几乎 100% 的真实内核。
VM 可以根据其配置使用额外的线程,例如用于网络或 IO 操作以及实时迁移。因此,VM 可能会使用比其虚拟 CPU 所能使用的更多的 CPU 时间。为确保 VM 使用的 CPU 时间永远不会超过分配的虚拟 CPU,请将cpulimit设置设置为与总内核数相同的值。
第二个 CPU 资源限制设置cpuunits(现在通常称为 CPU 份额或 CPU 权重)控制 VM 相对于其他正在运行的 VM 获得的 CPU 时间。这是一个相对权重,默认为1024,如果您为 VM 增加此值,调度程序将优先考虑与其他权重较低的 VM 相比。例如,如果 VM 100 已设置默认值 1024 并且 VM 200 更改为2048,则后一个 VM 200 将获得两倍于第一个 VM 100 的 CPU 带宽。
CPU类型
Qemu 可以模拟从 486 到最新的 Xeon 处理器的多种不同CPU 类型。每代新处理器都会增加新功能,例如硬件辅助 3D 渲染、随机数生成、内存保护等……功能(也称为CPU 标志)将在您的 VM 中可用。如果您想要完全匹配,您可以将 CPU 类型设置为 host,在这种情况下,VM 将具有与您的主机系统完全相同的 CPU 标志。
但这有一个缺点。如果您想在不同主机之间进行 VM 的实时迁移,您的 VM 可能会在具有不同 CPU 类型的新系统上结束。如果传递给来宾的 CPU 标志丢失,qemu 进程将停止。为了解决这个问题,Qemu 也有自己的 CPU 类型 kvm64,Proxmox VE 默认使用它。kvm64 看起来很像 Pentium 4 CPU 类型,它设置了减少的 CPU 标志,但保证可以在任何地方工作。
简而言之,如果您关心节点之间的实时迁移和移动虚拟机,请保留 kvm64 默认值。如果您不关心实时迁移或拥有所有节点都具有相同 CPU 的同构集群,请将 CPU 类型设置为 host,因为理论上这将为您的来宾提供最大性能。
Proxmox VE 将为每个 NIC 生成一个随机MAC 地址,以便您的 VM 可在以太网网络上寻址。
您添加到 VM 的 NIC 可以遵循以下两种不同模型之一:
在默认的桥接模式下,每个虚拟 NIC 都由一个Tap 设备(模拟以太网 NIC 的软件环回设备)支持在主机上 。这个 tap 设备被添加到一个网桥,默认情况下 Proxmox VE 中的 vmbr0。在这种模式下,VM 可以直接访问主机所在的以太网 LAN。
在备用NAT 模式下,每个虚拟 NIC 将仅与 Qemu 用户网络堆栈通信,其中内置路由器和 DHCP 服务器可以提供网络访问。此内置 DHCP 将为私有 10.0.2.0/24 范围内的地址提供服务。NAT 模式比桥接模式慢得多,只能用于测试。此模式仅可通过 CLI 或 API 使用,而不能通过 WebUI 使用。
您还可以通过选择 No network device 在创建 VM 时跳过添加网络设备。
Multiqueue
如果您使用的是 VirtIO 驱动程序,您可以选择激活 Multiqueue选项。此选项允许来宾操作系统使用多个虚拟 CPU 处理网络数据包,从而增加传输的数据包总数。
在 Proxmox VE 中使用 VirtIO 驱动程序时,每个 NIC 网络队列都被传递到主机内核,在那里队列将由 vhost 驱动程序产生的内核线程处理。激活此选项后,可以将多个 网络队列传递给每个 NIC 的主机内核。
使用 Multiqueue 时,建议将其设置为等于来宾的 Total Cores 数的值。您还需要使用 ethtool 命令在 VM 中设置每个 VirtIO NIC 上的多用途通道数:
ethtool -L ens1 combined X
其中 X 是 VM 的 vcpus 数量。
您应该注意,将 Multiqueue 参数设置为大于 1 的值会随着流量的增加而增加主机和来宾系统上的 CPU 负载。我们建议仅当 VM 必须处理大量传入连接时才设置此选项,例如当 VM 作为路由器、反向代理或繁忙的 HTTP 服务器执行长轮询时。
USB直通
USB 直通设备有两种不同类型:
主机 USB 直通
SPICE USB 直通
主机 USB 直通通过为 VM 提供主机的 USB 设备来工作。这可以通过供应商和设备 ID 或通过主机总线和端口来完成。
供应商/设备 ID 如下所示:0123:abcd,其中0123是供应商的 id,abcd是设备的 id,这意味着同一 USB 设备的两个部分具有相同的 id。
总线/端口如下所示:1-2.3.4,其中1是总线,2.3.4是端口路径。这代表主机的物理端口(取决于 USB 控制器的内部顺序)。
如果 VM 启动时 VM 配置中存在设备,但主机中不存在该设备,则 VM 可以毫无问题地启动。一旦设备/端口在主机中可用,它就会通过。
使用这种 USB 直通意味着您无法将 VM 联机移动到另一台主机,因为硬件仅在 VM 当前所在的主机上可用。
第二种直通类型是 SPICE USB 直通。如果您使用支持它的 SPICE 客户端,这将非常有用。如果向 VM 添加 SPICE USB 端口,则可以将 SPICE 客户端所在的 USB 设备直接传递到 VM(例如输入设备或硬件加密狗)。
BIOS 和 UEFI
为了正确模拟计算机,QEMU 需要使用固件。这在通常称为 BIOS 或 (U)EFI 的普通 PC 上作为启动 VM 时的第一步执行。它负责进行基本的硬件初始化,并为操作系统提供固件和硬件的接口。默认情况下,QEMU为此使用SeaBIOS,这是一个开源的 x86 BIOS 实现。SeaBIOS 是大多数标准设置的不错选择。