我遇到了这个问题。我有一个 ryzen 系统(Ubuntu 24.04),我查看了 BIOS 设置,发现 SVM 已启用。
我按照此页面上的初始步骤安装了 KVM,但在第 4 步执行时sudo systemctl status libvirtd
,我得到:
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-01-05 12:52:55 EST; 1min 5s ago
TriggeredBy: ● libvirtd-ro.socket
● libvirtd.socket
● libvirtd-admin.socket
Docs: man:libvirtd(8)
https://libvirt.org/
Main PID: 8460 (libvirtd)
Tasks: 22 (limit: 32768)
Memory: 20.7M (peak: 25.7M)
CPU: 413ms
CGroup: /system.slice/libvirtd.service
├─1484 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/li>
├─1485 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/li>
└─8460 /usr/sbin/libvirtd --timeout 120
Jan 05 12:52:55 linux-mini systemd[1]: Starting libvirtd.service - libvirt legacy monolithic daemon...
Jan 05 12:52:55 linux-mini systemd[1]: Started libvirtd.service - libvirt legacy monolithic daemon.
Jan 05 12:52:55 linux-mini dnsmasq[1484]: read /etc/hosts - 8 names
Jan 05 12:52:55 linux-mini dnsmasq[1484]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 names
Jan 05 12:52:55 linux-mini dnsmasq-dhcp[1484]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Jan 05 12:52:55 linux-mini libvirtd[8460]: libvirt version: 10.0.0, package: 10.0.0-2ubuntu8.5 (Ubuntu)
Jan 05 12:52:55 linux-mini libvirtd[8460]: hostname: linux-mini
Jan 05 12:52:55 linux-mini libvirtd[8460]: Unable to open /dev/kvm: No such file or directory
因此有某些因素阻止 kvm 启动(?——不确定是否正确)。
sudo dmesg | grep kvm
显示:
[ 4.403905] kvm_amd: NX (Execute Disable) not supported
[ 409.676621] kvm_amd: NX (Execute Disable) not supported
我不知道这告诉我什么。 lsmod | grep kvm
显示:
kvm 1404928 0
irqbypass 12288 1 kvm
我正在尝试运行 Android 模拟器,但这显然阻止了这一切的发生。欢迎任何指点。
KVM 拒绝工作,因为处理器目前不允许将内存区域标记为不可执行(换句话说:仅用作数据,而不是程序代码),这是针对各种安全漏洞的重要保护措施。除了在 AMD 处理器上启用 AMD-V/SVM之外,这是现代 KVM 的另一项要求。
在评论中,您提到您的处理器是 AMD Ryzen 7 5700U,这是后 Spectre/Meltdown 时代的处理器,因此它肯定具有 NX 功能。但此功能可以通过 BIOS 设置启用/禁用。
Reddit 上的这篇文章提到有同样的问题,但最后的 EDIT:表明启用名为NX 模式的 BIOS 设置可以解决问题。
因此,请检查您的 BIOS 设置中是否有“NX”或类似名称,因为不同供应商的 BIOS 设置名称可能有所不同。在 Windows 中,使用此 CPU 功能的操作系统功能称为数据执行保护 (DEP);我猜 BIOS 程序员可能也使用过这个名称。
如果似乎无法启用 NX 处理器功能,请查看系统供应商是否提供任何 BIOS 更新。没有 NX 功能是一个明显的缺点,供应商会希望尽快修复这个问题。