KVM vs QEMU

    Openstack / / 2021. 6. 5. 16:19
    728x90

    # QEMU 는 프로세스 자체로 instance이며, libvirt를 통하여 수행된다.

     

    KVM

    KVM의 역할은 프로세서의 하드웨어 가상화 기능을 활성화하고 제어하는 ​​것입니다. 이를 통해 다양한 워크로드에 대해 가상 머신을 기본 속도에 가깝게 실행할 수 있습니다.

    KVM 자체는 "Linux 장치 드라이버"이며 가상화 스택의 일부일뿐입니다. QEMU 및 libvirt와 같은 사용자 공간 구성 요소와 SELinux와 같은 기타 커널 하위 시스템은 스택을 완전한 기능과 보안으로 만드는 데 중요한 역할을합니다. 이 게시물은 KVM 가상화 스택의 사용자 공간 측면, QEMU 및 libvirt에 대한 대안이 무엇인지, QEMU 및 libvirt에 대한 우리의 작업이 이를 더욱 광범위한 사용 사례에 적합하게 만드는 방법을 탐구합니다.

     

    KVM은 Linux 커널 모듈입니다. 가상화 확장 (Intel VT 또는 AMD-V) [1]을 포함하는 x86 하드웨어의 Linux 용 전체 가상화 솔루션 인 유형 1 하이퍼 바이저입니다. 하지만 완전 가상화 란 무엇입니까? 하이퍼 바이저에 의해 CPU가 에뮬레이션 (vCPU)되면 하이퍼 바이저는 vCPU에 대한 명령을 물리적 CPU로 변환해야합니다. 상상할 수 있듯이 이것은 엄청난 성능 영향을 미칩니다. 이를 극복하기 위해 최신 프로세서는 Intel VT-x 및 AMD-V와 같은 가상화 확장을 지원합니다. 이러한 기술은 물리적 CPU 슬라이스를 vCPU에 직접 매핑 할 수있는 기능을 제공합니다. 따라서 vCPU 용 명령을 물리적 CPU 슬라이스에서 직접 실행할 수 있습니다. [2]

    KVM is a Linux kernel module. It is a type 1 hypervisor that is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V)[1]. But what is full virtualization, you may ask? When a CPU is emulated (vCPU) by the hypervisor, the hypervisor has to translate the instructions meant for the vCPU to the physical CPU. As you can imagine this has a massive performance impact. To overcome this, modern processors support virtualization extensions, such as Intel VT-x and AMD-V. These technologies provide the ability for a slice of the physical CPU to be directly mapped to the vCPU. Therefore the instructions meant for the vCPU can be directly executed on the physical CPU slice.[2]

    # kvm은 전가상화를 지원

    QEMU

    QEMU는 디스크, 네트워크, VGA, PCI, USB, 직렬 / 병렬 포트 등과 같은 하드웨어 가상화 (하드웨어 지원 가상화와 혼동하지 말 것)를 수행하기위한 사용자 영역 유형 2 (즉, 호스트 OS에서 실행) 하이퍼 바이저입니다. DBT (동적 이진 변환)를 통해 CPU를 에뮬레이션 할 수 있다는 점에서 유연성이있어 주어진 프로세서에 대해 작성된 코드를 다른 프로세서 (예 : x86의 ARM 또는 ARM의 PPC)에서 실행할 수 있습니다. QEMU는 자체적으로 실행되고 가상 시스템의 모든 리소스를 에뮬레이션 할 수 있지만 모든 에뮬레이션은 소프트웨어에서 수행되므로 매우 느립니다.

    QEMU is a userland type 2 (i.e runs upon a host OS) hypervisor for performing hardware virtualization (not to be confused with hardware-assisted virtualization), such as disk, network, VGA, PCI, USB, serial/parallel ports, etc. It is flexible in that it can emulate CPUs via dynamic binary translation (DBT) allowing code written for a given processor to be executed on another (i.e ARM on x86, or PPC on ARM). Though QEMU can run on its own and emulate all of the virtual machine’s resources, as all the emulation is performed in software it is extremely slow.

    # qemu는 에뮬레이션을 수행하는 하이퍼바이저

     

    QEMU와 libvirt

    QEMU 및 libvirt는 Red Hat 사용자 공간 가상화 스택의 백엔드를 구성합니다. 이들은 KVM 기반 제품과 virt-manager, libguestfs 및 GNOME Boxes와 같은 Red Hat Enterprise Linux에 포함 된 여러 애플리케이션에서 사용됩니다.

     

    QEMU는 가상 머신 모니터 (VMM)로, 하드웨어 에뮬레이션과 가상 머신에 대한 저수준 인터페이스를 제공합니다. QEMU 프로세스는 그 자체로 가상 머신입니다. 프로세스에 신호를 전송하여 종료하고 top을 사용하여 프로세서 소비를 검사 할 수 있습니다.

    그러나 QEMU를 실행하는 방식계층화 된 제품 libvirt에게 가상 머신에서 시작, 중지 또는 다른 호스트로 마이그레이션하는 작업을 수행하도록 요청하는 것입니다. 

     

    Red Hat이 제공하는 KVM을 사용하는 모든 소프트웨어는 libvirt를 통해 이를 수행해야한다는 점에서 이 모델을 한 단계 더 발전 시켰습니다. 그 이유는 libvirt는 단순한 관리 인터페이스 그 이상이기 때문입니다.

     

    QEMU / libvirt 분할은 보안을 위해 매우 중요합니다.

    QEMU 프로세스는 게스트의 입력과 명령을 처리하기 때문에 잠재적으로 악의적인 활동에 노출됩니다. 따라서 가상 머신을 실행하는 데 필요한 리소스에만 액세스 할 수있는 제한된 환경에서 실행해야합니다. 이것은 QEMU와 libvirt가 [1] 을 따르도록 설계된 최소 권한 원칙입니다 .

    반면 Libvirt는 게스트에게 보이지 않으므로 QEMU 프로세스를 제한하는 가장 좋은 장소입니다. 제한된 환경을 설정하는데 높은 권한이 필요한지 여부는 중요하지 않습니다. Libvirt는 파일 시스템 소유권 및 권한에서 cgroup 및 SELinux 다중 카테고리 보안에 이르기까지 다양한 기술을 결합하여 QEMU를 제한합니다. 이러한 기술은 함께 QEMU가 다른 가상 머신의 리소스에 액세스 할 수 없도록합니다.

     

    외부 세계

    QEMU 및 libvirt가 가장 일반적으로 배포되는 KVM 사용자 공간이지만이 영역에서 유일한 오픈 소스 프로젝트는 아닙니다.

    존재하는 많은 대안 중 대부분은 특정 틈새 시장을 충족시킵니다. 예를 들어, 첫 번째 대체 KVM 사용자 공간 옵션 중 하나는 kvmtool 입니다. 2011 년에 시작되었고 당시 lkvm이라는 이름은 Linux 커널 개발자를 대상으로하여 Linux에서 작업 할 때 가상 머신을 더 쉽게 사용할 수있는 방법을 제공했습니다. 요즘에는 주로 새로운 아키텍처에서 KVM을 불러오는 데 사용됩니다.

    또 다른 중요한 KVM 기반 가상 머신 모니터는 crosvm입니다. Crosvm은 ChromeOS 내에서 Linux 애플리케이션을 실행하기 위해 Google에서 개발했습니다. 이 프로젝트는 2017 년에 시작되었으며 Crostini 라는 더 큰 지원 스택의 일부입니다 . 이 스택에는 또한 libvirt와 유사한 임무를 수행하는 Concierge라는 권한있는 설정 데몬이 포함되어 있습니다.

     

    결론

    앞서 언급했듯이 QEMU는 독립적으로 실행될 수 있지만 에뮬레이션이 전적으로 소프트웨어에서 수행되기 때문에 매우 느립니다. 이를 극복하기 위해 QEMU는 물리적 CPU 가상화 확장을 사용할 수 있도록 KVM을 가속기로 사용할 수 있도록합니다. 

    QEMU는 사용자 공간 내에서 실행되고 가상 하드웨어 에뮬레이션을 수행하는 유형 2 하이퍼 바이저,

    KVM은 커널 공간에서 실행되는 유형 1 하이퍼 바이저로서 사용자 공간 프로그램이 다양한 프로세서의 하드웨어 가상화 기능에 액세스 할 수 있도록합니다.

    As previously mentioned, QEMU can run independently, but due to the emulation being performed entirely in software it is extremely slow. To overcome this, QEMU allows you to use KVM as an accelerator so that the physical CPU virtualization extensions can be used. So to conclude: QEMU is a type 2 hypervisor that runs within user space and performs virtual hardware emulation, whereas KVM is a type 1 hypervisor that runs in kernel space, that allows a user space program access to the hardware virtualization features of various processors.[3]

     

    KVM은 고전적인 엔터프라이즈 가상화에서 gVisor 및 Enarx와 같은 혁신적인 샌드 박스 솔루션에 이르기까지 광범위한 가상 머신 모니터 및 애플리케이션을위한 커널 인프라를 제공합니다.

    Red Hat은 안전하고 효과적이며 완벽하게 작동하는 가상화 스택을 제공하기 위해 KVM과 상호 작용하는 강력한 조합으로 QEMU 및 libvirt를 선택했습니다. 오늘날까지도 KVM 가상화를 사용하는 가장 풍부한 기능의 방법으로 남아 있습니다. 

     

    KVM/QEMU 가상화 환경

     

    'Openstack' 카테고리의 다른 글

    openstack release 확인  (0) 2021.07.06
    DPDK vs SR-IOV  (1) 2021.07.05
    instance의 interface, mac 정보 조회  (0) 2021.05.28
    RHOSP13 - 500노드 이상 배포 시 디렉터 튜닝  (0) 2021.05.26
    horizon - multiple domain enable  (0) 2021.05.26
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기