KVM 활성화

KVM은 커널에 이미 내장된 모듈이라 별도 하이퍼바이저를 설치할 필요는 없지만, 막상 “이 머신에서 KVM이 되는지”를 확인하려고 하면 CPU 플래그, 커널 모듈, /dev/kvm 권한이 뒤섞여 헷갈리기 쉽다. 특히 클라우드 인스턴스나 중첩 가상화 환경에서는 CPU 자체는 최신인데도 하이퍼바이저가 가상화 확장을 게스트에 넘겨주지 않아 KVM이 아예 안 되는 경우가 흔하다. 이 글에서는 KVM 지원 여부를 확인하고 활성화하는 절차와, 실제로 지원되지 않는 환경을 만난 사례를 함께 정리한다.

CPU 가상화 확장 지원 확인

/proc/cpuinfo의 플래그로 확인한다. Intel은 vmx, AMD는 svm이 있어야 한다.

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

0이 아니면 CPU 자체는 가상화 확장을 지원한다는 뜻이다.

kvm-ok로 한 번에 확인

cpu-checker 패키지의 kvm-ok가 CPU 플래그와 /dev/kvm 상태를 한 번에 확인해준다.

$ sudo apt install cpu-checker
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

커널 모듈 로드 확인

CPU 제조사에 맞는 모듈(kvm_intel 또는 kvm_amd)이 로드돼 있어야 한다. 대부분 배포판에서 부팅 시 자동으로 로드되지만, 로드돼 있지 않다면 수동으로 올릴 수 있다.

$ lsmod | grep kvm
kvm_amd               110592  0
kvm                  1003520  1 kvm_amd
irqbypass              16384  1 kvm

# 로드돼 있지 않다면
$ sudo modprobe kvm_amd   # Intel이면 kvm_intel

# /dev/kvm은 root:kvm 소유이므로 일반 사용자로 쓰려면 kvm 그룹에 추가
$ sudo usermod -aG kvm $USER

중첩 가상화(nested) 파라미터 확인

이 VM(WSL2) 자체를 KVM 게스트로 한 번 더 중첩시키고 싶다면(예: 이 안에서 또 QEMU/KVM VM을 띄우는 경우), 커널 모듈의 nested 파라미터가 켜져 있어야 한다.

$ cat /sys/module/kvm_amd/parameters/nested   # Intel이면 kvm_intel
1

# 0이면 모듈을 내렸다가 파라미터를 주고 다시 로드
$ sudo modprobe -r kvm_amd
$ sudo modprobe kvm_amd nested=1

참고로 KVM 자체가 안 되는 호스트(뒤에서 다룰 테스트 VM)에서는 이 파라미터 파일 자체가 존재하지 않는다 — kvm_amd/kvm_intel 모듈이 아예 로드되지 않았기 때문이다.

$ cat /sys/module/kvm_amd/parameters/nested
cat: /sys/module/kvm_amd/parameters/nested: No such file or directory

주의사항: 중첩 가상화 환경에서는 안 될 수 있다

같은 절차를 다른 하이퍼바이저 위에서 도는 VM(테스트용 Ubuntu VM)에서 그대로 실행하자 CPU 플래그부터 아예 잡히지 않았다.

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

$ sudo kvm-ok
INFO: Your CPU does not support KVM extensions
INFO: For more detailed results, you should run this as root

$ ls /dev/kvm
ls: cannot access '/dev/kvm': No such file or directory

이 VM을 구동하는 상위 하이퍼바이저가 가상화 확장을 게스트에 그대로 넘겨주는 중첩 가상화(nested virtualization)를 켜두지 않았기 때문이다. 물리 서버라면 BIOS/UEFI에서 Intel VT-x 또는 AMD-V 옵션을 켜야 하고, 클라우드·VM 환경이라면 인스턴스 자체가 아니라 그 위의 하이퍼바이저(호스트) 쪽 설정에서 중첩 가상화를 켜야 한다 — 게스트 안에서 아무리 modprobe를 해봐도 CPU 플래그 자체가 없으면 해결되지 않는다.

지금까지 확인한 항목을 환경별로 정리하면 다음과 같다.

확인 항목WSL2(로컬)중첩 미지원 테스트 VM
CPU 플래그(vmx/svm)svm 있음없음
kvm-ok사용 가능확장 미지원으로 실패
kvm_amd/kvm_intel 모듈로드됨로드 안 됨
/dev/kvm존재존재하지 않음
nested 파라미터 파일존재(1)존재하지 않음

마무리

KVM 활성화 여부는 kvm-ok 한 번으로 CPU 플래그·모듈·/dev/kvm까지 종합적으로 확인할 수 있다. 다만 실패했을 때 원인이 이 머신 자체의 설정 문제인지, 애초에 CPU/하이퍼바이저 단계에서 막혀 있는 문제인지부터 구분하는 게 중요하다 — 후자라면 게스트 내부에서 할 수 있는 일이 없다.

참고

Linux KVM 공식 FAQ
Ubuntu Server – KVM 문서

답글 남기기