4. QEMU での動作確認

QEMU を使った x86_64・AArch64 での簡易テスト方法

x86_64 での QEMU 起動

loadvmm.efi と bitvisor.elf を ~/x86_test/ などのディレクトリに置き、 以下のコマンドで QEMU を起動します。

qemu-system-x86_64 \
  -cpu host -enable-kvm \
  -bios /path/to/OVMF.fd \
  -drive file=fat:rw:~/x86_test/,format=raw \
  -cdrom /path/to/bootable.iso \
  -nic user,model=e1000e \
  -M q35 -m 4096
  • -bios /path/to/OVMF.fd — UEFI ファームウェア(OVMF)を指定
  • -nic user,model=e1000e — e1000e は Intel NIC のエミュレーションなので NET_PRO1000 を有効化
  • -boot menu=on を追加すると起動時に ESC キーを入力しやすくなる

起動後、ESC キーを繰り返し押してセットアップメニューに入り、EFI Shell を起動します。 Shell で fs0: などに切り替え、BitVisor を起動してください。

KVM 使用時の注意事項

最近の Intel CPU では、KVM の APICv が有効なまま BitVisor を起動すると タイマーチェックパニックや SMP ブリングアップのストールが発生することがあります。

現在の値を確認:

cat /sys/module/kvm_intel/parameters/enable_apicv

一時的に無効化:

sudo modprobe -r kvm-intel && sudo modprobe kvm-intel enable_apicv=N

永続化するには modprobe の設定ファイル(/etc/modprobe.d/kvm_intel.conf など)で options kvm-intel enable_apicv=N と記述してください。

SMP に関する注意

Linux ゲストの SMP ブリングアップは INIT と SIPI のタイミング問題から不安定になることがあります。 defconfig で .localapic_intercept = 1 を設定することで、BitVisor が INIT-SIPI エミュレーションや APIC アクセスエミュレーションを行うようになり、QEMU + KVM 上での動作が安定します。

AArch64 での QEMU 起動

AArch64 向けにビルドした bitvisor.elf と loadvmm.efi を同一フォルダに置き、 以下のコマンドを実行します。

qemu-system-aarch64 \
  -m 8G \
  -M virt,gic-version=3,virtualization=true \
  -cpu neoverse-n1 \
  -bios /path/to/aarch64/qemu_efi.fd \
  -drive file=fat:rw:/path/to/bitvisor_dir/,format=raw \
  -cdrom /path/to/aarch64/linux.iso \
  -nic user,model=e1000e \
  -serial vc:1024x768 \
  -smp 4
  • -cpu neoverse-n1 または -cpu a64fx が動作確認済みです
  • -cpu max は現時点では未対応の機能が含まれるため使用しないでください
  • devicetree でデバイス検出を行う場合は -M virt,...,acpi=off を追加し、 Kconfig で CONFIG_DEVICETREE=y を有効化してください

起動後は x86_64 と同様に、ESC キーで設定メニューに入り EFI Shell から BitVisor を起動します。

AArch64 BitVisor は現時点では実験的な実装です。 virtio_net 経由のネットワーク接続を持つ Linux カーネルの起動が確認されています。