我尝试使用 KVM 和 QEMU 安装我的第一个虚拟机,但它似乎确实按预期使用了硬件加速。我得出这个结论首先是因为它非常慢,其次是因为
$lsmod | grep kvm
kvm_intel 180224 0
kvm 708698 1 kvm_intel
irqbypass 13284 1 kvm
机器运行时,kvm_intel的值应该是1,对吗?
我的主机是运行 Arch Linux 的 Dell XPS 13(当然最近更新过)。客户系统也是 Arch。两者都是 64 位。
我检查了所有我发现的https://wiki.archlinux.org/index.php/KVM最后,我的硬件支持虚拟化:
$'LC_ALL=C lscpu | grep Virtualization
Virtualization: VT-x
并且内核模块已被包含并加载:
$zgrep CONFIG_KVM /proc/config.gz
CONFIG_KVM_GUEST=y
# CONFIG_KVM_DEBUG_FS is not set
CONFIG_KVM_MMIO=y
CONFIG_KVM_ASYNC_PF=y
CONFIG_KVM_VFIO=y
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
CONFIG_KVM_COMPAT=y
CONFIG_KVM=m
CONFIG_KVM_INTEL=m
CONFIG_KVM_AMD=m
CONFIG_KVM_AMD_SEV=y
CONFIG_KVM_MMU_AUDIT=y
virtio 也是如此
$zgrep VIRTIO /proc/config.gz
CONFIG_BLK_MQ_VIRTIO=y
CONFIG_VIRTIO_VSOCKETS=m
CONFIG_VIRTIO_VSOCKETS_COMMON=m
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=m
# CONFIG_VIRTIO_BLK_SCSI is not set
CONFIG_SCSI_VIRTIO=m
CONFIG_VIRTIO_NET=m
CONFIG_CAIF_VIRTIO=m
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_DRM_VIRTIO_GPU=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_INPUT=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_RPMSG_VIRTIO=m
CONFIG_CRYPTO_DEV_VIRTIO=m
检查是否已加载(查看 kvm 顶部):
$lsmod | grep virtio
virtio 16384 0
再次,virtio 似乎未被使用。我的理解正确吗?
我还检查了 BIOS 中是否启用了虚拟化支持(戴尔今年 2 月提供的最新 A15 版本),并且一直都是这样。
该用户位于 kvm 组中(安装虚拟机时该组并不在该组中,这可能是问题所在吗?)
我找到的页面https://warpedtimes.wordpress.com/2010/01/06/hardware-accelerated-virtualization-with-qemu-and-kvm/ 鼓励我思考问题出在哪里,但提出的问题都不适用。我也没有收到 QEMU 的错误消息,也没有在 dmesg 中看到任何与 kvm 或 virtio 相关的内容。
网络运行良好,分辨率类似 VGA,但我尚未对此进行调查。所以这可能是配置问题。
磁盘文件是原始的,我使用 -m 1024 选项启动虚拟机。启动模式是旧式的(我无法弄清楚如何让 kvm 在 uefi 模式下启动)。
有人知道我的问题是什么吗?还有其他方法可以检查硬件加速是否真的有效吗?但它真的非常慢。启动和运行都一样。我的 Virtualbox 中的 Windows 运行速度要快得多。可能还有其他问题吗?
有人知道我的问题是什么吗?我发布了我认为可能有趣的所有信息。您需要更多信息吗?
提前致谢
答案1
我确实在网上搜索了很长时间才找到答案,但没有找到解决方案。正如经常发生的那样:一旦被问到,你很快就会得到解决方案:
启动机器时,我必须通过添加选项明确告诉 QEMU 使用 KVM
-machine type=pc,accel=kvm
现在我获得了更快的虚拟机,
$lsmod | grep kvm
kvm_intel 180224 3
kvm 708608 1 kvm_intel
irqbypass 16384 1 kvm
然而 virtio 仍然是 0
我仍然不明白为什么这是必要的,因为到目前为止我读到的所有内容都暗示或明确指出 qemu 默认尝试使用 kvm(并在失败时抛出错误)。因此,如果有人知道为什么对我来说不是这种情况,我仍然会很感激。