Understand different OS Concepts/Virtualization

Enable Nested Virtualization IN KVM In Linux (KVM 중첩 가상화)

Somaz 2022. 9. 2. 15:13
728x90
반응형

Overview

KVM(Kernel-based Virtual Machine)에서 중첩 가상화(Nested Virtualization)는 가상 머신(VM) 내부에서 또 다른 VM을 실행할 수 있게 해주는 기능이다. 이는 가상화 환경을 테스트하거나 CI/CD, 클라우드 플랫폼 테스트, 개발 환경 구축 등에서 유용하게 사용된다.

 

이 문서에서는 KVM 호스트에서 중첩 가상화를 활성화하고, 게스트 VM에서도 가상화를 사용할 수 있도록 설정하는 방법을 단계별로 안내한다.

https://ostechnix.com/how-to-enable-nested-virtualization-in-kvm-in-linux/

 

How To Enable Nested Virtualization In KVM In Linux - OSTechNix

Nested virtualization is a feature that allows to run virtual machines within a VM. This guide explains how to enable nested virtualization in KVM in Linux.

ostechnix.com

 

 

 

 

 


 

 

 

 

 

CPU가 가상화를 지원하는지 확인

$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       46 bits physical, 48 bits virtual
CPU(s):              72
On-line CPU(s) list: 0-71
Thread(s) per core:  2
Core(s) per socket:  18
Socket(s):           2
NUMA node(s):        2
Vendor ID:           GenuineIntel
CPU family:          6
Model:               79
Model name:          Intel(R) Xeon(R) CPU E5-2697 v4 @ 2.30GHz
Stepping:            1
CPU MHz:             1367.142
CPU max MHz:         3600.0000
CPU min MHz:         1200.0000
BogoMIPS:            4594.55
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            46080K
NUMA node0 CPU(s):   0-17,36-53
NUMA node1 CPU(s):   18-35,54-71
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
  • Flags 항목에서 Intel CPU는 vmx, AMD CPU는 svm 플래그가 있는지 확인

 

 

 

 

 


 

 

 

 

 

KVM 게스트가 가상화를 지원하는지 확인

중첩 기능을 활성화한 KVM 게스트 머신의 전원을 켜고 로그인한다.

KVM 게스트의 터미널에서 다음 명령을 실행하여 가상화가 활성화되었는지 여부를 확인한다.

$ egrep --color -i "svm|vmx" /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts

 

 

 

 

 


 

 

 

 

호스트에서 중첩 가상화 활성화

 

 

기존 KVM 모듈 언로드

 

다음으로 KVM 모듈을 언로드 한다.

 

 

INTEL 시스템

$ sudo modprobe -r kvm_intel

 

 

AMD 시스템

$ sudo modprobe -r kvm_amd

 

 

 

`nested=1` 옵션으로 모듈 재로드

 

INTEL 시스템

$ sudo modprobe kvm_intel nested=1

 

 

AMD 시스템

$ sudo modprobe kvm_amd nested=1

 

 

 


 

 

 

 

 

 

중첩 가상화 영구 적용

중첩된 VT 기능은 KVM 호스트 시스템을 재부팅할 때까지만 활성화된다. 

중첩 기능을 영구적으로 활성화하려면 `/etc/modprobe.d/kvm.conf` 파일 을 편집하면 된다.

$ sudo vi /etc/modprobe.d/kvm.conf

 

 

파일이 없으면 그냥 만들면 된다.

 

 

INTEL 호스트 에 다음 줄을 추가 한다.

options kvm_intel nested=1

 

 

 

AMD 호스트 에 다음 줄을 추가 한다.

options kvm_amd nested=1
  • 파일을 저장하고 닫는다.
  • 완료! KVM 호스트 시스템에서 중첩 VT를 활성화했다.

 

 

 

 

 


 

 

 

 

 

중첩 가상화 활성화 여부 확인 (호스트)

프로세서가 INTEL인 경우 `cat` 명령 을 사용하여 `sys/module/kvm_intel/parameters/nested` 파일을 확인하면 된다.

$ cat /sys/module/kvm_intel/parameters/nested
Y

 

 

 

On INTEL CPU:

$ modinfo kvm_intel | grep -i nested

 

 

결과:

parm:           nested_early_check:bool
parm:           nested:bool

 

 

On AMD CPU:

$ modinfo kvm_amd | grep -i nested

 

 

 

 

 

 


 

 

 

 

 

게스트 VM에서 중첩 가상화 활성화

 

 

방법 A: virsh CLI 이용

$ virsh
virsh # list --all
virsh # edit <vm-이름>

 

 

 

CPU 설정 부분에서 아래와 같이 변경한다.

<cpu mode='host-model' check='partial'/>
  • VM을 저장하고 종료한 후 다시 시작한다.

 

 

 

방법 B: Virt-Manager 사용

  1. Virt-Manager 실행
  2. 해당 VM → 오른쪽 클릭 → 열기(Open)세부정보(Details)
  3. 프로세서(Processor) 탭 이동
  4. CPU 모드를 host-model로 설정
  5. 적용 후 VM 재부팅

 

 

 

 

 


 

 

 

 

 

추가 팁

  • EPT(Extended Page Tables) 또는 AVX 등의 CPU 기능도 노출하고 싶다면 CPU 설정에서 추가 가능
  • BIOS/UEFI에서 가상화(VT-x/AMD-V)가 비활성화되어 있지 않은지 확인
  • `virt-host-validate` 도구를 활용해 호스트 상태 점검 가능
  • QEMU 직접 실행 시 `-cpu host`,`+vmx` 옵션 명시
  • 중첩 구조에서는 L1 → L2 → L3 구조 이해 필요
  • I/O 및 네트워크 성능이 다소 저하될 수 있음
 

 

 

 

 


 

 

 

 

마무리

KVM에서 중첩 가상화를 활성화하면 게스트 VM 안에서 또 다른 가상 환경을 실행할 수 있어 개발 및 테스트 환경 구축에 매우 유용하다.

 

하드웨어가 이를 지원하는지 확인하고, 호스트 및 게스트 VM에서 각각 설정을 적용하면 된다. `lscpu`, `modinfo`, `virsh` 같은 도구를 활용해 상태를 점검하고, 필요 시 Virt-Manager에서도 손쉽게 설정이 가능하다.

 

DevOps, 클라우드 테스트, 컨테이너 기반 가상화 실습 등 다양한 목적에 맞춰 활용해 보자!

 

 

 

 


 

 

Reference

 

 

728x90
반응형

'Understand different OS Concepts > Virtualization' 카테고리의 다른 글

Proxmox란?  (0) 2024.05.24
Xen Orchestra란?  (0) 2024.05.21
Libvirt virsh 명령어 정리  (0) 2022.08.12
Libvirt란? (Linux 가상화 관리 도구)  (0) 2022.08.08
KVM과 QEMU란? (Linux 가상화 솔루션)  (0) 2022.08.08