KVM CPU 模型选择
CPU 模型决定 guest 里能看到哪些指令集与 CPU 特性。host-passthrough 把宿主 CPU 特性整体透传,性能最好但 guest 依赖具体硬件;host-model 跟随宿主但按虚拟化环境做收敛;自定义模型则在一组型号之间取交集,用于保证跨代宿主可迁移。模型选择直接决定迁移兼容性与 guest 内应用能否使用新指令集。
基本信息
| 查看可用模型 | virsh cpu-models x86_64 列出 libvirt 已知的 CPU 型号 |
|---|---|
| 常用模式 | host-passthrough(性能优先)、host-model(跟随宿主)、custom(自定义基线) |
| 迁移权衡 | 跨代宿主迁移要用各代都支持的基线模型,或统一宿主硬件 |
| 检查手段 | virsh domcapabilities 查看与宿主匹配的可用模型与特性 |
| 生效方式 | 修改 CPU 模型属于结构性变更,通常需关机后启动 |
典型使用场景
- 新集群规划:统一 CPU 模型,避免日后迁移才发现不兼容
- 跨代宿主迁移:用较旧一代的基线模型作为公共交集
- 性能优先场景:单机运行且不迁移时用 host-passthrough
- 兼容老旧系统:虚拟机需要特定 CPU 型号时用手工模型
- 排障对比:怀疑指令集问题时切换模型后复测
查看与配置
查看与配置
# 域 XML 中的配置片段
# <cpu mode='host-passthrough' check='none'/>
virsh cpu-models x86_64 # 列出可用模型
virsh domcapabilities | grep -A2 host-passthrough
virsh dumpxml vm1 | grep -A5 '<cpu ' # 查看当前生效的模型模式对比
| 模式 | 行为 | 适用 |
|---|---|---|
| host-passthrough | 原样透传宿主 CPU 特性 | 单机或同批硬件内,性能优先 |
| host-model | 按宿主推导并适配虚拟化环境 | 希望兼顾特性与一定迁移性 |
| custom | 使用指定型号加特性开关 | 跨代宿主、要求可迁移的集群 |
同集群内建议统一 CPU 模型,避免迁移后 guest 内应用意外使用新指令集导致不兼容。
CPU 模型的可见特性还受宿主固件与内核参数影响:同一台机型不同内核版本可能给出不同的特性集合,规划时以 domcapabilities 的实际输出为准。
改完模型后进 guest 用 lscpu 或 /proc/cpuinfo 核对实际可见特性,与域定义比对,才能确认模型真的生效。