PVE中 KVM64 和 HOST 的区别

kvm64

kvm64 是一个比较老的通用 CPU 模型,只提供基础的 x86-64 指令集。它不会把宿主机的全部 CPU 功能暴露给虚拟机,因此 AES、AVX 等指令集可能不可用。

它的优点是兼容范围大。集群里的节点使用不同代际的 CPU 时,只要都支持这个基础模型,虚拟机就更容易在节点之间迁移。

缺点也很明显:虚拟机不能使用宿主机的全部指令集,部分依赖硬件加速的软件性能会受到影响。

host

host 会把宿主机的大部分 CPU 特性直接暴露给虚拟机。虚拟机可以使用 AES、AVX 等宿主机支持的指令集,性能通常也是最好的。

host 不是重新模拟一颗相同的 CPU,而是尽量使用宿主机现有的 CPU 能力。因此虚拟机换到另一台机器时,目标机器必须支持当前虚拟机已经使用的指令集。

怎么选择

  • 只有一台 PVE,直接使用 host
  • 集群节点的 CPU 型号和步进完全一致,可以使用 host,但仍要实际测试迁移。
  • 集群里有不同代际的 CPU,选择所有节点都支持的公共 CPU 模型。
  • 需要 HA 或者频繁热迁移时,不要给虚拟机暴露目标节点不支持的指令集。

新版本 PVE 提供了 x86-64-v2-AES 等通用模型。和 kvm64 相比,这些模型能提供更多现代指令集,同时比 host 更容易迁移。具体选择哪个,以集群里最老的 CPU 为准。

查看和修改

查看虚拟机当前的 CPU 配置:

qm config <VMID> | grep '^cpu:'

改成 host

qm set <VMID> --cpu host

改成通用模型:

qm set <VMID> --cpu x86-64-v2-AES

修改 CPU 类型后应完全关闭虚拟机再启动,只在虚拟机内部重启不一定会应用新的 CPU 特性。

热迁移前可以先在目标节点启动一台使用相同 CPU 模型的测试虚拟机。只看 CPU 名称不够,还要确认目标节点支持相同的 Flags。

创建时间:2023-05-08
最后修改:2023-05-08

反馈