![QEMU 与 KVM 具有不同的主机/客户架构](https://linux22.com/image/104270/QEMU%20%E4%B8%8E%20KVM%20%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%E4%B8%BB%E6%9C%BA%2F%E5%AE%A2%E6%88%B7%E6%9E%B6%E6%9E%84.png)
我的客户操作系统是 x86(.vmdk 格式),从 QEMU 文档看来,由于我的主机是 ARM Raspberry Pi 3,即使在内核中启用 KVM 后,我也无法利用 KVM。
那是对的吗?
答案1
运行虚拟机的简单方法是解释每条指令。 VM软件解码每条指令并运行它。
当虚拟机的指令集与主机相同时,另一种方法是简单地执行指令。只有少数指令无法直接执行,因为来宾无法完全控制硬件。一个棘手的问题是内存访问:来宾无法访问整个内存,因此需要对地址执行转换。高端 CPU,例如具有 VT-x (Intel) 或 AMD-V (AMD) 扩展的 x86 CPU,或 ARM Cortex-A15 及更高版本(包括 Pi 2 和 Pi 3),具有执行此地址的硬件功能翻译。 KVM 是 Linux 内核的一个组件,它利用这些指令来允许本机处理器直接执行虚拟机中的代码。
这对您没有帮助,因为您并没有尝试在 ARM CPU 上执行 ARM 代码,或在 x86 CPU 上执行 x86 代码。您想要在 ARM CPU 上执行 x86 代码。为此,需要解码和解释指令的软件。 KVM 在这里没有帮助。
答案2
您可以在内核中启用 kvm,但如果没有正确的 cpu 扩展,模块将无法加载。
答案3
对,那是正确的。 KVM 依赖于 CPU 虚拟化支持(Intel VT 或 AMD-V),并且由于 Raspberry PI 3 ARM CPU 不支持这些指令,因此您无法使用 KVM。
答案4
为了加速仿真(即将内核转为完全虚拟化),您需要 KVM 模块和适当的 CPU 来执行虚拟机代码,本质上它是 CPU 的附加组件。您可以通过多种方式判断您的系统是否支持它,执行命令~$ lscpu
、检查系统功能~$ virsh capabilities
或简单地执行命令$ cat /proc/cpuinfo
。您正在寻找的标志适用vmx
于 Intel 和svm
AMD。
现在 ARM CPU,据我所知,他们没有那个 CPU 附加组件。理论上是的,您可以在 ARM CPU 上运行某种模拟系统,而无需 CPU 扩展,但这会非常慢。至于 Raspberry,我猜想在没有类似 KVM for ARM 的情况下启动虚拟机之前,您会耗尽资源。
就我的经验而言,我确实需要在低功耗设备上执行一些 FreeBSD 代码 (PFsense),但不支持 ARM arch,因此我确实在 Intel 计算棒上运行了完整虚拟化。
[root@compute ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 55
Model name: Intel(R) Atom(TM) CPU Z3735F @ 1.33GHz
Stepping: 8
CPU MHz: 666.452
CPU max MHz: 1832.6000
CPU min MHz: 499.8000
BogoMIPS: 2662.40
Virtualization: VT-x
L1d cache: 24K
L1i cache: 32K
L2 cache: 1024K
NUMA node0 CPU(s): 0-3
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes rdrand lahf_lm 3dnowprefetch epb tpr_shadow vnmi flexpriority ept vpid tsc_adjust smep erms dtherm ida arat