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를 탑재한 내 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

관련 정보