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。