首页 > 其他 > 详细

qemu,kvm,libvirt 介绍

时间:2020-03-05 14:25:33      阅读:77      评论:0      收藏:0      [点我收藏+]

  平常工作中使用了虚机环境,所以要了解下qemu,kvm,libvirt相关概念及三者关系,技术方面的在后续学习后在输出。

 

QEMU

  Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件,Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。由于所有的指令都要从Qemu里面过一手,因而性能较差。

  技术分享图片

KVM

  KVM是linux内核的模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过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

  Qemu将KVM整合进来,通过ioctl调用/dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备。qemu模拟IO设备(网卡,磁盘等),kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。Qemu模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。

技术分享图片

   qemu-kvm工作模式

  在qemu全虚拟化的模式下,当客户机的设备驱动发起IO请求时,KVM会捕获这次IO请求,进行初步处理之后放入将IO请求放入KVM和qemu的共享内存页,然后通知用户空间的qemu进程;用户空间qemu进程会从内核中读取这个IO请求,由硬件模拟模块模拟这个IO操作;qemu的硬件模拟模块会根据IO请求的不同,跟不同的真实物理设备驱动进行交互,完成真正的IO操作(比如通过物理网卡访问外部网络),并将结果放回共享内存页,通知KVM的IO处理模块;KVMIO处理模块读取处理结果并返回给客户机设备驱动。

qemu全虚拟化方式处理IO,每次IO操作都要发送多次VMExit/VMEnrty、上下文切换、数据复制,性能较差。

技术分享图片

 

libvirt

  libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。

技术分享图片

 

 qemu,kvm,libvirt三者之间关系

  kvm技术中,应用到2个东西:qemu + kvm

  kvm:负责CPU虚拟化 + 内存虚拟化,实现了CPU和内存的虚拟化,但kvm不能模拟其他设备;kvm在linux内核态。

  qemu:模拟IO设备(网卡,磁盘),kvm 加 qemu之后就能实现真正意义上的服务器虚拟化技术;qemu在用户态。

因为用到了上面两个,所以一般都称为qemu-kvm。

  libvirt:调用虚拟化技术的接口用于管理。用libvirt管理方便,直接用qemu-kvm的接口太繁琐。

 

 

 【说明:上述相关介绍来自网络搜索结果,非原创】

 

 

 

 

 

 

 

  

 

qemu,kvm,libvirt 介绍

原文:https://www.cnblogs.com/tjb-home/p/12419818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!