Raspberry PiでKVMを動かす
以前にRaspberry PiでKVMを動かす記事を書いたのですが、その頃から色々と状況が変わっているので書き直しました。
対応ハードウェア
ARMv8以降に対応しているCPUは仮想化支援機能が使えて、KVMが動きます。つまり、Raspberry Pi 3以降ならOK。
カーネルの対応状況
KVMを動かすには、カーネルが64bit対応で、KVMモジュールが存在する必要があります。
前回はRaspbianが32bitにしか対応しておらず、KVMもサポートしていませんでした。そのため、前回はKVMを有効化した状態のカーネルを探してArch Linuxを使ってた訳ですが、現在はテスト段階ではありますがRaspberry Pi OS(名前が変わった)の64bit版がリリースされ、状況が変わっています。
Index of /raspios_arm64/images
記事執筆時点で公開されている64bit Raspberry Pi OSの最新版(2020-08-20)だと、Raspberry Pi 3系と4系で同じカーネルを利用する構成になっており、KVMが有効化された状態のカーネルを使用しています。なので、Raspberry Pi OSの64bit版ならそのまま動きます。
また、サードパーティーのLinuxでも、Raspberry Piで公式に配布されているカーネルのRaspberry Pi 4向けのdefconfigがVirtualizationを有効にしてあるので、Raspberry Pi 4ならそのままでも使えます。ただ、Raspberry Pi 3系だとカーネル標準設定ではVirtualizationが有効になってないので、自前でビルドして用意しなきゃいけない事が多いです。
dmesg | grep kvm
でカーネルがKVMを使える状態かどうか調べることができるので、確認してみるといいかも。
QEMUのインストール
KVMはフロントエンドにQEMUを使用するので、こちらをインストールする必要があります。
sudo apt install qemu-system
とはいえ、64bitのRaspberry Pi OSならこれだけでOKです。
仮想マシンの起動
基本的にqemu-system-aarch64
を起動するときに-cpu
をhost
に変えて-enable-kvm
をつけるだけでOKです。
とりあえず試しにAlpine LinuxとWindows 10 on ARMを動かして、M1のMacbook AirのHVF(KVMのmacOS版)と比べてみました。
Alpine Linux
Alpine Linuxのサイトに仮想マシン用のインストーラーが公開されてるけど、aarch64(ARM 64bit)ではどうやって起動させるの?って話。ContentsUEFIを使うUEFIファーム...
上の記事で作ったAlpine Linuxの仮想マシンを、Raspberry Pi 3+とRaspberry Pi 4とM1 Macbook AirでそれぞれKVM(HVF)がオンの時とオフの時の起動にかかる時間を測ってみました。
測定方法はqemuを実行してからloginのコンソールが出るまでを手元のストップウォッチで測りました。
起動時間 (KVM,HVF有効) | 起動時間 (KVM,HVF無効) | |
---|---|---|
Raspberry Pi 3+ | 10秒 | 4分39秒 |
Raspberry Pi 4 | 8秒 | 3分52秒 |
M1 Macbook Air | 1秒 | 27秒 |
これ結構使えるんじゃないでしょうか。
Windows 10 on ARM
以下の記事を参考にQEMUで動くWindows 10 on ARMの仮想マシンを作成、起動にかかる時間を調べてみました。
How to run Windows 10 on ARM or Ubuntu for ARM64 in QEMU on Apple Silicon Mac
Raspberry Pi 3+はRAMが足りないのか起動できず断念。搭載しているのが1GBで、756MB割り当てても動かなかった。
僕の持ってるRaspberry Pi 4はRAMが4GBのメモリなので、2GBを割り当ててテストしました。あと、microSDがボトルネックになることがわかってたので、Raspberry Pi 4の時はUSB3.0で繋いだ外付けSSDから起動してます。
測定方法は、Windowsが起動完了していることがわかりにくいので、スタートアップに現在時刻を表示するbatファイルを入れておいて、qemuを実行した時刻と比較しました。
起動時間 | |
---|---|
Raspberry Pi 4 | 2分56秒 |
M1 Macbook Air | 27秒 |
使い物になるってほどではないけれど、それなりの速度で動いてるんじゃないでしょうか。IntelのiMac(i9 9900KF)だとフリーズして起動すらしないので、動くだけ十分。
ちなみにRaspberry PiでWindows 10 on ARMを動かすときのコマンドは以下のようになります。基本的にはApple Siliconの参考と一緒で、HVFをKVMに変えているだけです。
qemu-system-aarch64 \
-monitor stdio \
-M virt,highmem=off \
-enable-kvm \
-cpu host \
-smp 4 \
-m 2048 \
-bios QEMU_EFI.fd \
-device ramfb \
-device qemu-xhci \
-device usb-kbd \
-device usb-tablet \
-device intel-hda \
-device hda-duplex \
-nic user,model=virtio \
-drive file=win10arm.qcow2,format=qcow2,if=none,id=boot,cache=writethrough \
-device nvme,drive=boot,serial=boot
しかし、Macbook Air速いですね。仮想環境のWindows 10 on ARMでもSurface Pro Xよりベンチ結果が良かったりするみたいですからやばいです。
まとめ
Windowsを使うのはちょっと辛いけど、Linuxのテスト環境立てるくらいには十分使えるように感じました。まあWindowsは直に動作させても速度は芳しくないし、KVMもネイティブ以上の速度が出るわけじゃないですからしょうがない部分はありますけど。
コメント