解决 AMD CPU 使用 VMWare 在嵌套虚拟化中用 qemu 启动虚拟机提示 Assertion ret == cpu-kvm_msr_buf-nmsrs failed

问题现象

AMD CPU上通过VMWare 虚拟出来的虚拟机中继续通过 qemu 进行嵌套启动虚拟机时报错,报错信息如下:

core@ubuntu20-dev:~$ sudo 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
  1. 重启 sudo reboot
  2. 尽情玩耍吧~

问题原因

根据网页 https://patchwork.kernel.org/patch/42605/ 中的内容来看,这个配置并没有真正解决问题,只是通过配置这个参数可以使 kvm 忽略相关错误。但这个解决方案对我来说可以接受。

当模块参数 ignore_msrs 设置为1时,未知 MSR 读取将返回0,并且 MSR 写入将被丢弃。
同时在这两种情况下会向dmesg打印一条消息,以告知用户有关信息。

参考链接:

  • https://patchwork.kernel.org/patch/42605/
  • https://stackoom.com/question/3Yxnv/VMWare%E5%B7%A5%E4%BD%9C%E7%AB%99Ubuntu-Minikube-%E5%88%9B%E5%BB%BAVM%E6%97%B6%E5%87%BA%E9%94%99

你可能感兴趣的:(虚拟化,kata-containers,docker,kata-containers,kvm,qemu,vmware,assertion)