前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[virt][concept]虚拟化技术概论--KVM,QEMU,Libvirt

[virt][concept]虚拟化技术概论--KVM,QEMU,Libvirt

作者头像
皮振伟
发布2018-04-09 11:16:57
1.9K0
发布2018-04-09 11:16:57
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言: 以作者的经验来看,虚拟化的跨度比较大,很多概念比较难以理解,本来以为“硬件行为,就是这样的”好多概念,都变成虚拟的了。 作者对kernel略懂一二,结合过往的很多经验来看,就更加难以理解了~ 所以,作者尝试着把理解的过程描述出来(尽管作者在虚拟化上面,谈不上很专业,这里还是不自量力一下了)。 分析: 硬件概念:在分析虚拟化原理之前,先来看一下“本来就应该这样”的硬件设计图。 从Intel官网(http://download.intel.com/design/chipsets/datashts/29054901.pdf)下载文档。 下图就是选自文档的Intel 440 FX的块图:

分析块图的拓扑结构,再结合文档(以及过去的一些经验),不难发现,一个完整的平台应该包括以下: 1,CPU 2,Memory 3,IRQ chip 4,PCI Bus 5,PCI Bridge&PCI Device 6,Disk 7,Net Card 8,Other Device(isa,usb,video,keyboard,mouse,IDE controller,USB controller….) 虚拟化:如果想要成功跑起来虚拟机,就要虚拟出来上述的各种硬件出来(但不限于上述),并且,按照类似的拓扑结构组织起来。 所以,本文的主角出场了:KVM,QEMU。 KVM在Linux上被编译成为一个内核模块,提供最核心的CPU虚拟化能力,硬件的二级页表能力,中断注入能力等。

CPU的虚拟化:Intel的CPU提供的VMX能力,能够虚拟化出来CPU,使CPU跑在VM模式下,跑在VM模式下CPU遇到异常,会退出VM模式,然后KVM会handle住各种异常(异常不代表就是错误),要么KVM自己处理,要么交给QEMU来处理。 Memory的虚拟化:CPU进入VM模式下,其实就是在跑Guest OS的代码。Guest OS(以Linux为例)中,跑在protected mode,使用虚拟内存,Guest OS会把Guest Virtual Memory Address映射成Guest Physical Memory Address。而虚拟机在Host OS中,本身只是一个普通的进程,Host OS则需要把虚拟机进程的Host Virtual Memory Address映射成为Host Physical Memory Address。这样一个GVA->GPA->HVA->HPA的过程,会由硬件通过TDP(two dimentional paging)实现。 QEMU则完成了硬件设备的虚拟化。 PCI Bus虚拟化:QEMU虚拟化出来PCI Bus,用软件模拟出来PCI规范。当CPU访问PCI设备(PCI设备通过Bus,Device,Function来寻址)的时候,QEMU通过PCI Bus找到相应的设备,完成通信。 PCI Bridge&PCI Device的虚拟化:PCI Bridge可以用来扩展PCI Device的数目(一条PCI Bus最多有32个Device),可以在扩展后的Bus上继续添加PCI Device。而QEMU的PCI Device则完整的模拟硬件的PCI Device,PCI Device有自己的配置空间(关于PCI的配置空间,在这里不解析),QEMU需要实现PCI Device的配置空间读写能力,以便Guest可以得到配置;另外,QEMU还需要模拟出来PCI Device的Port IO/Memory Mapped IO能力,完成和Guest的通信。 Disk:在这里,暂时不分析block&file的区别,也不分析raw&qcow2的区别。总之,就是让虚拟机觉得自己有磁盘。在硬件上,磁盘是一个块设备,它可以接在IDE控制器上,也可以接在SCSI控制器上,还可以接在USB控制器上,在QEMU上,还可以让磁盘作为一个PCI Device直接接在PCI Bus上。 Net Card:网卡做为一个PCI Device,直接接在PCI Bus上。在Host中,可以使用TAP,网桥创建虚拟网卡。 Other Device的虚拟化:IDE controller做为一个PCI Device接在PCI Bus上,Disk或者CDROM可以接在IDE controller上,这里需要说明一下,IDE controller只能接4个IDE Device;SCSI controller可以做为一个PCI Device接在PCI Bus上,SCSI controller可以接15Disks。。。 Libvirt:Libvirt提供了包括qemu,lxc,vmware等多个虚拟化产品的管理能力。Libvirt提供了更加便于管理的xml管理机制,更加强大应用的用户管理工具virsh,更加严格的参数校验和状态维护能力等。 另外,libvirt同时提供了计算,存储,网络的管理能力。 后记: 给作者的感觉,Disk和Net Card的发挥空间更大一些,容易出问题,需要改动的地方也会比较多。各种挂卷了,卸卷了,XX厂家支持120块盘了;挂载光驱,什么本地光驱了,什么远程光驱了,什么迁移不能带光驱了。。。

概念性的东西偏多,不分析代码了。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
流计算 Oceanus
流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的企业级实时大数据分析平台,具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档