今天和大家分享一个在运维日常开发使用虚拟机时经常出现的问题-CPU指令报错。


现象:

在KVM的虚拟机上测试AVX,AVX2和AVX-512的速度发现报错,用到的avx的程序都提示非法指令。

关于虚拟机使用CPU指令报错(一)_CPU指令

原因:

由于在虚拟化层没有将CPU对应指令映射到虚拟机上;


解决办法:

云主机需要修改CPU模式为透传,当然也可以将指定的指令映射到虚拟机上;


解决步骤:

1、找到对应云主机的所属物理机,修改xml文件;

2、修改CPU模式。

cpu mode = 'custom' 修改为 cpu mode='host-passthrough'

关于虚拟机使用CPU指令报错(一)_CPU指令_02关于虚拟机使用CPU指令报错(一)_虚拟化_03

最后分享下CPU模式介绍:

custom自己定义(默认);

host-model(根据物理CPU的特性,选择一个最靠近的标准CPU型号,如果没有指定CPU模式,默认这种模式);

host-passthrough(直接将物理CPU 暴露给虚拟机使用,在虚拟机上完全可以看到的就是物理CPU的型号);

三种mode的性能排序是:host-passthrough>host-model>custom三种mode的热迁移通用性是:custom>host-model>host-passthrough

以上就是今天的内容,希望读者朋友看完这篇文章后有所启发。