KVM-Qemu-Libvirt三者之間的關係

Qemu

Qemu是一個模擬器,它向Guest OS模擬CPU和其他硬件,Guest OS認爲自己和硬件直接打交道,其實是同Qemu模擬出來的硬件打交道,Qemu將這些指令轉譯給真正的硬件。

由於所有的指令都要從Qemu裏面過一手,因而性能較差wKiom1WdDYyjiVZiAAECBtAEQ5E590.jpg

KVM

KVM是linux內核的模塊,它需要CPU的支持,採用硬件輔助虛擬化技術Intel-VTAMD-V,內存的相關如Intel的EPT和AMD的RVI技術,Guest OSCPU指令不用再經過Qemu轉譯,直接運行,大大提高了速度,KVM通過/dev/kvm暴露接口,用戶態程序可以通過ioctl函數來訪問這個接口。見如下僞代碼:

open("/dev/kvm")
ioctl(KVM_CREATE_VM)
ioctl(KVM_CREATE_VCPU)
for (;;) {
    ioctl(KVM_RUN)
        switch (exit_reason) {
        case KVM_EXIT_IO: 
        case KVM_EXIT_HLT:
    }
}

 KVM內核模塊本身只能提供CPU和內存的虛擬化,所以它必須結合QEMU才能構成一個完成的虛擬化技術,這就是下面要說的qemu-kvm。


qemu-kvm

QemuKVM整合進來,通過ioctl調用/dev/kvm接口,將有關CPU指令的部分交由內核模塊來做。kvm負責cpu虛擬化+內存虛擬化,實現了cpu和內存的虛擬化,但kvm不能模擬其他設備。qemu模擬IO設備(網卡,磁盤等),kvm加上qemu之後就能實現真正意義上服務器虛擬化。因爲用到了上面兩個東西,所以稱之爲qemu-kvm

Qemu模擬其他的硬件,如Network, Disk,同樣會影響這些設備的性能,於是又產生了pass through半虛擬化設備virtio_blk, virtio_net,提高設備性能。

 wKiom1WdDc2CEwy6AAGPf4VzQao172.jpg

 

libvirt

libvirt是目前使用最爲廣泛的對KVM虛擬機進行管理的工具和APILibvirtd是一個daemon進程,可以被本地的virsh調用,也可以被遠程的virsh調用,Libvirtd調用qemu-kvm操作虛擬機。

wKioL1WdD72RRy8mAAIuDm6sVAY591.jpg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章