私のゲストOSはx86(.vmdk形式)であり、QEMU文書によると、私のホストはARM Raspberry Pi 3なので、カーネルで有効にしてもKVMを利用できないようです。
そうですか?
答え1
仮想マシンを実行する簡単な方法は、各コマンドを解釈することです。 VMソフトウェアは各命令をデコードして実行します。
仮想マシンの命令セットがホストの命令セットと同じである場合、別のアプローチは単に命令を実行することである。ゲストがハードウェアを完全に制御できないため、直接実行できないコマンドはいくつかあります。難しい問題の1つはメモリアクセスです。ゲストはメモリ全体にアクセスできないため、アドレス変換を実行する必要があります。 VT-x(Intel)またはAMD-V(AMD)拡張を含むx86 CPUまたはARM Cortex-A15以降(Pi 2およびPi 3を含む)などの高度なCPUには、このアドレスを実行するハードウェア機能変換があります。 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アドインはありません。理論的にはそうです。 CPU拡張なしでARM CPUで一種のシミュレーションシステムを実行できますが、非常に遅くなります。 Raspberryの場合、ARM用KVMなどのデバイスなしで仮想マシンを起動する前にリソースが不足しているようです。
私の経験では、低電力デバイスでいくつかのFreeBSDコード(PFsense)を実行する必要がありましたが、ARMアーチがサポートされていないため、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