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/하이퍼바이저 단계에서 막혀 있는 문제인지부터 구분하는 게 중요하다 — 후자라면 게스트 내부에서 할 수 있는 일이 없다.