文章目录
这两天终于看完了Xen,开始整理笔记到博客上来,并做做总结,过两天再去实践一下Xen。才疏学浅,如果理解有误,请大家不吝赐教。
本文的翻译找到地址如下,希望本人对文章的阅读消化能够帮助到大家的理解:
https://www.hackhome.com/InfoView/Article_113992.html
0. 本文关键名词解释
VMM -> Virtual Machine Monitor,虚拟机监视器。
Xen -> 即是整体架构中的hypervisor,相较于GuestOS有最高权限。
Guest OS -> 指要运行到VMM之上的OS。
Domain -> Xen中的一个运行中的操作系统。
GuestOS和Domain的关系就像Program和Process关系一样。
UML:User Mode Linux,虚拟化水平性能测试的关键,测试用户态下程序跑的咋样。
1. Prequisites知识、概念总结
这里对文中的一些Prerequisites知识进行总结,包含名词,传统方法等,这里结合我自己的理解记录如下:
-
Q:什么叫做VMM,什么又是hypervisor?
A:VMM全称叫做Virtual Machine Monitor,我们以前直接叫VMware这样的软件为虚拟机,在语义上实际上是不太对的,也应该叫做VMM才对,它作为硬件和操作系统的中介,其实是众多虚拟机的一个监控。 -
Q:什么是全虚拟化(Full Virtualization),半虚拟化(Para Virtualization),与现在DevOps所流行的Docker,LXC(Linux Container)有什么区别?
A:三种虚拟化方式的不同在于其虚拟化工作所属层次、虚拟化的泛化力度等方面,简述如下:- 全虚拟化的目的在于完全在硬件层以上建立VMM,大规模兼容操作系统,即可以当VMM不存在,安装虚拟机。
- 半虚拟化会尽可能的以较低修改代价来**迁移(port)**原有操作系统到VMM上,以支持更优的性能。
- 类Docker技术,处于操作系统层的虚拟化,进程级的轻量虚拟化技术,采用cgroup控制资源和namespace控制命名空间隔离进程,为内核所提供的支持。
-
Q:什么是crosstalk?
A:Crosstalk发生在多个实体(进线程,网络请求)争夺资源时产生的服务性能(QoS,Quality of Service)无法保障的问题,所以crosstalk通常与QoS写在一起,叫QoS crosstalk。
从应用层软件来看,例如网络服务器在接收到大量请求后,如何保证每个客户端得到了应得的响应性能?如果无法拆分整合这些流或请求(从web角度来看,不结合业务肯定较难),这里便需要合适的调度算法对请求排序,优化多路复用。Web服务器未响应某些请求事小,但是在VMM这里就是大问题,因为服务对象是OS。参考:https://www.cl.cam.ac.uk/research/srg/netos/projects/archive/pegasus/papers/jsac-jun97/node4.html -
Q:全虚拟化如何实现?半虚拟化如何实现?
A:全虚拟化包括软件辅助和硬件辅助两个方面,下图是软件辅助下的全虚拟化,VMM会将本来操作系统内核所要执行的权限下的指令(需要陷入内核执行的代码)全都捕捉,然后再向下请求。
为了实现全虚拟化所应该具有的泛化能力,基于软件辅助的VMM会拆解很多指令,即换为元指令的组合。所以全虚拟化的工作压力应该主要在于学习各个操作系统的特权指令,然后用元指令替换。
PS:我们常用的VMware就是如此。
硬件辅助下的全虚拟化如下图所示:可以看出来HostOS不再需要,VMM成为了HostOS。区别在于VMM在硬件支持下可以直接将特权指令进行执行。这里可以想象一个VMM的设计,可以用一个HostOS加上支持虚拟化的内核模块,便成为了VMM。这样的VMM的代表性技术就是**KVM(kernel based virtual machine)**虚拟机,知道了它的实现方案,即可顾名思义。
半虚拟化的结构会对VMM进行功能的扩充,VMM会更加的像一个元操作系统,拥有更多的功能,同时它也需要对GuestOS进行修改,实现设计目的,Xen就是一个半虚拟化的成果。对于它的架构可以参考Xen架构图,Xen虚拟了CPU,内存,磁盘网络模块,建立了一个高级的OS。
-
Q:x86架构由于本身设计并未太多考虑虚拟化的功能,留下了哪些坑?
A:本文发布时,x86架构中的一些特权指令允许在Ring1下执行,导致在全虚拟化环境下的VMM难以捕捉这样的指令。后续有一些方法通过扫描GuestOS的二进制代码,强行捕获