Openstack前传七(KVM的缺陷及其优化)

KVM 缺陷:

当然,优点自不用说了。像因为是完全虚拟化,所以不用修改客户OS. 另外是内核中支持的,能充分的利用Linux本身的进程调度等特性。在内存方面呢,因为有了Intel_EPT特性的支持,内存虚拟化也还不错。

而缺点呢:都知道,对于IO的虚拟化就不太够了,虽然有了QEMU这个强大的模拟软件,但是效率不是太理想。于是乎,出现了virtio这个Linux上的设备驱动标准框架。


首先,让我们来分析下QEMU虚拟IO的原理:

-----------当客户机的设备驱动程序发起IO请求时,KVM中的IO操作会拦截这次IO,然后在本次处理之后将本次IO请求的信息存放到共享页,并通知用户空间的QEMU。

-----------QEMU模拟程序获得IO操作信息之后,交由硬件模拟代码模拟出本次的IO操作。完成之后,将结果放回在共享页中,并通知KVM模块中的IO操作捕获代码。

-----------最后KVM将信息返回给客户机。

由此可见,KVM IO是连接客户机和QEMU的中间件。

这样我们做个总结:

QEMU的优点是可以模拟出各种很老很金典的设备,而且不需要修改Guest Os。 缺点是每次IO操作的路径很长,需要多次上下文切换,性能较差.


如何优化: Virtio出现了

Virtio,是一个在Hypervisor之上的抽象API接口,让客户机知道自己运行在虚拟机中,这样类似于半虚拟化。

内部结构上分为两部分,前端驱动是客户机中存在的驱动程序,而后端处理是在QEMU中实现。virtio是一层虚拟队列接口,它利用某种协议将前端和后端进行通信。这样可以达到与原生硬件差不多的性能。

当然,也是有缺陷的,因为必须要让客户机安装特定的virtio驱动让它知道是运行在虚拟化环境中的,并且要按照virtio的规定格式传输。

这样使用Virtio兼容性则不太好,并且IO频繁的时候CPU得使用率较高。


再来一神器 :设备直接分配(VT-d)

这种方式将宿主机中的PCI物理设备直接分配给客户机完全使用。 KVM虚拟机支持将宿主机的PCI PCIE设备附加到虚拟化的客户机中,从而让客户机依独占的方式访问这个PCI.这样客户机对设备的IO交互则不怎么需要KVM或者Hypervisor的参与了。

优点是提高了IO性能,减少了Virtio 中CPU的消耗。缺点是硬件有限,也不适合动态迁移。


没完了,设备直接分配给多个客户机(SR-IOV):

不做了解了,反正就是合着将一个物理设备在宿主机中隐藏,并且分配到指定的客户机中去。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值