Mac OSXとLinuxでqemuを使用したネスト仮想化(Intel VT-x)

Mac OSXとLinuxでqemuを使用したネスト仮想化(Intel VT-x)

kvm-qemuがLinux上でIntel(VT-x)ネストされた仮想化をサポートしていることを知っています。これはこれがうまくいっているからです。ただし、os x をホストとして使用する Mac では、この機能は使用できません。

デュアルコアIntel i5を搭載したMy Macbook Airは、VT-x仮想化をサポートしています。コマンドは「VMX」を表示するので、これを知っています。

$sysctl -a grep machdep.cpu.features

次のコマンドを使用してqemu(qemu-system-x86_64、バージョン4.2.0)を起動します。

$qemu-system-x86_64 -m 2048 -vga virtio -usb -device usb-tablet -show-cursor -enable-kvm -drive file=~/vms-qemu/lmde.qcow2 -accel hvf -cpu ホスト,vmx

「要求された機能はホストではサポートされていません:CPUID.01H:ECX.vmx [ビット5]」という警告が表示されます。

Linux Mint Debian Edition を実行しているゲストである仮想マシンでは、アラートで予想どおりに仮想化を使用できません。これは libvirt-clients パッケージの virt-host-validate コマンドで表示されます。また、lscpuコマンドもいいえ展示する:

仮想化: VT-x

ハイパーバイザーベンダー:KVM

仮想化の種類:完全な仮想化

QemuがホストがVMXをサポートしていないと警告するのはなぜですか?ホストがこの機能をサポート/サポートしているために尋ねます。 Appleは長年この機能をデフォルトで有効にしてきました(https://support.apple.com/en-us/HT203296)。

Linuxホストでネストされた仮想化を正常に有効にし、qemu(2.8.1)と一緒にLinuxゲストを使用しました。これを行うには、/etc/modprobe.d/kvm-intel.confで「options kvm-intel Nested = Y」オプションを設定する必要がありました。ゲストにVT-xハードウェアサポート仮想化を提供するには、Mac OSXでも同様のものが必要ですか?

答え1

#!/bin/bash

# Check if VT-x (VMX) is supported by the CPU
cpu_features=$(sysctl -a | grep machdep.cpu.features)
if [[ $cpu_features == *"VMX"* ]]; then
    echo "VT-x (VMX) is supported by the CPU"
else
    echo "VT-x (VMX) is not supported by the CPU"
fi

# Check if nested virtualization is enabled on the host
nested=$(sysctl -a | grep machdep.cpu.extfeatures)
if [[ $nested == *"VMX"* ]]; then
    echo "Nested virtualization is enabled on the host"
else
    echo "Nested virtualization is not enabled on the host"
fi

# Check if HVF (Apple Hypervisor Framework) is being used
hypervisor=$(sysctl -n kern.hv_support)
if [[ $hypervisor == "1" ]]; then
    echo "HVF (Apple Hypervisor Framework) is being used"
else
    echo "HVF (Apple Hypervisor Framework) is not being used"
fi

# Check if VT-x is exposed to the guest VM
qemu_capabilities=$(qemu-system-x86_64 -cpu help)
if [[ $qemu_capabilities == *"vmx"* ]]; then
    echo "VT-x (VMX) is exposed to the guest VM"
else
    echo "VT-x (VMX) is not exposed to the guest VM"
fi

# Check if nested virtualization is enabled inside the guest VM
guest_capabilities=$(qemu-system-x86_64 -cpu help | grep "vmxvmcs")
if [[ $guest_capabilities == *"vmxvmcs"* ]]; then
    echo "Nested virtualization is enabled inside the guest VM"
else
    echo "Nested virtualization is not enabled inside the guest VM"
fi

関連情報