成本是永恒的话题。
虚拟化的目标也是降低成本,体现为对IT资源的充分利用。
一、虚拟化发展脉络
20世纪50~70年代,大型机应用广泛。但也比较贵,如何节省成本成为考虑的因素。一种简单的想法,多个终端用户能够共享同一大型机。
从时间的角度来考虑,就是将CPU时间划分成非常小的时间片,每个时间片执行不同用户的工作任务,并通过轮询的方式进行调度。这样,表面上不同用户的任务在同一硬件资源上都得到了执行,本质上是后台是“分时共享”大型机。20世纪60年代,IBM在其System/360中实现了该分时系统,并在System/370正式命名为虚拟机。
20世纪80年代,硬件成本降低,虚拟化技术逐步被放弃。
20世纪90年代,Win-Intel联盟、Linux操作系统的发展,x86服务器架构应用广泛,成为服务器硬件设施的主流。但X86计算机架构,最早着眼于性能要求不高的场景,没有考虑对虚拟化技术的支持。
人们在使用x86服务器时,为了满足业务的需求,通常会对业务流程进行压测,得到业务所需的x86服务器配置,这种配置往往采用按照业务最高的要求。这样,在日常运行中,就会导致服务器的CPU利用率比较低,处于10%~30%之间,也就是服务器资源没有得到充分利用。
随后,各个公司推出了各种虚拟化解决方案:
二、虚拟化概念与架构
虚拟化是什么?
IBM公司给出的定义比较有代表性:“虚拟化是资源的逻辑表示,它不受物理限制的约束。”
简单地说,就将X86服务器硬件资源进行抽象,在其上构建一台台虚拟机。虚拟机与X86服务器没有什么不同,可以安装操作系统,部署用户APP并运行。
那么,如何实现虚拟化呢?
在硬件资源和虚拟机之间,需要有一个抽象层,向下对硬件进行抽象,向上提供人虚拟机,并确保这些虚拟机之间是独立且隔离的。这个抽象层称为虚拟机监控器(Virtual Machine Monitor,VMM)。
通常情况下,将X86服务器上的操作系统称为Host OS(宿主),将虚拟机的操作系统称为Guest OS(客户)。
根据VMM是否直接部署在硬件上,又分为宿主型、裸机型和混合型。
根据虚拟的资源类型来划分,虚拟化又可以分为计算虚拟化、存储虚拟化和网络虚拟化。
三、实现机制
前面提到,X86架构在初始设计时,并未考虑虚拟化的情况。这意味着后续硬件支持虚拟化时,必然采用打补丁的方式。
这里仅讨论CPU虚拟化。
在x86架构的CPU指令集中,有Ring0、Ring2、Ring2、Ring3四个状态,其中,Ring0权限最高,操作系统拥有此权限,能够直接管控所有资源。Ring3权限最低,应用程序拥有此权限。应用程序可以访问自己权限内的硬件资源,不能访问Ring0权限内的硬件资源。
从运行态上来看,虚拟机是x86服务器上的进程,拥有Ring3权限。不具有Host OS的Ring0权限,无法访问整个硬件资源,此时如果直接访问,则会被Host OS捕捉到并触发异常,弹出警告窗口。
那么,如何才能Guest OS拥有Ring0权限呢?从x86架构的原始设计来看,不可能。
退一步,让Guest OS自认为的拥有Ring0权限。这就需要底层VMM或者硬件做到“Guest OS自认为的权限”,以此来欺骗Guest OS。
先来看看VMM如何做?
一种方法是将欺骗进行到底。
Guest OS不做任何修改,依然是那个追风少年,VMM依然变成一个保姆,有求必应。但VMM也是有策略的:
针对一些不敏感的指令,VMM直接进行“翻译”,调用Host OS,为Guest OS模拟出它所需要的包括CPU、磁盘、内存、网卡、显卡等抽象硬件资源。
针对一些敏感指令,如reboot,VMM考虑到会影响整个x86服务器,则将进行“模拟”,转换为只针对特定Guest OS 的reboot指令。
另一种是认清现实,就是一个虚拟机。
告知Guest OS一些细节,Guest OS自身做一些调整,修改指令集中的敏感指令和核心态指令,使得Host OS能够判断出是谁要访问硬件资源,从而提供相应的硬件抽象。
再来看看,硬件如何做?
原来x86架构包含4个权限的指令集,现在打补丁。引入VMX新模式:也就是Virtual Machine eXtension,包括根操作模式(VMX Root Operation)和非根操作模式(VMX Non-Root Operation)。
VMM运行在根操作模式,Guest OS运行在非根操作模式,具有Ring 0权限,可直接访问硬件资源,同时,对于reboot等敏感指令,则由硬件辅助,直接切换到 VMM 执行,转换为只针对特定Guest OS 的指令。
这就是Intel的VT-x方案基本思想。
四、实现技术
虚拟化有很多实现技术,如KVM、Xen、VMware、Virtual Box、Hyper-V 等,这里仅介绍KVM。
KVM(Kernal-based Virtual Machine)是基于Linux内核的开源虚拟化方案。KVM提供CPU虚拟化、内存虚拟化,而I/O部分,则借助于QEMU实现( QEMU早于KVM )。
KVM虚拟化方案使用的是VT-x的VMX模式。其技术架构如下:
五、工具
针对众多的虚拟化实现技术,云计算IaaS平台通常采用兼容并包的策略,为了简化处理,引入了中间适配层:libvirt。libvirt支持界面和CLI命令行的方式,如virsh、virt-manager。
事实上,现有的云计算框架平台使用了libvirt的API 来管理虚拟机,如 OpenStack。
全部0条评论
快来发表一下你的评论吧 !