问题现象
在 AMD CPU上通过VMWare 虚拟出来的虚拟机中继续通过 qemu 进行嵌套启动虚拟机时报错,报错信息如下:
root@centos:~$ qemu-system-x86_64 -cpu "host,pmu=off" -enable-kvm
MoTTY X11 proxy: Unsupported authorisation protocol
Unable to init server: Could not connect: Connection refused
qemu-system-x86_64: error: failed to set MSR 0xe1 to 0x0
qemu-system-x86_64: /build/qemu-BQ4hMP/qemu-4.2/target/i386/kvm.c:2691: kvm_buf_set_msrs: Assertion `ret == cpu->kvm_msr_buf->nmsrs' failed.
Aborted
解决方案
1.运行下面命令,创建配置文件/etc/modprobe.d/qemu-system-x86.conf
sudo tee /etc/modprobe.d/qemu-system-x86.conf << EOF
options kvm ignore_msrs=1
EOF
2.重启 reboot
问题原因
根据网页 https://patchwork.kernel.org/patch/42605/ 中的内容来看,这个配置并没有真正解决问题,只是通过配置这个参数可以使 kvm 忽略相关错误。
当模块参数 ignore_msrs 设置为1时,未知 MSR 读取将返回0,并且 MSR 写入将被丢弃。
同时在这两种情况下会向dmesg打印一条消息,以告知用户有关信息。