虚拟化一。定义
虚拟化在网络上其实有很多定义,在百度,维基百科,都有不同的定义。百度:虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
但其实,在我所理解的虚拟化中,主要就是为了解决去耦合,利用计算机硬件资源,节约硬件成本而形成的一种技术。
那么要怎么去讲云计算和虚拟化之间的关系呢,简单来说,虚拟化就是云计算的基础。云计算以虚拟化为核心,虚拟化则为云计算提供技术支持。
二。分类
其实总的来说 如今的主流虚拟化技术 从大致来说吧 主要分为:
1)最常用的就是基于虚拟机(Hypervisor-based)的虚拟化
2)基于容器的虚拟化
区别:
虚拟机技术已经发展了很多年,虚拟机和虚拟化层间的接口、虚拟机镜像格式等都已经标准化了,相应的管理工具、分布式集群管理工具都有比较完善的解决方案,而容器最近几年才兴起,配套技术和标准还在完善中;
虚拟机由于有GuestOS存在,可以和宿主机运行不同OS,而容器只能支持和宿主机内核相同的操作系统;
虚拟机由于有VMM的存在,虚拟机之间、虚拟机和宿主机之间隔离性很好,而容器之间公用宿主机的内核,共享系统调用和一些底层的库,隔离性相对较差;
容器比虚拟机明显更轻量级,对宿主机操作系统而言,容器就跟一个进程差不多。因此容器有着更快的启动速度(秒级甚至更快),更高密度的存储和使用(镜像小)、更方便的集群管理等优点。同时由于没有GuestOS存在,在容器中运行应用和直接在宿主机上几乎没有性能损失,比虚拟机明显性能上有优势。(转载至赶路jadj)
目前我学习的主要在基于虚拟机的虚拟化,虚拟化的分类有很多,我们只学习其中这种分类:
1.服务器虚拟化
2.网络虚拟化
3.存储虚拟化
4.桌面虚拟化
5.应用虚拟化
主要服务器虚拟化技术分为:
1.cpu虚拟化
2.内存虚拟化
3.IO虚拟化
理解到大多数的虚拟化分类都可以分为以下三类:(程度)
1.全虚拟化(优点:Guest OS无需修改,速度和功能都非常不错,更重要的是使用非常简单
缺点:性能不太优异)
2.半虚拟化()
3.硬件辅助虚拟化
首先来说,CPU虚拟化
a.CPU全虚拟化
b.CPU半虚拟化
(半虚拟化主要使用的是HyperCall批处理和异步的这两个优化方式,加快了速度,让它相当于物理机。)
c.CPU硬件辅助虚拟化
(主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。)
内存虚拟化
a.内存全虚拟化.(影子页表)
b.内存半虚拟化(页表写入法)
c.硬件辅助虚拟化(扩展页表EPT(extended page table))
(EPT通过使用硬件虚拟化技术,使其能在原有的页表的基础上,增加一个EPT页表,用于记录GPA到MA的映射关系。VMM预先把EPT页表设置到CPU中。)
IO虚拟化
目前I/O设备的虚拟化方式主要有三种:
a.设备接口完全模拟
(软件化模拟,精确的模拟出一个经典的虚拟设备,无需修改Guest OS,成本低,性能低。缺点是为完成一次操作要涉及到多个寄存器的操作,使得 VMM 要截获每个寄存器访问并进行相应的模拟,导致多次上下文切换,性能较低。)
b.前端/后端模拟
(例:Xen Guest OS中的驱动程序为前端 (Front-End, FE),前端驱动将来自其他模块的请求通过与Guest OS间的特殊通信机制直接发送给Guest OS的后端驱动,后端驱动在处理完请求后再发回通知给前端(Xen即采用该方法)。 优点是由于基于事务的通信机制,能在很大程度上减少上下文切换开销,没有额外的硬件开销,缺点是需要VMM实现前端驱动,后端驱动可能成为瓶颈。)
c.直接划分。
(直接将物理设备分配给某个 Guest OS,由Guest OS直接访问I/O设备(不经 VMM),目前与此相关的技术有IOMMU(Intel VT-d, PCI-SIG 之 SR-IOV 等),旨在建立高效的I/O虚拟化直通道。优点是直接访问减少了虚拟化开销,缺点是需要购买额外的硬件。)
快3导师群令的时候,系统会切换到VMM,让VMM来处理特殊指令。)
内存虚拟化
a.内存全虚拟化.(影子页表)
b.内存半虚拟化(页表写入法)
c.硬件辅助虚拟化(扩展页表EPT(extended page table))
(EPT通过使用硬件虚拟化技术,使其能在原有的页表的基础上,增加一个EPT页表,用于记录GPA到MA的映射关系。VMM预先把EPT页表设置到CPU中。)
IO虚拟化
目前I/O设备的虚拟化方式主要有三种:
a.设备接口完全模拟
(软件化模拟,精确的模拟出一个经典的虚拟设备,无需修改Guest OS,成本低,性能低。缺点是为完成一次操作要涉及到多个寄存器的操作,使得 VMM 要截获每个寄存器访问并进行相应的模拟,导致多次上下文切换,性能较低。)
b.前端/后端模拟
(例:Xen Guest OS中的驱动程序为前端 (Front-End, FE),前端驱动将来自其他模块的请求通过与Guest OS间的特殊通信机制直接发送给Guest OS的后端驱动,后端驱动在处理完请求后再发回通知给前端(Xen即采用该方法)。 优点是由于基于事务的通信机制,能在很大程度上减少上下文切换开销,没有额外的硬件开销,缺点是需要VMM实现前端驱动,后端驱动可能成为瓶颈。)
c.直接划分。
(直接将物理设备分配给某个 Guest OS,由Guest OS直接访问I/O设备(不经 VMM),目前与此相关的技术有IOMMU(Intel VT-d, PCI-SIG 之 SR-IOV 等),旨在建立高效的I/O虚拟化直通道。优点是直接访问减少了虚拟化开销,缺点是需要购买额外的硬件。)