VirtualBox 6.1 で Intel CPU の Nested Virtualization が解除された

Nested Virtualization は仮想マシンからホストマシンの CPU の仮想化機能を利用できる機能です。

VirtualBox では AMD CPU の Nested Virtualization が 6.0.6 でリリースされました。そして 6.1.0 で Intel CPU でも Nested Virtualization が利用できるようになりました。

Changelog – Oracle VM VirtualBox

リリースノートには、

starting with 5th generation Core i, codename Broadwell

とあり、僕の MacBook Pro Early 2015 は ギリギリ第5世代ですので使えるはずです。

現バージョンでは仮想マシン名を指定して個別に有効化する必要があります。

2.34. Nested Virtualization

'Ubuntu 18' という仮想マシンに対して Nested Virtualization を有効化するには以下を実行します。

$ VBoxManage modifyvm 'Ubuntu 18' --nested-hw-virt on

これで、有効化されました。

f:id:kondoumh:20200211235159p:plain

仮想マシンを起動して CPU がハードウェア仮想化をサポートしているか確認してみます。

KVM/Installation - Community Help Wiki

$ egrep -c '(vmx|svm)' /proc/cpuinfo
1

この数値が1以上ならサポートされているので OK です。KVM2 をインストールしてみます。

$ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

インストールが終わって KVM acceleration が利用可能になったかチェック。

$ kvm-ok 
INFO: /dev/kvm exists
KVM acceleration can be used

大丈夫みたいです。

/dev/kvm へのアクセス権をログインユーザーに付与します。

$ sudo chown <username> /dev/kvm

libvirt でエラーがないことを確認。

$ virt-host-validate

virt-host-validate
  QEMU: Checking for hardware virtualization                                 : PASS
    :
  QEMU: Checking for cgroup 'blkio' controller mount-point                   : PASS
  QEMU: Checking for device assignment IOMMU support                         : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
   LXC: Checking for Linux >= 2.6.26                                         : PASS
    :
   LXC: Checking if device /sys/fs/fuse/connections exists                   : PASS

OK でした。

/etc/libvirt/libvirtd.conf に以下の設定を追加

unix_sock_group = "libvirtd"
unix_sock_ro_perms = "0770"
unix_sock_rw_perms = "0770"

いったんリブートしておきます。

KVM を使って Ubuntu の仮想マシンに CentOS 7 仮想マシンをインストールしてみます。

$ curl -LO http://ftp.riken.jp/Linux/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso

$ sudo kvm -hda centos7.img -cdrom CentOS-7-x86_64-DVD-1908.iso -boot once=d -m 512

インストーラが起動。

f:id:kondoumh:20200212220124p:plain

インストーラの GUI が起動しました。

f:id:kondoumh:20200212221907p:plain

ソフトウェアインストール後の initramfs の初期化などにすごく時間がかかっていましたが、なんとかコンソールが起動しました。

f:id:kondoumh:20200213082002p:plain

ホストマシンが実機の場合は当たり前の光景ですが、これが仮想マシン内で実行されているのは中々凄いですね。

QEMU で仮想マシンが動くなら、Minikube で KVM も使えそうです。

以前 Minikube を macOS の HyperKit と Windows の Hyper-V で使ってみました。

blog.kondoumh.com

Linux 版の Minikube をインストールします。

https://minikube.sigs.k8s.io/docs/start/linux/

$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_1.7.2-0_amd64.deb \
 && sudo dpkg -i minikube_1.7.2-0_amd64.deb

vm-driver に kvm2 を指定して minikube を実行

f:id:kondoumh:20200212004452p:plain

CPU が振り切ったまま、マウスカーソルすら表示されなくなってしまいました。

ということで、マシンパワーが足りないのか VirtualBox 側の最適化が足りないのか、僕の環境では実用的な速度では動きませんでした。もう少し熟成を待つ方がよさそうです。