13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] libvirt

  • KVM·QEMU·libvirt — Proxmox 가상화의 실체 이해하기

    Proxmox에서 VM을 만들면 그 아래에서 실제로는 무엇이 도는지 아시나요? KVM, QEMU, libvirt — 가상화의 3대 축입니다. 이 구조를 이해하면 Proxmox 설정 하나하나가 왜 그런지 보이기 시작합니다. 가상화의 실체를 정리합니다.

    1. 하이퍼바이저 타입 — Type 1 vs Type 2

    Type 1 (베어메탈) Type 2 (호스트형)
    구조 하드웨어 위에 직접 일반 OS 위에 앱처럼
    성능 높음 상대적으로 낮음
    예시 KVM, ESXi, Proxmox VirtualBox, VMware Workstation

    Proxmox는 Type 1입니다. 정확히는 리눅스 커널 자체가 하이퍼바이저가 되는 KVM 방식이죠.

    2. 3대 축 — KVM · QEMU · libvirt

    • KVM (Kernel-based VM): 리눅스 커널 모듈. CPU의 하드웨어 가상화 기능(Intel VT-x/AMD-V)을 써서 VM을 네이티브에 가깝게 돌립니다. “가상화의 엔진”.
    • QEMU: 에뮬레이터·디바이스 모델. 가상 디스크·네트워크카드·칩셋 등 “가상 하드웨어”를 제공합니다. KVM과 결합해 qemu-kvm으로 동작.
    • libvirt: 이들을 다루는 관리 API/데몬. Proxmox·virsh 같은 도구가 libvirt를 통해 VM을 제어합니다.
    관리도구(Proxmox) → libvirt/QEMU → KVM(커널) → CPU 가상화(VT-x/AMD-V)

    즉 KVM은 엔진, QEMU는 차체, libvirt는 운전대라고 보면 됩니다.

    3. 전가상화 vs 반가상화(virtio)

    가상 하드웨어를 “진짜 하드웨어처럼 완벽히 흉내”내면(전가상화) 호환성은 좋지만 느립니다. 그래서 나온 게 virtio(반가상화)입니다.

    • virtio: “이건 가상 환경이야”를 게스트가 알고, 전용 드라이버로 훨씬 빠르게 디스크·네트워크를 처리.
    • Proxmox에서 디스크를 VirtIO SCSI, 네트워크를 virtio로 두는 이유가 성능입니다.
    # Proxmox에서 VM 디스크/네트워크를 virtio로 (성능 최적)
    qm set 100 --scsihw virtio-scsi-single
    qm set 100 --net0 virtio,bridge=vmbr0

    단, 윈도우 게스트는 virtio 드라이버를 따로 설치해줘야 인식합니다(리눅스는 대부분 기본 내장).

    4. CPU 타입과 중첩 가상화

    Proxmox의 VM CPU 타입도 이 맥락입니다.

    • kvm64(기본): 호환성 위주, CPU 기능 일부 감춤
    • host: 물리 CPU 기능을 그대로 노출 → 성능↑, 중첩 가상화 가능

    그래서 OpenStack 컴퓨트 노드처럼 “VM 안에서 또 VM”을 돌려야 하면 반드시 --cpu host를 줍니다. 이제 왜 그런지 이해되시죠?

    5. 정리

    Proxmox의 VM은 KVM(커널 엔진) + QEMU(가상 하드웨어) + libvirt/관리도구의 합작입니다. 성능의 핵심은 virtio, 중첩 가상화의 핵심은 CPU host. 이 구조를 알고 나면 Proxmox의 디스크·네트워크·CPU 옵션이 더 이상 주술이 아니라 논리로 보입니다.