1、虚拟化技术产生的背景
- 为了提高大型机的资源利用率和效率。在 20 世纪 60 年代,大型机是昂贵而稀缺的计算资源,为了让多种业务应用能够共享并充分利用大型机的集中化计算能力,IBM 等公司开发了虚拟化技术,将大型机划分为多个逻辑分区,每个分区可以运行一个独立的操作系统和应用。
- 为了适应分布式计算模型的发展。在 20 世纪 80 年代和 90 年代,随着客户端-服务器应用程序和廉价的 x86 服务器及台式机的普及,分布式计算模型成为了主流,虚拟化技术也随之衰落。但是,分布式计算模型也带来了一些问题,如管理复杂性、资源浪费、安全风险等。为了解决这些问题,VMware 等公司在 20 世纪末重新推出了- 基于 x86 架构的虚拟化技术,使得多个虚拟机可以在一台物理服务器上运行,实现了资源的优化和隔离。
- 为了支持云计算和新型应用的需求。在 21 世纪初,云计算和新型应用(如移动应用、微服务、容器等)的兴起,对计算资源的需求和灵活性提出了更高的要求。虚拟化技术作为云计算的基础,可以实现计算资源的快速部署、弹性扩缩、按需付费等特性。同时,虚拟化技术也不断创新和发展,出现了更多类型的虚拟化,如网络虚拟化、存储虚拟化、数据虚拟化、应用虚拟化等。
2、虚拟化是什么,为什么需要虚拟化?
虚拟化是指通过软件技术,将一台物理计算机分割成多个逻辑部分,每个逻辑部分都可以独立运行操作系统和应用程序,这些逻辑部分被称为虚拟机。虚拟化技术使得一个物理服务器能够同时运行多个虚拟机,虚拟化通过将计算资源(如 CPU、内存、存储和网络)虚拟化为多个虚拟机来实现这一目标。每个虚拟机都有自己的虚拟硬件,包括 CPU、内存、磁盘和网络接口等。每个虚拟机都可以独立运行不同的操作系统和应用程序,从而实现资源的共享和利用,提高了服务器的利用率。
如图所示的 Virtual Machine Monitor (VMM,虛拟机监控器,也称为 Hypervisor)层,就是为了达到虚拟化而引人的一个软件层。它向下掌控实际的物理资源(相当于原本的操作系统);向上呈现给虚拟机N 份逻辑的资源。为了做到这一点,就需要将虚拟机对物理资源的访问 “偷梁换柱”——截取并重定向,让虚拟机误以为自己是在独享物理资源。虚拟机监控器运行的实际物理环境,称为宿主机;其上虚拟出来的逻辑主机,称为客户机。
2.1 使用虚拟化技术带来了以下好处:
- 提高服务器利用率:通过虚拟化技术,一台物理服务器可以同时运行多个虚拟机,每个虚拟机都可以独立运行不同的操作系统和应用程序,从而充分利用服务器资源,提高服务器利用率。
- 简化管理和维护:虚拟化管理工具可以简化对虚拟机的管理和维护,例如快速创建、删除和迁移虚拟机等操作。
- 提高灵活性和可用性:虚拟机之间相互隔离,发生故障时不会影响其他虚拟机,同时可以快速迁移虚拟机到其他物理服务器上,提高应用程序的灵活性和可用性。
- 节省成本:通过虚拟化技术,可以在一台物理服务器上运行多个虚拟机,从而减少了硬件成本、能源消耗和数据中心空间。
2.2 虚拟化技术存在的一些缺点:
- 性能损失:虚拟化的本质是在物理服务器上创建多个虚拟机,共享硬件资源。如果虚拟机之间使用相同的资源,那么这些资源就会成为瓶颈,造成性能损失。此外,由于每个虚拟机都需要通过虚拟化软件来访问物理硬件资源,因此会导致额外的CPU和内存开销。
- 安全风险:虚拟化技术将多个虚拟机部署在同一台物理服务器上,其中一个虚拟机遭受攻击可能会影响其他虚拟机。此外,虚拟环境中存在虚拟机移动、复制等操作,这些操作也可能带来安全风险。
- 复杂性:虚拟化技术需要虚拟化软件和管理工具来完成虚拟机的创建、配置、监控、迁移和备份等任务,这些软件和工具的学习和操作都需要一定的专业知识和技能,增加了复杂性和难度。
- 单点故障:虚拟化技术使得多个虚拟机运行在同一台物理服务器上,如果该物理服务器发生故障,则会影响所有运行在其上的虚拟机。因此,在部署虚拟化环境时需要设计合理的冗余机制来避免单点故障。
- 扩大错误影响面:如果物理机出现故障或硬盘损坏,上面的所有虚拟机都会受到影响,可能导致数据丢失或不可用。
今天云计算的快速发展其实就是在利用虚拟化技术的优势、并通过其他技术来弥补虚拟化技术的缺点。
3、 虚拟化的分类
- 服务器虚拟化:是指将一台物理服务器划分为多个虚拟服务器,每个虚拟服务器都可以运行独立的操作系统和应用程序,共享物理服务器的硬件资源。服务器虚拟化可以提高硬件利用率,降低成本,提高灵活性和可靠性。
- 存储虚拟化:是指将多个物理存储设备抽象为一个逻辑存储池,从而屏蔽存储设备的物理特性,简化存储管理和配置。存储虚拟化可以提高存储空间利用率,实现数据备份和恢复,提高数据安全性和可用性。
- 网络虚拟化:是指将物理网络资源(如交换机、路由器、网卡等)抽象为逻辑网络资源,从而实现网络功能的软件化,简化网络部署和管理。网络虚拟化可以提高网络性能,实现网络隔离和负载均衡,提高网络安全性和可扩展性。
- 桌面虚拟化:是指将用户的桌面环境(包括操作系统、应用程序和数据)从本地计算机迁移到中央服务器上,并通过远程访问方式提供给用户使用。桌面虚拟化可以降低终端设备成本,实现桌面环境的集中管理和更新,提高用户体验和数据安全性。
- 操作系统虚拟化:是指在一台计算机上运行多个操作系统,每个操作系统都有自己的内核和用户空间,并通过一个称为 Hypervisor (虚拟机监控程序) 的软件进行管理和调度。操作系统虚拟化可以实现操作系统的隔离和兼容,支持多种类型和版本的操作系统并行运行。
4、服务器虚拟化技术的研究
软件虚拟化
软件虚拟化是指利用软件技术,在现有的物理平台上实现对物理平台访问的截获和模拟。软件虚拟化不需要硬件支持,但是会带来一定的性能开销,因为需要对客户机操作系统的敏感指令进行模拟或翻译。软件虚拟化的类型有完全虚拟化、半虚拟化、操作系统层虚拟化等。常见的软件虚拟化产品有QEMU(最纯粹的软件虚拟化,在没有启用硬件虚拟化辅助的时候,它通过软件的二进制翻译日仿真出;目标平台呈现给客户机,客户机的每一条目标平台指令都会被 QEMU截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行。由于每一条都需要这么操作一下,其虚拟化性能是比较差的,同时其软件复杂度也大大增加。但好处是可以呈现各种平台给客户机,只要其二进制翻译支持。)、VMware Workstation(windows用户最常用的一种,在windows系统中下载workstation后按照虚拟机,这时候虚拟机运营在OS层上的虚拟化层上)、VirtualBox等。
硬件虚拟化
硬件虚拟化是指通过硬件辅助支持模拟运行环境,使客户机操作系统可以独立运行,实现完全虚拟化的功能,而不需要虚拟化层截获。硬件虚拟化需要处理器或其他硬件设备提供的虚拟化扩展功能,如Intel-VT或AMD-V(CPU厂商的支持)。硬件虚拟化可以减少软件层的干预,提高虚拟机的性能和安全性。常见的硬件辅助虚拟化产品有KVM、Xen、Hyper-V等。以x86架构为例,它提供一个略微受限制的硬件运行环境供容户机运行 (non-rootmode ),在绝大多数情况下,客户机在此受限环境中运行与原生系统在非虚拟化环境中运行没有什么两样,不需要像软件虚拟化那样每条指令都先翻译再执行,而 VMM运行在 rootmode,拥有完整的硬件访问控制权限。仅仅在少数必要的时候,某些客户机指令的运行才需要被 VMM 截获并做相应处理,之后客户机返回并继续在 non-root mode 中运行。可以想见,硬件虚拟化技术的性能接近于原生系统目,并且,极大地简化了 VMM 的软件设计架构。
半虚拟化和全虚拟化
- 半虚拟化:
1)客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。
2)完全不需要 VMM 介入容户机的运行过程。
纯软件的虛拟化可以做到第一个目标,但性能不是很好,而且软件设计的复杂度大大增加。
那么如果放弃第一个目标呢?**让客户机意识到自己是运行在虚拟化环境里,并做相应修改以配合 VMM,这就是半虚拟化(Para-Virtualization)。**一方面,可以提升性能和简化VMM 软件复杂度;另一方面,也不需要太依赖硬件虚拟化的支持,从而使得其软件设计(至少是 VMM 这一侧)可以跨平台且是优雅的。“本质上,准虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,准虛拟化需要修改客户机操作系统的源代码来实现主动通知。”典型的半虚拟化技术就是virtio,使用virtio需要在宿主机/MM 和客户机里都相应地装上驱动。 - 全虚拟化:
与半虛拟化相反的,全虛拟化(Full Virtualization)坚持第一个理想化目标:**客户机的操作系统完全不需要改动。敏感指令在操作系统和硬件之间被 VMM 捕捉处理,客户操作系统无须修改,所有软件都能在虚拟机中运行。**因此,全虚拟化需要模拟出完整的、和物理平台一模一样的平合给客户机,这在达到了第一个目标的同时也增加了虚拟化层(VMM)的复杂度。性能上,2005年硬件虚拟化兴起之前,软件实现的全虚拟化完败于 VMM 和客户机操作系统协同运作的半虚拟化,这种情况一直延续到2006年。之后以Intel VT-X、AMD-V为代表的硬件虚拟化技术的兴起,让由硬件虚拟化辅助的全虚拟化全面超过了半虚拟化。但是,以virtio 为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性,依然受到广泛的欢迎。
关于CPU敏感指令的补充:
结合下图来说明:
- CPU的ring0-ring3是指Intel的x86处理器的特权级别,用来进行访问控制。特权级别共分为4层,从ring0到ring3,ring0拥有最高的权限,可以访问所有层的数据和执行所有指令,ring3拥有最低的权限,只能访问ring3层的数据和执行非特权指令。
- 一般来说,操作系统工作在ring0层,拥有对硬件的完全控制,而应用程序工作在ring3层,受到操作系统的管理和保护。如果应用程序需要执行特权指令或访问特权数据,就需要通过系统调用或中断等方式切换到ring0层,并由操作系统代为执行。
- ring1和ring2层是中间层,可以访问本层以及权限更低层的数据和指令。它们主要是为其他驱动程序或虚拟化软件提供服务。但是在现代操作系统中,这两层很少被使用,因为大多数驱动程序都运行在ring0层或者用户态。
因此如果运行虚拟化的VM,其实原则上是他是在ring1,没办法直接运行ring0的指令,这样就需要去转换,先通过guest os 给到VMM,然后VMM再给到操作系统层,再到CPU的过程。但是这样其实并不好,因为有转换的开销,我们的理想是guest os直接能运行在ring 0下,这样虚拟机的效率就被提高了。intel和AMD的CPU推出了硬件辅助虚拟化技术实现了这一工作 - 以intel为例:因特尔intel-VT技术是一种硬件辅助虚拟化技术,它可以让一个CPU工作起来就像多个CPU并行运行,从而使得在一台电脑内可以同时运行多个操作系统。它的核心思想是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。
- 对于虚拟化来说,intel-VT技术可以解决x86架构在虚拟化方面存在的缺陷,比如敏感指令的处理、内存管理、I/O设备访问等。它可以使未经修改的Guest OS运行在特权级0,同时减少VMM对Guest OS的干预。它还可以通过使VMM将特定I/O设备直接分配给特定的Guest OS,减少VMM对I/O处理的管理,不但加速数据传输,且消除了大部分性能开销。
-
对于ring0-3特权指令来说,intel-VT技术可以实现根模式和非根模式之间的相互转换,从而实现对特权指令的控制和管理。在根模式下,VMM运行在ring0层,拥有最高的权限,可以访问所有层的数据和执行所有指令。在非根模式下,Guest OS运行在ring0层,但是受到VMM的监控和保护。如果Guest OS执行了敏感指令或发生了中断等情况,会触发VMExit操作,切换回根模式运行VMM。VMM根据VMExit的原因作出相应处理,处理完成后再通过VMEntry操作切换回非根模式继续运行Guest OS。
Type-1型虚拟化和2型虚拟化
从软件框架的角度上,根据虚拟化层是直接位于硬件之上还是在一个宿主操作系统之上,将虛拟化划分为Type-1和Type-2。
- Type-1型虚拟化:
虚拟化层直接接触硬件,没有宿主操作系统,虚拟化层直接控制硬件和客户机,如XEN和Vmware ESX。 - Type-2型虚拟化:
Hypervisor 运行在一个宿主机操作系统之上,如 VMware Workstation;或系统里,如KVM。这类Hypervisor 通常就是宿主机操作系统的一个应用程序,像其他应用程序一样受宿主机操作系统的管理。比如 VMware Work.station 就是运行在 Windows 或者Linux操作系统上的一个程序而已日。客户机是在宿主机操作系统上的一个抽象,通常抽象为进程。
总结
以虚拟化技术维度,分类如下:
【全虚拟化】也称为原始虚拟化技术,运行在虚拟机上的操作系统通过Hypervisor来最终分享硬件,所以虚拟机发出的指令需经过Hypervisor捕获并处理。
【半虚拟化】半虚拟化技术是后来才出现的技术,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。
【硬盘辅助虚拟化】Hypervisor可以在部分功能上与硬件直接交互,提升性能。比如在CPU性能较差的网络IO方面与硬件直接交互。
4.1 KVM虚拟化
- KVM的全称是Kernel-based Virtual Machine,字面意思是基于内核虚拟机。其最初是由Qumranet公司开发的一个开源项目,KVM最初是由Quroranet 公司的AviKivity 开发的,作为他们的 VDI 产品的后台虛拟化解决方案。为了简化开发,Avi Kivity 并没有选择从底层开始新写一个 Hypervisor,而是选择了基于 Linux kernel,通过加载模块使Linux kernel 本身变成一个Hypervisor。2008年,Qumranet被RedHat所收购,但KVM本身仍是一个开源项目,由RedHat、IBM等厂商支持。作为一个功能和成熟度都逊于 xen 的项目,在这么快的时间内被内核社区接纳,主要原因在于:
1)在虚拟化方兴末艾的当时,内核社区急于将虚拟化的支持包含在内,但是Xen 取代内核由白身管理系统资源的架构引起了内核开发人员的不满和抵触。
2)xen诞生于硬件虚拟化技术出现之前,所以它在设计上采用了半虛拟化的方式,这让xen 采用硬件虚拟化技术有了更多的历史包袱,不如KVM 新兵上阵一身轻。
直到2008年9月4日,Redhat 公司以1.07亿美元收购了 Qurranet 公司,包括它的 KVM开源项目和开发人员。自此,Redhat 开始在其RFIEL 发行版中集成KVM,逐步取代 xen,并从RHEL7开始,正正式不支持XEN架构。 - 与XEN类似,KVM支持广泛的CPU架构,除了X86/X86_64 CPU架构之外,还将会支持大型机(S/390)、小型机(PowerPC、IA64)及ARM等。
- KVM充分利用了CPU的硬件辅助虚拟化能力,并重用了Linux内核的诸多功能,使得KVM本身是非常瘦小的,KVM的创始者Avi Kivity声称KVM模块仅有约10000行代码,但我们不能认为KVM的Hypervisor就是这个代码量,因为从严格意义来说,KVM本身并不是 Hypervisor,它仅是Linux内核中的一个可装载模块,其功能是将Linux内核转换成一个裸金属的Hypervisor。
- 通过KVM模块的加载将Linux内核转变成Hypervisor,KVM在Linux内核的用户(User)模式和内核(Kernel)模式基础上增加了客户(Guest)模式。Linux本身运行于内核模式,主机进程运行于用户模式,虚拟机则运行于客户模式,使得转变后的Linux内核可以将主机进程和虚拟机进行统一的管理和调度,这也是KVM名称的由来。
- **KVM 用来模拟 CPU 的运行,但缺少了对 Network 和 I/O 的支持。QEMU-KVM 是一个完整的模拟器,它基于 KVM 上,提供了完整的 Network 和 I/O 支持。**其中 Openstack 为了跨 VM 性,所以不会直接控制 QEMU-KVM,而是通过 libvit 的库去间接控制 QEMU-KVM 。
- KVM利用修改的QEMU提供BIOS、显卡、网络、磁盘控制器等的仿真,但对于I/O设备(主要指网卡和磁盘控制器)来说,则必然带来性能低下的问题。因此,KVM也引入了半虚拟化的设备驱动,通过虚拟机操作系统中的虚拟驱动与主机Linux内核中的物理驱动相配合,提供近似原生设备的性能。从此可 以看出,KVM支持的物理设备也即是Linux所支持的物理设备。
- KVM从诞生开始就定位于基于硬件虛拟化支持的全虚拟化实现。它以内核模块的形式加载之后,就将 Linux 内核变成了一个 Hypervisor,但硬件管理等还是通过 Linux kernel 来完成的,所以它是一个典型的 Type 2 Hypervisor。
- 一个KVM客户机对应于一个 Linux进程,每个vCPU 则是这个进程下的一个线程,还有单独的处理IO 的线程,也在一个线程组内。所以,宿主机上各个容户机是由宿主机内核像调度普通进程一样调度的,即可以通过 Linux 的各种进程调度的手段来实现不同客户机的权限限定、优先级等功能。
- 客户机所看到的硬件设备是QEMU模拟出来的(不包括 VT-d 透传的设备),当客户机对模拟设备进行操作时,由 QEMU 截获并转换为对实际的物理设备(可能设备都不实际物理地存在)的驱动操作来完成。
4.2 qemu虚拟化
QEMU 虚拟化技术是一种基于软件的虚拟化模拟器,它可以模拟各种硬件设备,如 CPU、内存、磁盘、网卡等,从而创建出一个能够运行操作系统的虚拟机。QEMU 有以下几种使用方式:
- 纯软件(二进制翻译)实现的全虚拟化虚拟机,性能较低,但兼容性较好。
- 基于硬件辅助虚拟化(KVM)的全虚拟化虚拟机,性能较高,但需要处理器支持虚拟化扩展(Intel VT 或 AMD-V)。
- 仿真器:为用户空间的进程提供 CPU 仿真,让在不同处理器结构体系上编译的程序得以跨平台运行。
- QEMU-KVM 是 QEMU 和 KVM 的结合,它利用了 KVM 的处理器和内存虚拟化功能,为 QEMU 的虚拟机提供了硬件加速。在 QEMU-KVM 中,KVM 运行在内核空间,提供 CPU 和内存的虚级化,以及 Guest OS 的 I/O 拦截。QEMU 运行在用户空间,提供硬件 I/O 虚拟化,并通过 ioctl 调用 /dev/kvm 接口将 KVM 模块相关的 CPU 指令传递到内核中执行。当 Guest OS 的 I/O 被 KVM 拦截后,就会将 I/O 请求交由 QEMU 处理。
4.3 XEN虚拟化
XEN最初是剑桥大学Xensource的一个开源研究项目,2003年9月发布了首个版本XEN 1.0,2007年Xensource被Citrix公司收购,开源XEN转由www.xen.org继续推进,该组织成员包括个人和公司(如 Citrix、Oracle等)。该组织在2011年3月发布了版本XEN 4.1。
- 相对于ESX和Hyper-V来说,XEN支持更广泛的CPU架构,前两者只支持CISC的X86/X86_64 CPU架构,XEN除此之外还支持RISC CPU架构,如IA64、ARM等。
- XEN的Hypervisor是服务器经过BIOS启动之后载入的首个程序,然后启动一个具有特定权限的虚拟机,称之为Domain 0(简称Dom 0)。Dom 0的操作系统可以是Linux或Unix,Domain 0实现对Hypervisor控制和管理功能。在所承载的虚拟机中,Dom 0是唯一可以直接访问物理硬件(如存储和网卡)的虚拟机,它通过本身加载的物理驱动,为其它虚拟机(Domain U,简称DomU)提供访问存储和网卡的桥梁。
- XEN支持两种类型的虚拟机,一类是半虚拟化(PV,Paravirtualization),另一类是全虚拟化(XEN称其为 HVM,Hardware Virtual Machine)。半虚拟化需要特定内核的操作系统,如基于Linux paravirt_ops(Linux内核的一套编译选项)框架的Linux内核,而Windows操作系统由于其封闭性则不能被XEN的半虚拟化所支持,XEN的半虚拟化有个特别之处就是不要求CPU具备硬件辅助虚拟化,这非常适用于2007年之前的旧服务器虚拟化改造。全虚拟化支持原生的操作系统, 特别是针对Windows这类操作系统,XEN的全虚拟化要求CPU具备硬件辅助虚拟化,它修改的Qemu仿真所有硬件,包括:BIOS、IDE控制器、 VGA显示卡、USB控制器和网卡等。为了提升I/O性能,全虚拟化特别针对磁盘和网卡采用半虚拟化设备来代替仿真设备,这些设备驱动称之为PV on HVM,为了使PV on HVM有最佳性能。CPU应具备MMU硬件辅助虚拟化。
- XEN的Hypervisor层非常薄,少于15万行的代码量,不包含任何物理设备驱动,这一点与Hyper-V是非常类似的,物理设备的驱动均是驻留在Dom 0中,可以重用现有的Linux设备驱动程序。因此,XEN对硬件兼容性也是非常广泛的,Linux支持的,它就支持。
- Xen 在架构上是一个典型的 Type 1 Hypervisor,与KVM形成鲜明对比。严格来说,它没有宿主机的概念,而是由 Xen Hypervisor (VMM)完全管控硬件,但用户却看不见、摸不着它,只能通过特殊的0号虚拟机(Dom0),通过其中xl 工具栈 (toolsstack)与Xen Hypervisor 交互来管理其他普通虚拟机(DomU)。0号虚拟机是一个运行修改过的半虚拟化的内核的 Linux 虚拟机。从架构上,Xen 的虚拟化方案既利用了 Linux 内核的I0部分(Dom0 的内核),将Linux 内核的 CPU、内存管理等核心部分排除在外由自己接手(Xen Hypervisor),所以,一开始就受到了 Linux 内核开发人员的抵制,致使 Linux 内核作为Dom0 对xen 的支持部分一直不能合人 Linux 内核社区。一直到 2010 年,在采用基于内核的 PVOPs 方式大量重写了 xen代码以后,才勉强合人 Linux 内核社区。2011年,从Linux内核 2.6.37 版本开始,正式支持 Xen Dom0。
4.4 hyper-V虚拟化
文章来源:https://www.toymoban.com/news/detail-739829.html
- Hyper-V是微软新一代的服务器虚拟化技术,首个版本于2008年7月发布,Hyper-V有两种发布版本:一是独立版,如Hyper-V Server 2008,以命令行界面实现操作控制,是一个免费的版本;二是内嵌版,如Windows Server 2008,Hyper-V作为一个可选开启的角色。
- 对于一台没有开启Hyper-V角色的Windows Server 2008来说,这个操作系统将直接操作硬件设备,一旦在其中开启了Hyper-V角色,系统会要求重新启动服务器。在这次重启动过程中,Hyper-V的Hypervisor接管了硬件设备的控制权,先前的Windows Server 2008则成为Hyper-V的首个虚拟机,称之为父分区,负责其他虚拟机(称为子分区)以及I/O设备的管理。Hyper-V要求CPU必须具备硬件辅助虚拟化,但对MMU硬件辅助虚拟化则是一个增强选项。
其实Hypervisor仅实现了CPU的调度和内存的分配,而父分区控制着I/O设备,它通过物理驱动直接访问网卡、存储等。子分区要访问I/O设备需要通过子分区操作系统内的VSC(虚拟化服务客户端),对VSC的请求由VMBUS(虚拟机总线)传递到父分区操作系统内的VSP(虚拟化服务提供者),再由VSP重定向到父分区内的物理驱动,每种I/O设备均有各自的VSC和VSP配对,如存储、网络、视频和输入设备等,整个I/O设备访问过程对于子分区的操作系统是透明的。其实在子分区操作系统内,VSC和VMBUS就是作为I/O设备的虚拟驱动,它是子分区操作系统首次启动时由Hyper-V 提供的集成服务包安装,这也算是一种半虚拟化的设备,使得虚拟机与物理I/O设备无关。如果子分区的操作系统没有安装Hyper-V集成服务包或者不支持 Hyper-V集成服务包(对于这种操作系统,微软称之为Unenlightened OS,如未经认证支持的Linux版本和旧的Windows版本),则这个子分区只能运行在仿真状态。其实微软所宣称的启蒙式 (Enlightenment)操作系统,就是支持半虚拟化驱动的操作系统。 - Hyper-V的Hypervisor是一个非常精简的软件层,不包含任何物理驱动,物理服务器的设备驱动均是驻留在父分区的Windows Server 2008中,驱动程序的安装和加载方式与传统Windows系统没有任何区别。因此,只要是Windows支持的硬件,也都能被Hyper-V所兼容。
Hyper-V 在架构上与Xen类似,也是Type-1 Hypervisor。 它有Partition 的概念,有一个Parent Partition,类似于Xen Dom0,有管理硬件资源的权限;HyperV 的 Child Partition就类似于普通的客户机的 DomU。对 Hypervisor 的请求以及对容户机的管理都要通过 Parent Partition,硬件的驱动也由 Parent Partition 来完成。客户机看到的都是虚拟出来的硬件资源,它们对其虚拟硬件资源的访问都会被重定向到 Parent Partition,由它来完成实际的操作,这种重定向是通过 VMBus 连接 Parent Partition 的 VSP ( Virtualization Service Provider) 和child partition 的 vsC (Virtualization Service Consumer) 来完成的,而这个过程对客户机 os都是透明的。如图中,Hyper-V 的Hypervisor 运行在 Ring -1,也就是Intel VMX 技术的 root mode (特权模式),而 parent partition 和child partition 的内核都运行在non-root mode 的 Ring。和Ring 了,也就是非特权模式的内核态和用户态。这样的架构安全性是比较好的。
4.5 Vmware虚拟化
VMware 成立手1998 年,是最早专注于虚拟化商业软件(并成功)的公司,从它的名宇也可以看出它对自己的定位和目标。从十几年前虚拟化软件兴起开始,它就是这个市场的霸主。它现在最稳定的私有云虚拟化-VMware。在公有云兴起的背景之下,Mware 开始受到KVM和Xen 等开源项目以及微软 Azure/HlyperV 的挑战。VMware 最初是由一对夫妇等几人创立的,2004年被 EMC 收购。2016年,EMC又被 Dell 收购,所以现在
VMware 是 Dell 旗下的子公司。
VMware 从诞生起就一直专注于虚拟化,其产品线非常全,既有Paas 产品,也有Iaas产品;既有Hypervisor,也有应用管理、存储管理等配套软件;既有面向个人用户的桌面级虚拟化产品,也有面向企业的服务器级产品;既有运行于 Linux平台上的产品,也有Windows 和Mac 平台上的产品。文章来源地址https://www.toymoban.com/news/detail-739829.html
- VMware Workstation
VMware Workstation 是 VMware 最早的产品,也是最广为人知的产品,1999年发布。在刚开始的时候,还没有硬件虚拟化技术,所以它是采用二进制翻译的方式实现虚拟化的。但是由于它的二进制翻译技术独步当时,性能还很出色,尤其跟当时同类产品相比。可以说,是VMware Workstation 莫定了 VMware 在虛拟化软件行业的地位。 VMware Workstation是桌面级虛拟化产品,运行在 Windows、Linux 和 Mac 操作系统上,是 Type 2 Hypervisor使用它需要购买 License, 但 VMware 同时提供了与 Workstation 功能类似,只是有所删减的
Workstation Player,供大家非商业化地免费使用。 - VMware ESXi
VMware ESxi 是服务器级的虛拟化软件。与Workstation 不同,它直接运行在硬件平台上,是Type1-Hypervisor。在架构上与xen有些相像,是现在 VMware 的拳头产品,大多数大公司的私有云都是用它搭建的。除了VMotion(即Live Migration 功能)、HA ( FighAvailability,指软硬件运行的不问断地冗余备份)等业界常见功能外,ESXi还支持 CiscoNexus 1000v ,作为分布式虚拟交换机运行在 ESxi 集群中。
- ESXi是VMware的企业级虚拟化产品,ESXi服务器启动时,首先启动Linux Kernel,通过这个操作系统加载虚拟化组件,最重要的是ESX的Hypervisor组件,称之为VMkernel,VMkernel会从 LinuxKernel完全接管对硬件的控制权,而该Linux Kernel作为VMkernel的首个虚拟机,用于承载ESXi的serviceConsole,实现本地的一些管理功能。
- VMkernel负责为所承载的虚拟机调度所有的硬件资源,但不同类型的硬件会有些区别。
- 虚拟机对于CPU和内存资源是通过VMkernel直接访问,最大程度地减少了开销,CPU的直接访问得益于CPU硬件辅助虚拟化(Intel VT-x和AMD AMD-V,第一代虚拟化技术),内存的直接访问得益于MMU(内存管理单元)硬件辅助虚拟化。
- 虚拟机对于I/O设备的访问则有多种方式,以网卡为例,有两种方式可供选择:一是利用I/O MMU硬件辅助虚拟化的VMDirectPath I/O,使得虚拟机可以直接访问硬件设备,从而减少对CPU的开销;二是利用半虚拟化的设备VMXNETx,网卡的物理驱动在VMkernel中,在虚拟机中装载网卡的虚拟驱动,通过这二者的配对来访问网卡,与仿真式网卡相比有着较高的效率。半虚拟化设备的安装是由虚拟机中 VMware tool来实现的,可以在Windows虚拟机的右下角找到它。网卡的这两种方式,前者有着显著的先进性,但后者用得更为普遍,因为VMDirectPath I/O与VMware虚拟化的一些核心功能不兼容,如:热迁移、快照、容错、内存过量使用等。
- ESXi的物理驱动是内置在Hypervisor中,所有设备驱动均是由VMware预植入的。因此,ESXi对硬件有严格的兼容性列表,不在列表中的硬件,ESXi将拒绝在其上面安装。
4.6 Container
- Container 严格来说与前面提到的虛拟化软件不是一个大类,首先,它不是某个虚拟化软件,而是某类软件的统称,包括Docker 和LXC 等;其次,它不是硬件乎台级的虛拟化技术,而是软件运行环境的虚拟化,是一种操作系统级的虚拟化技术,与前面提到的不是个层次的。
- Container 技术利用了 Linux kernel 提供的 cgroup、namespace 等机制,将应用之间隔离起来,好像自己是操作系统上的唯一一个应用似的。而 Linux kernel 除了封装出这些应用单独的运行环境以外,还可以控制分配给各个应用的资源配额,比如 CPU 利用率、内存、网络带宽等。
- 与平合虚拟化技术相比,Container 技术省去了启动和维护整个虚拟客户机的开销(硬件初姶化、Kernel boot、init 等),因而它非常轻量级,非常适用于 Paas 服务模型。但另一方面,由于各个 Contained instance 其实还是共用一个OS、一个Kernel,所以安全性比不上平台虚拟化技术。总而言之,Container 和KVM 等平合虚拟化技术,目前还是各有所长,还处在相互取长补短的过程中。
总结
- 当前具备虚拟化功能的技术有多种,如微软Hyper-V、VMware Vsphere、KVM、Xen等,为了方便管理多种虚拟化技术并向上提供统一、标准的接口,业界开始推出开源云管理平台项目,当前影响最大的当属OpenStack,当前已有500+厂商参与此开源项目,不乏IBM、AMD、Intel当前已成为事实云平台标准。
- 传统概念下的半虚拟化和全虚拟化的界线越来越模糊了,而且半虚拟化和全虚拟化得到了有机的整合,如半虚拟化的设备驱动和全虚拟化的虚拟机在上述四种虚拟化架构中得到了统一,很多虚拟化厂商也不再明确自己的虚拟化产品归类(如VMware和微软)。
- 随着CPU硬件辅助虚拟化技术发展到了二代,而且新版的操作系统对虚拟化技术的原生支持(如Windows7的Natively Enlightened,Linux的paravirt_ops内核选项),以及Hypervisor对虚拟机的CPU调度和内存管理越来越少的干预。则软件做得越少而硬件做得越多,如虚拟机之间内存管理所需用到的地址翻译由软件的影式分页(Shadow Paging)转变为由CPU硬件加速的嵌套分页(Nested Paging),各种虚拟化技术既有全虚拟化技术对操作系统的兼容性,又有半虚拟化技术所带来的性能优势。
- 从架构上来看,各种虚拟化技术没有明显的性能差距,稳定性也在逐渐逼近中,各自有着自身的优势场景和市场群体。因此,我们在进行虚拟化技术选型时,不应局限于某一种虚拟化技术,而应该有一套综合管理平台实现对各种虚拟化技术的兼容并蓄,实现不同技术架构的统一管理及跨技术架构的资源调度,最终达到云计算可运营的目。如OpenStack、阿里云飞天、AWS等。
5、虚拟化技术的展望
- 虚拟化是一种利用软件技术将物理资源抽象、转换和隔离的方法,它可以提高资源的利用率、灵活性和安全性。虚拟化技术有多种类型,如服务器虚拟化、网络虚拟化、存储虚拟化、桌面虚拟化等,它们都在不同的领域和场景中发挥着重要的作用。
- 对于虚拟化的展望,有以下几个方面:
- 虚拟化技术将与云计算、边缘计算、物联网等新兴技术深度融合,实现更高效、更智能、更安全的资源管理和服务交付。
- 虚拟化技术将进一步提升性能和兼容性,利用硬件辅助虚拟化、容器技术、微服务架构等手段,降低虚拟化的开销和复杂度,提高虚拟化的效率和灵活性。
- 虚拟化技术将进一步增强隔离性和安全性,利用加密、签名、审计等手段,保护虚拟机和虚拟网络的数据和通信的完整性和机密性,防止恶意攻击和数据泄露。
- 虚拟化技术将进一步扩展应用范围和场景,利用虚拟现实、增强现实、元宇宙等手段,打破虚拟与现实的边界,实现更丰富、更沉浸、更交互的用户体验。
到了这里,关于云计算基础-虚拟化技术的发展和详细研究的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!