Openstack前传六(KVM初探)

来源:互联网 发布:foxbot编程序软件 编辑:程序博客网 时间:2024/06/07 10:05

KVM:

Kernel-based Virtual Machine:基于内核的虚拟机。只要加载了KVM模块,OS摇身一变变为了Hypervisor。

KVM只是扩展了内核的功能,用的都是内核的驱动。

Guest OS运行的模式是来宾模式。这种模式下也有内核和用户空间, 那么如何使用硬件呢?

======CPU还是分点时间片,来提供了CPU的虚拟化。那么IO呢?

======IO必须得模拟呀,也是用的两次转换。创建模拟硬件命令 QEMU。

======实际上QEMU连CPU也是可以虚拟化的,可以直接跑的,当然这个模拟性能不太好,所以用了KVM.


所以组合就是KVM+QEMU. 经典搭配。 但KVM要求的是必须运行在硬件虚拟化和64bits的情况。另外全虚拟化的性能并不太好,所以出现了KVM的半虚拟化。

这就是 Virto。这样解决了IO完全虚拟化的缺陷。


硬件虚拟化(Intel):

之前一直提到了硬件虚拟化,说这个是KVM虚拟化的基础。那么他到底是什么意思呢? 我们都知道,虚拟机发送的对硬件操作的特权指令,是必须要VMM能进行捕获的,如果不支持硬件虚拟化,则只能通过软件模拟的方式来捕获。 而硬件虚拟化支持呢,则是CPU本身就提供了对硬件的虚拟化,即多了个Ring -1层。
这里VMM将客户机置于一种限制模式下运行,一旦客户机试图去访问物理资源,硬件会暂停客户机的运行,将控制权交给VMM。VMM还能利用硬件的虚拟化增强机制,将客户机对特定资源的访问完全由硬件重定向到VMM指定的虚拟资源,整个过程都不需要暂停客户机和VMM软件的参与。


为什么半虚拟化需要改OS

软件虚拟化可以在缺乏硬件虚拟化的平台上完全通过VMM软件来实现读虚拟机监控,但是付出的代价是软件复杂度的增加和性能的缺失。而解决办法是:改动OS.让客户机以为自己运行在虚拟环境下,能够与虚拟机监控协同工作。这样本质上弱化了对虚拟机特权指令的截获要求,将其转换成客户机的主动通知。
所以半虚拟化不支持Windows这类操作系统。

全虚拟化

全虚拟化提供了完整的虚拟X86平台,理论上支持任何操作系统,不需要对客户机OS进行修改。虽然性能没有半虚拟化好,但是后来出现了硬件虚拟化,全虚拟化使得性能大为改进。  以后的思路是,基于硬件的全虚拟化将是未来的核心。



0 0