虚拟机运行缓慢或CPU模式无法配置host-passthrouph

问题描述

虚拟机创建成功后,运行速度缓慢,且配置CPU模式为host-passthrouph时出现以下报错,如图1所示。

图1 报错信息

可能原因

可能原因一

默认的开源QEMU配置中,kvm配置项为auto,使用默认参数创建虚拟机时,可能并未开启KVM硬件加速。可参考解决方案处理。

可能原因二

与CPU型号有关,当前环境CPU不支持KVM硬件加速功能。

执行virt-host-validate命令查询当前环境CPU是否支持KVM硬件加速功能,若显示如下,表示当前环境不支持KVM硬件加速功能。请咨询相关CPU处理器技术支持人员或更换为支持KVM硬件加速功能的环境解决。

解决方案

修改QEMU章节已执行1~7,则直接执行8

  1. (可选)参考中15安装必要的依赖。
  2. (可选)https://download.qemu.org/下载4.1.0版本的QEMU源码包,并将下载的源码包上传至环境中。
  3. (可选)执行如下命令,修改目录权限。

    chmod +x ./qemu-4.1.0.tar.xz

  4. (可选)执行如下命令,解压QEMU源码包。

    tar -xf ./qemu-4.1.0.tar.xz

  5. (可选)执行如下命令,进入QEMU源码目录。

    cd qemu-4.1.0/

  6. (可选)构建并安装QEMU。

    1. 执行如下命令,配置QEMU的构建环境和构建参数。

      ./configure --enable-kvm

    2. 执行如下命令,启动构建。

      make -j 64

    3. 执行如下命令,安装QEMU。

      make install

  7. (可选)检查QEMU版本。

    1. 执行如下命令,重启libvirtd服务。

      service libvirtd restart

      [root@localhost etc]# service libvirtd restart
      Redirecting to /bin/systemctl restart libvirtd.service
    2. 执行如下命令,关闭AppArmor

      systemctl disable apparmor

      若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/Kylin V10/UOS V20(1050e)/CULinux 3.0/Tlinux3.1/UOS V20(1050u2e)/Kylin V10 SP3/Debian11.8/BC Linux 8.2/Debian10.13/veLinux 1.2系统,可跳过此步骤。

    3. 执行如下命令,重启系统。

      reboot

      若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/Kylin V10/UOS V20(1050e)/CULinux 3.0/Tlinux3.1/UOS V20(1050u2e)/Kylin V10 SP3/Debian11.8/BC Linux 8.2/Debian10.13/veLinux 1.2系统,可跳过此步骤。

    4. 执行如下命令,查看QEMU版本。

      virsh version

      [root@localhost qemu-4.1.0]# virsh version
       Compiled against library: libvirt 6.0.0
       Using library: libvirt 6.0.0
       Using API: QEMU 6.0.0
       Running hypervisor: QEMU 4.1.0

  8. 修改目标虚拟机的配置文本中domian类型和cpu模式。

    1. 执行如下命令,查询虚拟机列表。

      virsh list --all

      [root@localhost ~]# virsh list --all
       Id   Name         State
      ----------------------------
       1    centos      running

      若目标虚拟机回显信息显示状态为“running”,则执行8.b;否则,请直接执行8.c~8.d

    2. (可选)执行如下命令,关闭目标虚拟机。

      virsh shutdown <domain>

      [root@localhost vm]# virsh shutdown centos
      Domain centos is being shutdown
    3. 执行以下命令,打开目标虚拟机的配置文本。

      virsh edit <domian>

    4. 将配置文件中的“domian type”修改为“kvm”,将“cpu mode”修改为“host-passthrough”。
      <domain type='kvm'>
        <name>xxx</name>
        <uuid>xxxxxx</uuid>
        <memory unit='KiB'>xxxx</memory>
        <currentMemory unit='KiB'>xxxx</currentMemory>
        <vcpu placement='static' cpuset=xxxxx</vcpu>
      ......
        <cpu mode='host-passthrough' check='none'>
          <topology sockets='1' cores='20' threads='1'/>
        </cpu>
      ... ...