Ideal Reality

興味の赴くままに

Raspberry PiでKVMを動かす

以前にRaspberry PiでKVMを動かす記事を書いたのですが、その頃から色々と状況が変わっているので書き直しました。

Contents
スポンサーリンク

対応ハードウェア

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を起動するときに-cpuhostに変えて-enable-kvmをつけるだけでOKです。

とりあえず試しにAlpine LinuxとWindows 10 on ARMを動かして、M1のMacbook AirのHVF(KVMのmacOS版)と比べてみました。

Alpine Linux

QEMUにaarch64版の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 48秒3分52秒
M1 Macbook Air1秒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 42分56秒
M1 Macbook Air27秒

使い物になるってほどではないけれど、それなりの速度で動いてるんじゃないでしょうか。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もネイティブ以上の速度が出るわけじゃないですからしょうがない部分はありますけど。

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿

virt-manager(libvirt)で自分でビルドしたQEMUを使用する

QEMUにaarch64版のAlpine Linuxをインストールする

IntelとApple SiliconのMacbook Airを比較してみた

NO IMAGE

QEMU(KVM)でNVMe SSDをPCIパススルーして使用する

NO IMAGE

Raspberry PiでKVMを動かす (旧版)

NO IMAGE

QEMUでブリッジネットワークを使用する