精华内容
下载资源
问答
  • 虚拟化技术
    千次阅读
    2022-04-14 09:13:54

    一、常见的虚拟化技术分类

    1、CPU虚拟化:CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能。

    2、服务器虚拟化:服务器虚拟化能够通过区分资源的优先次序,并随时随地将服务器资源分配给最需要它们的工作负载来简化管理和提高效率,从而减少为单个工作负载峰值而储备的资源。

    3、存储虚拟化:虚拟存储设备需要通过大规模的raid子系统和多个I/O通道连接到服务器上,智能控制器提供LUN访问控制、缓存和其他如数据复制等管理功能。

    4、网络虚拟化:网络虚拟化整合后的设备组成了一个逻辑单元,在网络中表现为一个网元节点,管理简单化、配置简单化、可跨设备链路聚合,极大简化网络架构,同时进一步增强冗余可靠性。

    5、应用虚拟化:应用虚拟化通常包括两层含义,一是应用软件的虚拟化,一是桌面的虚拟化。

    二、XEN虚拟化技术的优缺点

    优点:

    1、Xen构建于开源的虚拟机管理程序上,结合使用半虚拟化和硬件协助的虚拟化。操作系统与虚拟化平台之间的这种协作支持开发一个较简单的虚拟机管理程序来提供高度优化的性能。

    2、 Xen提供了复杂的工作负载均衡功能,可捕获CPU、内存、磁盘I/O和网络I/O数据,它提供了两种优化模式:一种针对性能,另一种针对密度。

    3、 Xen利用一种名为Citrix Storage Link 的独特的存储集成功能。使用Citrix Storage Link,系统管理员可直接利用来自HP、Dell Equal Logic、NetApp、EMC等公司的存储产品。

    4、Xen包含多核处理器支持、实时迁移、物理服务器到虚拟机转换(P2V)和虚拟到虚拟转换(V2V)工具。集中化的多服务器管理、实时性能监控,以及Windows和Linux的快速性能。

    缺点:

    1、Xen会占用相对较大的空间,且依赖于0号虚拟机中的Linux操作系统。

    2、Xen依靠第三方解决方案来管理硬件设备驱动程序、存储、备份和恢复,以及容错 任何具有高I/O速率的操作或任何会吞噬资源的操作都会使Xen陷入困境,使其他虚拟机缺乏资源。

    3、Xen缺少802.1Q 虚拟局域网(VLAN)中继,出于安全考虑,它没有提供目录服务集成、基于角色的访问控制、安全日志记录和审计或管理操作。

    4、Xen目前最大的困难在于Linux内核社区的抵制,导致XEN相关的内核改动一直不能顺利进入内核源代码,从而无法及时得到内核最新开发成果的支持。

    三、KVM虚拟化技术功能特性及优缺点

    功能:KVM是基于虚拟化扩展(Intel VT-x或Amd-V)的X86硬件,是Linux完全原生的全虚拟化解决方案。部分的准虚拟化支持主要是以准虚拟化网络驱动程序的形式用于Linux和Windows客户机系统的。KVM目前设计为通过可加载的内核模块来进行广泛支持的客户机操作系统,如 Linux、BSD、Solaris、Windows、Haiku、ReactOS和AROS Research Operating System。

    特性:内存管理、存储、设备驱动程序、Linux的性能和可伸缩性。

    优缺点

    优点:

    1、开源:KVM 一个开源项目,这就决定了KVM一直是开放的姿态,许多虚拟化的新技术都是首先在KVM上应用,再到其他虚拟化引擎上推广。

    2、性能:KVM吸引许多人使用的一个动因就是性能,在同样的硬件条件下,能提供更好的虚拟机性能,主要是因为KVM架构简单,代码只有2万行,一开始就支持硬件虚拟化,这些技术特点保证了KVM的性能。

    3、免费:KVM因为是开源项目,绝大部分KVM的解决方案都是免费方案,随着KVM的发展,KVM虚拟机越来越稳定,兼容性也越来越好,因而也就得到越来越多的应用。

    4、技术支持: 免费并不意味着KVM没有技术支持。在KVM的开源社区,数量巨大的KVM技术支持者都可以提供KVM技术支持。另外,如果需要商业级支持,也可以购买红帽公司的服务。

    缺点:作为相对较新的虚拟化方案,KVM一直没有成熟的工具可用于管理KVM服务器和客户机。

    四、红帽RHEV技术功能特性及优缺点

    功能特性

    1、在线迁移(200ms之内完成VM到物理内存的迁移,但迁移过程中不能有过多的I/O操作)。

    2、高可用。

    3、系统计划调度(自动迁移,设定CPU负载阀值)。

    4、电源管理。

    5、模板管理。

    6、快照(3.1支持1张快照,3.2以上支持多张快照)。

    优缺点

    优点:

    1、性能和可扩展性:为实现企业级的虚拟化应用程序,如Oracle、SAP和Microsoft Exchange,为其提供领先的性能和可扩展性。

    2、安全性:业界领先的安全性,在安全增强型红帽企业Linux内核基础上构建。

    3、企业功能:业虚拟化管理功能,包括实时迁移、高可用性、负载均衡、节能等。

    4、灵活性:通过消除桌面操作系统和基础硬件之间的依赖性,实现业务灵活性和连续性。

    5、成本优势:与其他解决方案相比较,凭借红帽软件订阅模式的强大功能,能够以更低的购置和总拥有成本获得相同或更好的功能集,从而获得收益。

    缺点:

    1、技术不成熟:KVM的出现不过三四年时间,在可用资源、平台支持、管理工具、实施经验方面当然不能与出现8年之久的Xen相比。

    2、需要Windows支持;KVM3.0之前的RHEV-M管理程序需要Windows支持,这是KVM在部署过程中最大的障碍,RedHat公司已经意识到这个问题的严重性,从KVM3.0开始,开发出基于Linux的RHEV-M,取消了其只能运行于Windows服务器上的尴尬,这一改动得到大量Linux用户的支持。

    3、管理的物理服务器数量少,每台M端只能管理500台以内的H端服务器。

    五、简单叙述其他虚拟化技术的实现方法

    1、VMware:

    ①、VMware Workstation: VMware Workstation是VMware公司销售的运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。该产品最早采用了VMware在业界知名的二进制翻译技术,在x86 CPU硬件虚拟化技术还未出现之前,为客户提供了纯粹的基于软件的全虚拟化解决方案。

    ②、VMware ESX Server:ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP,它能让一个虚拟机同时使用四个物理处理器,和VMFS一样,它能使多个ESX服务器分享块存储器。

    2、Virtual Box: Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。它提供使用者在32位或64位的Windows、Solaris及Linux操作系统上虚拟其他X86的操作系统。使用者可以在VirtualBox上安装并执行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等操作系统作为客户端操作系统。最新的VirtualBox还支持运行Android4.0系统。

    3、Hyper-V:Hyper-V是微软提出的一种系统管理程序虚拟化技术。Hyper-V设计的目的是为广泛的用户提供更为熟悉及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。  Hyper-V的设计借鉴了Xen,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V底层的Hypervisor运行在最高的特权级别下,微软将其称为ring-1(而Intel也将其称为root mode),而虚拟机的操作系统内核和驱动运行在ring0,应用程序运行在ring3。

    感谢您的阅读!!!

    更多相关内容
  • 虚拟化技术简述

    千次阅读 多人点赞 2022-04-14 17:31:54
    这篇文章主要简述了虚拟化方面的一些入门知识。


    前言

    这周开始研究 Intel 的虚拟化技术了,写写这周学的一些知识吧,算是入门的吧,因为我也是刚学习虚拟化技术,可能描述的不太准备,但是文章还是要写的。

    关于虚拟化我们早就接触到了,大家在学习linux时候的开始阶段,通常都会再window平台下安装vmware workstation(或virtualbox),然后在这两个桌面虚拟化软件上面安装linux内核镜像,运行一个完整的Linux内核,这样我们就可以在windows系统上面使用linux系统了,进行学习了。如果没有虚拟化,那我们只能在我们的电脑上安装双系统,每次在开机启动时选择是windows系统还是linux 系统,这非常不方便。
    比如大家在vmware workstation上安装linux时,得配置linux的一些硬件资源,这些硬件资源由我们用户自定义,并且还可以随时更改,非常方便,如下图:
    在这里插入图片描述
    可以看出一个操作系统能正常运行所需要的硬件资源基本都需要,如最重要的处理器,内存,磁盘,网络,OS镜像这些都不可缺少。

    一、虚拟化简介

    随着计算硬件、网络技术、存储技术的飞速发展,人们发现,每个人独自拥有一台计算机似乎有些浪费,因为它大多数时候是空闲的。那么,如果将计算资源集中起来,大家共享,类似现代操作系统那样分时复用,将是对资源的极大节省和效率的极大提升。

    虚拟化是一种资源管理技术,将计算机物理资源(CPU、内存、磁盘、网络等)转化为更通用更强的更容易使用的虚拟形式,多个操作系统共享这些硬件物理资源,提升单机的利用率,最大化的利用物理资源。并且提供与主机操作系统和其他虚拟机的完全隔离,更安全。如果没有虚拟化技术,那么这些硬件资源只能被单个操作系统使用。
    虚拟机运行所需要的环境可以说与物理机上毫无差异,可能会由于所分配得到的物理资源大小、竞争、或宿主机的限制而导致运行速度可能低于在真实的物理机上运行的速度。

    现在给出虚拟机的一个简单模型:物理硬件资源 + 虚拟机监视器(VMM)+ 客户软件(Guest software)。
    Guest software包括:一个完整的逻辑硬件运行环境、OS、应用等,就是一个虚拟机器。
    如下图所示:
    在这里插入图片描述

    Virtual Machine Monitor(VMM,虚拟机监控器,也称为Hypervisor)层,充当主机,完全控制处理器和其他平台硬件,并为客户软件提供虚拟处理器的抽象,并允许它直接在逻辑处理器上执行,VMM能够保留对处理器资源、物理内存、中断管理和I/O的选择性控制。简单点说就是为了达到虚拟化而引入的一个软件层。它向下管理实际的物理资源,向上给虚拟机提供逻辑资源。

    二、软件虚拟化和硬件虚拟化

    2.1 软件虚拟化技术

    软件虚拟化:就是通过软件模拟来实现VMM层,通过纯软件的环境来模拟执行客户机里的指令。
    比如QEMU:在没有启用硬件虚拟化辅助的时候,它通过软件的二进制翻译仿真出目标平台呈现给客户机,客户机的每一条目标平台指令都会被QEMU截取,并翻译成宿主机平台的指令,然后交给实际的物理平台执行。
    客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。

    缺点:每一条目标指令都会被QEMU截取,翻译成宿主机平台的指令,然后交给实际的物理平台执行,其虚拟化性能是比较差的,同时其软件复杂度也大大增加。

    优点:可以呈现各种平台给客户机,只要其二进制翻译支持。每个虚拟器都可以仿真一个不同架构的处理器,比如在Intel x86的处理器架构上虚拟化的处理器架构可以是ARM架构的的(即:物理CPU是x86的,而guest是基于ARM的)。

    以虚拟化CPU来说:CPU是计算机系统最核心的模块,我们的程序执行到最后都是翻译为机器语言在CPU上执行的。在没有CPU硬件虚拟化技术之前,通常使用指令的二进制翻译(binary translation)来实现虚拟客户机中CPU指令的执行,很早期的VMware就使用这样的方案,其指令执行的翻译比较复杂,效率比较低。所以Intel最早发布的虚拟化技术就是CPU虚拟化方面的。

    2.2 硬件虚拟化

    硬件虚拟化技术就是指计算机硬件本身提供能力让客户机指令独立执行,不完全需要VMM截获重定向(大部分指令集就可以在自己的逻辑处理器上执行,即在自己的VM上进行处理大部分的指令集,只有少部分特权指令才需要被VMM截获并做相应处理,VMM需要监控这些特权指令)。

    这里简单的介绍下Intel的VMX技术:
    VMX(virtual-machine extensions):从硬件层面上来为多个软件运行环境提供处理器硬件虚拟化支持:即Intel 的VT-x技术( AMD 相应的虚拟技术称为: AMD-V )。
    VT:Virtualization Technology。

    VMX主要支持两种类型的软件:
    (1)Virtual-machine monitors (VMM):虚拟机监控器。
    (2)Guest software(VM):虚拟机。

    VMX提供了有两种类型的处理器的操作(VMX operation):
    (1)VMX root operation: VMM运行在root mode。
    (2)VMX non-root operation:VM运行在 non-root mode。

    在这里插入图片描述

    VM-Entry :VMM可以使用 VM-entry instructions,进入到VM, 从root mode 切换到 non-root mode, CPU 上运行的是虚拟机。
    VM-Exit :当VM执行了某些特权指令后, CPU 从 non-root mode切换到root mode,并退出VM。

    VMX提供一个略微受限制的硬件运行环境供客户机运行,在绝大多数情况下,客户机在此受限环境中运行与原生系统在非虚拟化环境中运行没有什么两样,不需要像软件虚拟化那样每条指令都先翻译再执行,而VMM运行在root mode,拥有完整的硬件访问控制权限。仅仅在少数必要的时候,某些客户机指令的运行才需要被VMM截获并做相应处理,之后客户机返回并继续在non-root mode中运行。可以想见,硬件虚拟化技术的性能接近于原生系统,并且,极大地简化了VMM的软件设计架构。

    比如 QEMU+ KVM。
    kvm:KVM虚拟化全称为kernel-based Virtual Machine,是一个开源的系统虚拟化模块,基于内核的虚拟机 (KVM) 是针对包含虚拟化扩展(Intel VT 或 AMD-V)的 x86 硬件上的 Linux 的完全原生的虚拟化解决方案。KVM已经成为Linux 内核里面的一种加速虚拟机的功能扩展。
    KVM 是一个独特的管理程序,通过将 KVM 作为一个内核模块实现,在虚拟环境下 Linux 内核集成管理程序将其作为一个可加载的模块可以简化管理和提升性能。

    2.3 QEMU

    这里简单的介绍下QEMU:
    QEMU(Quick Emulator)最初实现的虚拟机是一个纯软件的实现,通过二进制翻译来实现虚拟化客户机中的CPU指令模拟,所以性能比较低。但是,其优点是跨平台,QEMU支持在Linux、Windows、FreeBSD、Solaris、MacOS等多种操作系统上运行,能支持在QEMU本身编译运行的平台上就实现虚拟机的功能,甚至可以支持客户机与宿主机并不是同一个架构(比如在x86平台上运行ARM客户机)。
    QEMU也可以基于硬件虚拟化的KVM结合,为它们提供客户机的设备模拟。通过与KVM结合,让虚拟化的性能提升得非常高,即:QEMU+KVM

    总结,它有两种模式:
    (1)模拟器:模拟各种硬件,使用的是二进制翻译技术。
    (2)虚拟机:通过ioctl与KVM内核模块进行交互,完成虚拟化功能。

    三、全虚拟化和半虚拟化

    3.1 全虚拟化

    全虚拟化(Full Virtualization):客户机完全不知道自己运行在虚拟化环境中,还以为自己运行在原生环境里。

    客户机的操作系统完全不需要改动。敏感指令在操作系统和硬件之间被VMM捕捉处理,客户操作系统无须修改,所有软件都能在虚拟机中运行。因此,全虚拟化需要模拟出完整的、和物理平台一模一样的平台给客户机,这在达到了第一个目标的同时也增加了虚拟化层(VMM)的复杂度。

    在这里插入图片描述

    注意:
    CPU厂商没有支持硬件虚拟化前:Guest OS的特权指令无法直接下达到计算机系统硬件执行,需要经过VMM的捕获和模拟执行(部分难以虚拟化的指令需要通过二进制翻译技术进行转换),由于所有的特权指令都会导致 trap,所以在虚拟环境下特权指令的执行开销要远远高于在 原生环境下。
    即:guest os特权指令->捕获异常->翻译->模拟
    Guest OS 一条简单的特权指令要通过复杂的异常处理过程,性能开销很大。

    CPU厂商开始支持硬件虚拟化后::即Intel 的VT-x技术( AMD : AMD-V ),引入了VMX root operation和VMX non-root operation,这样host os 和 guest 都有了ring 0和ring 3,硬件这层做了些区分,这样全虚拟化下,有些guest os的特权指令的“捕获异常-翻译-模拟”实现就不需要了,性能得到很大的提升。

    KVM、VMware一直都是全虚拟化技术(目前都是基于硬件辅助的全虚拟化技术)。

    3.2 半虚拟化

    半虚拟化(Para-Virtualization):客户机意识到自己是运行在虚拟化环境里,并做相应修改以配合VMM。
    一方面,可以提升性能和简化VMM软件复杂度;另一方面,也不需要太依赖硬件虚拟化的支持,从而使得其软件设计(至少是VMM这一侧)可以跨平台且是优雅的。
    本质上,半虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,半虚拟化需要修改客户机操作系统的源代码来实现主动通知。

    在这里插入图片描述

    典型的半虚拟化技术就是virtio,使用virtio需要在宿主机/VMM和客户机里都相应地装上驱动。
    XEN是最典型的半虚拟化,不过现在XEN也支持硬件辅助的全虚拟化。

    3.3 敏感指令

    一般来说敏感指令都是特权指令,但是x86_64系架构下有些敏感指令不是特权指令,有些敏感指令在非特权模式下执行时不会抛出异常,此时VMM无法拦截处理VM的行为。
    为了解决这个问题,提出了二进制翻译的方案(软件层面):
    (1)静态翻译:运行前扫描可执行的文件,对敏感指令及进行翻译,形成一个新的文件。然而静态翻译必须提前处理,而有些指令只有在运行时才会产生副作用,无法静态处理。
    (2)动态翻译:运行时以代码块为单元动态地修改二进制代码。

    后来Intel 从硬件层面解决这个问题,引入VMX,也就是VT-x技术。并不是所有的特权指令都需要VMM拦截处理,只处理敏感指令。当guest 内部执行敏感指令时,就会从VMX non-root operation 切换到 VMX root operation,即:VM exit。有的特权指令不需要由VMM介入处理。
    在这里插入图片描述

    3.4 小结

    目前主流的CPU厂商都支持了硬件虚拟化技术,硬件辅助的全虚拟化技术的性能逐渐逼近半虚拟化,甚至超过了半虚拟化,同时全虚拟化不需要修改客户操作系统,目前越来越受欢迎。

    以virtio为代表的半虚拟化技术也一直在演进发展,性能上只是略逊于全虚拟化,加之其较少的平台依赖性,依然受到广泛的欢迎。

    四、Type1和Type2虚拟化

    从软件框架的角度上,根据虚拟化层(VMM)是直接位于硬件之上还是在一个宿主操作系统之上,将虚拟化划分为Type1和Type2。

    4.1 Type 1

    Type1 Hypervisor也叫 bare-metal Hypervisor。这类虚拟化层直接运行在硬件之上,没有所谓的宿主机操作系统。它们直接控制硬件资源以及客户机。如下图所示:
    在这里插入图片描述
    比较出名的就是VMware ESXi:专门构建的裸机 Hypervisor,主要面向服务器。
    VMware ESX是可以直接安装到您的物理服务器的、可靠的裸机 Hypervisor。通过直接访问并控制底层资源,VMware ESXi 可有效地对硬件进行分区,以便整合应用并降低成本。
    功能特性(来源于VMware ESX官网介绍):
    ESXi 可将多台服务器整合到较少物理设备中,从而减少对空间、电力和 IT 管理的要求,同时提升性能。
    (1)占用空间小
    尽管 ESXi 占用空间仅为 150 MB,却可实现更多功能,同时还能最大限度地降低 Hypervisor 的安全风险。
    (2)可靠的性能
    适应任何规模的应用。虚拟机配置最高可达 128 个虚拟 CPU、6 TB 的 RAM 和 120 台设备,以满足您的所有应用需求。咨询各项解决方案限制以确保您不会超过您环境的受支持配置。
    (3)增强的安全性
    利用强大的加密功能保护敏感的虚拟机数据。基于角色的访问可简化管理,而广泛的日志记录和审核可以更好地落实责任,还可更加轻松地进行取证分析。
    (4)卓越的生态系统
    获取对由硬件 OEM 供应商、技术服务合作伙伴、应用和客户机操作系统组成的广泛生态系统的支持。
    (5)方便用户使用的体验
    利用基于 HTML5 标准的内置现代 UI 管理日常行政操作。对于需要实现运维自动化的客户,VMware 提供 vSphere 命令行界面和便于开发人员使用、基于 REST 的 API。

    我自己这周也是第一次接触这个VMware ESXi,可以直接安装在Intel x86_64的物理机上,不再依存于宿主操作系统。然后直接通过网页连上ESXi 服务器,通过网页界面来创建VM(虚拟机),界面简单易用,我自己的感觉就是操作十分简单。

    4.2 Type 2

    Type2 Hypervisor运行在一个宿主机操作系统之上,这类Hypervisor通常就是宿主机操作系统的一个应用程序,像其他应用程序一样受宿主机操作系统的管理。如:
    (1)VMwareWorkstation,桌面级虚拟化产品,运行在Windows、Linux和Mac操作系统上。
    这也就是我们是经常学习Linux时使用的场景:Intel X86_64物理主机上装的windows操作系统,然后再windows桌面上安装VMwareWorkstation,VMwareWorkstation也就是windows一个普通的应用程序,然后我们再VMwareWorkstation创建虚拟机,安装其他的操作系统,并给其分配硬件资源。
    在这里插入图片描述

    (2)Linux系统里,如KVM。
    KVM在上面已经介绍过一次了,现在梅开二度:
    KVM全称是Kernel-based Virtual Machine,即基于内核的虚拟机,是采用硬件虚拟化技术的全虚拟化解决方案。由于KVM是在硬件虚拟化支持下的完全虚拟化技术,所以它能支持在相应硬件上能运行的几乎所有的操作系统,如:Linux、Windows、FreeBSD、MacOS等。
    这里以QEMU+Linux举例,如下图所示:
    PS:由于我也是这周才开始看虚拟化,描述的可能不太准确,请见谅。

    在这里插入图片描述

    CPU和内存:
    Qemu 将 KVM 整合进来,将有关 CPU 指令的部分交由内核模块来做,就是 qemu-kvm。
    Guest QMEU + host Linux kernel KVM内核模块用来实现CPU的虚拟化、内存的虚拟化。
    KVM 内核模块通过 /dev/kvm 暴露接口,Guest QMEU 可以通过 ioctl 来访问这个接口。来提升CPU性能。
    只有对性能要求很高的虚拟设备才需要由KVM内核模块来负责。

    网络和硬盘:
    如果采用全虚拟化的方式会影响这些设备的性能。
    QMEU 采取半虚拟化的方式,让 Guest OS 加载驱动VirtIO。然后数据会直接发送给半虚拟化设备,经过处理,最终发送给真正的物理硬件。
    Guest QMEU中的半虚拟化的驱动程序允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为网络和块设备提供高性能的I/O。

    这部分内容后面还会详细介绍,这篇文章就到这里结束了。

    总结

    结束了,画图画的好辛苦…

    参考资料

    Intel官方手册 vol3
    KVM实战:原理、进阶与性能调优
    深度探索Linux系统虚拟化
    极客时间:趣谈操作系统
    https://www.cnblogs.com/LoyenWang/p/13510925.html
    https://www.vmware.com/cn/products/esxi-and-esx.html
    https://zhuanlan.zhihu.com/p/69629212
    https://blog.csdn.net/u011389746/article/details/79948514
    https://blog.csdn.net/tony_vip/article/details/105890376

    展开全文
  • 虚拟化技术基础知识

    千次阅读 多人点赞 2022-03-29 16:52:54
    本文介绍了虚拟化技术的基本概念和基本要求。随后引出由于早期的x86架构不支持虚拟化,各家软件厂商只能通过软件模拟的形式来实现虚拟化,其代表是早期的VMware WorkStation、QEMU和Xen。 不过纯粹依靠软件的方式...

    关于虚拟化技术的相关知识,例如KVM,QEMU,网络上的现有介绍、相关blog、课程视频也有很多,零零整整,对于初学者来说,需要我们广泛涉略,形成自己的总结笔记。本篇博文记录我作为一个零基础小白对现有虚拟化资料学习后的学习笔记,“但当涉猎,见往事耳”,愿与大家一起进步。因本人初学,如有错误,欢迎大家批评指正!

    摘要:本文介绍了虚拟化技术的基本概念和基本要求。随后引出由于早期的x86架构不支持虚拟化,各家软件厂商只能通过软件模拟的形式来实现虚拟化,其代表是早期的VMware WorkStation、QEMU和Xen。

    不过纯粹依靠软件的方式毕竟有性能的瓶颈,Intel和AMD及时推出了CPU硬件层面的虚拟化支持,软件厂商迅速跟进适配,极大的改善了虚拟化的性能体验。这一时期的代表有新版本的VMware WorkStation、Hyper-V、KVM等。

    目录

    1、什么是虚拟化,虚拟化的思想?

    2、虚拟机

    3、虚拟化技术分类

    4、系统虚拟化发展历史

    5、进一步理解系统虚拟化

    6、(系统)虚拟化实现方式

     6.1 纯软件仿真

    6.2 虚拟化层翻译(重点)

    6.2.1 全虚拟化

     趣味故事

    6.2.2 半虚拟化

    趣闻故事

    6.2.3 硬件辅助的虚拟化(效率高)

    趣味故事

    硬件辅助虚拟化的发展(以KVM为代表)

    6.3 容器技术(LXC和Docker)

    既然要学习虚拟化,就不得不提“云计算”,虚拟化技术是云计算欣欣向荣的一个重要的功臣,可以说,没有虚拟化技术,就没有云计算。

    云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。

    现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。

    接下来开始重点介绍虚拟化技术

    1、什么是虚拟化,虚拟化的思想?

    维基百科中的解释是这样的:虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。

    虚拟化的主要思想是:通过分层将底层的复杂、难用的资源虚拟抽象成简单、易用的资源,提供给上层使用。计算机发展的过程本质也是一个不断虚拟的过程,将底层复杂的接口转换成上层容易使用的接口。

    2、虚拟机

    理论上来说,只要能提供一个执行环境,完成用户指定任务的对象都可以叫做机器。

    虚拟机介绍
    进程-最简单的虚拟机(图2-1)

    进程可以看做是一组资源的集合,有自己独立的进程地址空间以及独立的CPU和寄存器,执行程序员编写的指令,完成一定的任务。一个进程在执行指令,访问内存时并不会影响其他进程。操作系统把CPU按照时间分配复用,把内存按照空间分配复用,通过管理底层资源,使得进程都能够使用整个计算机的物理资源,每个进程都认为自己拥有整个机器。

    操作系统可以创建很多个进程,每一个进程都可以看做是一个独立的虚拟机。

    模拟器(图2-2)

    模拟器可以使为一种硬件指令集(Instruction Set Architecture,ISA)编译的程序运行在另一种硬件指令集上。应用程序在源ISA(如ARM)上被编译出来,在模拟器的帮助下,运行在不同的目标ISA(比如x86)上。

    模拟器可以通过解释来实现,即对程序的源ISA指令一条一条进行分析,然后执行相应的ISA指令上的操作。模拟器也可以通过二进制翻译实现,即首先将程序中所有的源ISA指令翻译成目标ISA上具有同样功能的指令,然后在目标ISA指令机器上执行。

    典型的模拟器有:QEMU的用户态模拟、Bochs模拟器等。

    高级语言虚拟机(图2-3)

    将源ISA和目标ISA完全分离开。在高级语言虚拟机中,通常会设计一种全新的虚拟ISA,并在其中定义新的指令集、数据操作、寄存器的使用等类似于物理ISA中的规范。不同于普通程序和模拟器运行的程序,高级语言虚拟机的程序中没有任何具体物理ISA指令字节,而是自己定义的虚拟指令字节,通常称为字节码。

    任何需要运行这种虚拟ISA指令的物理ISA平台都需要实现一个虚拟机,该虚拟机能够执行虚拟机ISA指令到物理ISA指令的转化。

    典型的高级语言虚拟机有:JVM虚拟机、Python虚拟机

    补充:在高级语言虚拟机中,虚拟ISA是公开的规范,每个人都可以获得,并且可以写出反编译工具,通过字节码还原程序源码。因此使用java语言的程序通常需要进行代码混淆。假设我们自己定义一个虚拟的ISA,不公开其规范,并且不时修改这些规范,然后将自带的虚拟机和字节码一起分发,这样使用基于物理ISA的反编译工具就无法还原出程序的汇编代码。

     图2-1 进程虚拟机

      图2-2 模拟器原理

     图2-3 高级语言虚拟机

       进程、模拟器、高级语言虚拟机提供的都是指令的执行环境,而系统虚拟机提供的是一个完整的系统环境。在这个环境中,能够运行多个用户的多个进程。通过系统虚拟化技术,能够在单个宿主机硬件平台上运行多个虚拟机,每个虚拟机都有着完整的虚拟机硬件,如虚拟的CPU、内存、虚拟的外设等,并且虚拟机之间能够实现完整的隔离。

    3、虚拟化技术分类

    1. 系统虚拟化
    2. 存储虚拟化
    3. 网络虚拟化
    4. GPU虚拟化
    5. 软件虚拟化
    6. 硬件支持虚拟化

    本博客主要记录系统虚拟化相关内容。后面所述“虚拟化”无特殊说明均指“系统虚拟化”。

    4、系统虚拟化发展历史

    系统虚拟化:

    1、这种虚拟化通常表现为在单一系统上运行多个操作系统

    2、这些虚拟操作系统同时运行,每个操作系统又是相互独立

      图3-1 系统虚拟机原理

    5、进一步理解系统虚拟化

    一句话概括(系统)虚拟化:一套硬件设备上,同时运行多个操作系统

    (系统)虚拟化目的:将物理资源逻辑化,摆脱物理资源的束缚,提高物理资源利用率

    Hypervisor是一个软件层或子系统:

            也称为VMM(Virtual Machine Monitor,虚拟机监视器)

            用于管理全局物理资源,VMM之于虚拟机如同操作系统之于进程,VMM利用时分复用或者空分复用的办法将硬件资源在各个虚拟机之间进行分配

    补充:为什么需要VMM监控上面的VM?

    虚拟化实现的目标看起来很简单,就是原来在一套硬件上运行一个操作系统,现在在一套硬件上运行多个操作系统而已,但是实现起来是非常复杂的,具有一定的技术挑战。例如:最初x86的CPU并没有考虑虚拟化(虚拟化是在x86架构之后才提出来的,这是一切方法被提出的根本原因!)。

    因此,想要实现虚拟化:实现VMM即可

    VMM也称为host OS 宿主机,OS1,OS2,OS3也称为guest OS客户机

    虚拟机厂商需要实现的是host OS,guest OS是我们自己根据需要安装的

     Hypervisor分为两类:I型虚拟化和II型虚拟化

    Type I: 直接凌驾于硬件之上,构建出多个隔离的操作系统环境:VMware ESXi

    Type II: 依赖于宿主操作系统,在其上构建出多个隔离的操作系统环境:VMware WorkStation

    6、(系统)虚拟化实现方式

    1、纯软件仿真

    2、虚拟化层翻译

    3、容器技术

     6.1 纯软件仿真

    通过模拟完整的硬件环境来虚拟化客户机

    模拟x86,ARM,PowerPC等多种CPU

    缺点:效率较低

    代表产品或方案:QEMU,Bochs,PearPC

    6.2 虚拟化层翻译(重点)

    一个典型的做法是——陷阱 & 模拟技术:简单来说就是正常情况下直接把虚拟机中的代码指令放到物理的CPU上去执行,一旦执行到一些敏感指令,就触发异常,控制流程交给VMM,由VMM来进行对应的处理,以此来营造出一个虚拟的计算机环境。

    如图是x86处理器的Ring0-Ring3四个“环”,操作系统内核代码运行在最高权限的Ring0状态,应用程序工作于最外围权限最低的Ring3状态,剩下的Ring1和Ring2主流的操作系统都基本上没有使用。

    这里所说的权限,有两个层面的约束:

    • 能访问的内存空间
    • 能执行的特权指令

    关注第二点:特权指令

    CPU指令集中有一些特殊的指令,用于进行硬件I/O通信、内存管理、中断管理等等功能,这一些指令只能在Ring0状态下执行,被称为特权指令。这些操作显然是不能让应用程序随便执行的。处于Ring3工作状态的应用程序如果尝试执行这些指令,CPU将自动检测到并抛出异常。

    虚拟化是将计算资源进行逻辑或物理层面的切割划分,构建出一个个独立的执行环境。按照陷阱 & 模拟手段,可以让虚拟机中包含操作系统在内的程序统一运行在低权限的Ring3状态下,一旦虚拟机中的操作系统进行内存管理、I/O通信、中断等操作时,执行特权指令,从而触发异常,物理机将异常派遣给VMM,由VMM进行对应的模拟执行。

    这本来是一个实现虚拟化很理想的模式,不过x86架构的CPU在这里遇到了一个跨不过去的坎。到底是什么问题呢?

    回顾一下前面描绘的理想模式,要这种模式能够实现的前提是执行敏感指令的时候能够触发异常,让VMM有机会介入,去模拟一个虚拟的环境出来。

    但现实是,x86架构的CPU指令集中有那么一部分指令不是特权指令,Ring3状态下也能够执行,但这些指令对于虚拟机来说却是敏感的不能让它们直接执行。一旦执行,没法触发异常,VMM也就无法介入,这结果将导致虚拟机中的代码指令出现无法预知的错误,更严重的是影响到真实物理计算机的运行,虚拟化所谓的安全隔离、等价性也就无从谈起。

    怎么解决这个问题,让x86架构CPU也能支持虚拟化呢?

    6.2.1 全虚拟化

     基于二进制翻译的全虚拟化:

    Hypervisor运行在Ring0,Guest OS运行在Ring1

    机制:异常、捕获,翻译

    eg:VMware Workstation,QEMU,Virtual PC

    VMware和QEMU走出了两条不同的路。

    VMware创造性的提出了一个二进制翻译技术。VMM在虚拟机操作系统和宿主计算机之间扮演一个桥梁的角色,将虚拟机中的要执行的指令“翻译”成恰当的指令在宿主物理计算机上执行,以此来模拟执行虚拟机中的程序。可以简单理解成Java虚拟机执行Java字节码的过程,不同的是Java虚拟机执行的是字节码,而VMM模拟执行的是CPU指令。

    另外也并非所有的指令都是模拟执行的,VMware在这里做了不少的优化,对一些“安全”的指令,就让它直接执行。所以VMware的二进制翻译技术也融合了部分的直接执行。

    对于虚拟机中的操作系统,VMM需要完整模拟底层的硬件设备,包括处理器、内存、时钟、I/O设备、中断等等,换句话说,VMM用纯软件的形式“模拟”出一台计算机供虚拟机中的操作系统使用。

    这种完全模拟一台计算机的技术也称为全虚拟化,这样做的好处显而易见,虚拟机中的操作系统感知不到自己是在虚拟机中,代码无需任何改动,直接可以安装。而缺点也是可以想象:完全用软件模拟,转换翻译执行,性能堪忧!

    而QEMU则是完全软件层面的“模拟”,乍一看和VMware好像差不多,不过实际本质是完全不同的。VMware是将原始CPU指令序列翻译成经过处理后的CPU指令序列来执行。而QEMU则是完全模拟执行整个CPU指令集,更像是“解释执行”,两者的性能不可同日而语。

     趣味故事

    QEMU是主机上的一个VMM,通过动态二进制翻译来模拟 CPU,内存,硬盘,网卡等外设。VM认为自己是直接和硬件打交道的,但是实际上VM是和QEMU这个仿真模拟器模拟出来的设备打交道。当VM需要使用硬件的时候,QEMU将VM调用硬件的操作,通过二进制翻译成HOST OS的指令,之后交给在真正的硬件处理。(由于所有虚拟机调用硬件的指令都需要将经过QEMU的翻译,所以效率较低,但是也是可以实现虚拟化的)

    如果用户态程序做事情,就将扳手掰到第3等级,一旦要申请使用更多的资源,就需要申请将扳手掰到第0等级,内核才能在高权限访问这些资源,申请完资源,返回到用户态,扳手再掰回去。

    这个程序一直非常顺利的运行着,直到虚拟机的出现。

    如果大家用过Vmware桌面版,你可以用这个虚拟化软件创建虚拟机,在虚拟机里面安装一个Linux或者windows,外面的操作系统也可以是Linux或者Windows。

    当你使用虚拟机软件的时候,和你的excel一样,是一个普通的应用。

    当你进入虚拟机的时候,虚拟机里面的excel也是一个普通的应用。

    但是当你设身处地的站在虚拟机里面的内核的角度思考一下人生,你就困惑了,我到底个啥?

    在硬件上的操作系统来看,我是一个普通的应用,只能运行在用户态。可是我是个内核啊,应该运行在内核态,当虚拟机里面的excel要访问网络的时候,向我请求,我的代码就要努力的去操作网络资源,我努力,但是我做不到,我没有权限!

    虚拟化层,也就是Vmware需要帮我解决这个问题。

    第一种方式,全虚拟化,其实就是骗我。虚拟化软件(QEMU)模拟假的CPU,内存,网络,硬盘给我,让我自我感觉良好,终于又像个内核了。

    但是真正的工作模式是这样的:

            虚拟机内核:我要在CPU上跑一个指令!

            QEMU:没问题,你是内核嘛,可以跑

            QEMU去找物理机内核:报告管家,我管理的虚拟机里面的一个要执行一个CPU指令,帮忙来一小段时间空闲的CPU时间,让我代他跑个指令。

            物理机内核:你等着,另一个跑着呢。好嘞,他终于跑完了,该你了。

            QEMU:我代他跑,终于跑完了,出来结果了

            QEMU转头给虚拟机内核:跑完了,结果是这个,我说你是内核吧,绝对有权限,没问题,下次跑指令找我啊。

            虚拟机内核:看来我真的是内核呢。可是哥,好像这点指令跑的有点慢啊。

            QEMU:这就不错啦,好几个排着队跑呢。

    内存的申请模式如下:

            虚拟机内核:我启动需要4G内存,我好分给我上面的应用。

            QEMU:没问题,才4G,你是内核嘛,马上申请好。

            QEMU转头给物理机内核:报告,管家,我启动了一个虚拟机,需要4G内存,给我4个房间呗。

            物理机内核:怎么又一个虚拟机啊,好吧,给你90,91,92,93四个房间。

            QEMU转头给虚拟机内核:内存有了,0,1,2,3这个四个房间都是你的,你看,你是内核嘛,独占资源,从0编号的就是你的。

            虚拟机内核:看来我真的是内核啊,能从头开始用。那好,我就在房间2的第三个柜子里面放个东西吧。

            QEMU:要放东西啊,没问题。心里想:我查查看,这个虚拟机是90号房间开头的,他要在房间2放东西,那就相当于在房间92放东西。

            QEMU转头给物理机内核:报告,管家,我上面的虚拟机要在92号房间的第三个柜子里面放个东西。

    网络和硬盘也是类似,都是虚拟化软件( QEMU)模拟一个给虚拟机内核看的,其实啥事儿都需要虚拟化软件转一遍。

    这种方式一个坏处,就是慢,往往慢到不能忍受

    6.2.2 半虚拟化

    半虚拟化(超虚拟化、操作系统辅助虚拟化):

    Hypervisor运行在Ring0

    Guest OS不能直接运行在Ring0,需要修改Guest OS内核,将运行在Ring0上的指令转为调用Hypervisor

    Guest OS上的APP运行在Ring3

    eg:Xen

    Xen早期是在x86架构上直接完成的虚拟化,需要修改虚拟机内部的操作系统,使得Xen的整个VMM非常复杂,缺陷也比较多

    前面说由于敏感指令的关系,全虚拟化的VMM需要捕获到这些指令并完整模拟执行这个过程,实现既满足虚拟机操作系统的需要,又不至于影响到物理计算机。

    但说来简单,这个模拟过程实际上相当的复杂,涉及到大量底层技术,并且如此模拟费时费力。

    而试想一下,如果把操作系统中所有执行敏感指令的地方都改掉,改成一个接口调用(HyperCall),接口的提供方VMM实现对应处理,省去了捕获和模拟硬件流程等一大段工作,性能将获得大幅度提升。

    这就是半虚拟化,这项技术的代表就是Xen,一个诞生于2003年的开源项目。

    这项技术一个最大的问题是:需要修改gest OS内核,做相应的适配工作。这对于像Linux这样的开源软件还能接受,充其量多了些工作量罢了。但对于Windows这样闭源的商业操作系统,修改它的代码,无异于痴人说梦。

    趣闻故事

    为了取得更高的性能,让虚拟机内核从代码层面就重新定位自己的身份,不能像访问物理机一样访问网络或者硬盘,而是用一种特殊的方式:我知道我不是物理机内核,我知道我是虚拟机,我没那么高的权限,我很可能和很多虚拟机共享物理资源,所以我要学会排队,我写硬盘其实写的是一个物理机上的文件,那我的写文件的缓存方式是不是可以变一下,我发送网络包,根本就不是发给真正的网络设备,而是给虚拟的设备,我可不可以直接在内存里面拷贝给他,等等。

    一旦我知道我不是物理机内核,痛定思痛,只好重新认识自己,反而能找出很多方式来优化我的资源访问。

    这叫做类虚拟化或者半虚拟化。

    6.2.3 硬件辅助的虚拟化(效率高)

    核心思想:为CPU本身增加对虚拟化的支持

    Intel VTAMD-V创建一个新的Ring-1单独给Hypervisor使用

    Guest OS 可以直接使用Ring0无需修改

    eg:VMware ESXi,Microsoft Hyper-V,Xen3.0,KVM

    硬件辅助虚拟化细节较为复杂,简单来说,新一代CPU在原先的Ring0-Ring3四种工作状态之下,再引入了一个叫工作模式的概念,有VMX root operation 和 VMX non-root operation 两种模式,每种模式都具有完整的Ring0-Ring3四种工作状态,前者是VMM运行的模式,后者是虚拟机中的OS运行的模式。

    VMM运行的层次,有些地方将其称为Ring -1,VMM可以通过CPU提供的编程接口,配置对哪些指令的劫持和捕获,从而实现对虚拟机操作系统的掌控。

    换句话说,原先的VMM为了能够掌控虚拟机中代码的执行,不得已采用“中间人”来进行翻译执行,现在新的CPU告诉VMM:不用那么麻烦了,你提前告诉我你对哪些指令哪些事件感兴趣,我在执行这些指令和发生这些事件的时候就通知你,你就可以实现掌控了。完全由硬件层面提供支持,性能自然高了不少。

    上面只是硬件辅助虚拟化技术的一个简单理解,实际上还包含更多的要素,提供了更多的便利给VMM,包括内存的虚拟、I/O的虚拟等等,让VMM的设计开发工作大大的简化,VMM不再需要付出昂贵的模拟执行成本,整体虚拟化的性能也有了大幅度的提升

    Intel和AMD在2005年开始在CPU层面提供对系统虚拟化的支持,叫做硬件虚拟化。Intel在x86指令集的基础上增加了一套VMX扩展指令VT-x,为CPU增加了新的运行模式,完成了x86虚拟化漏洞的修补。通过新的硬件虚拟化指令,可以非常方便的构造VMM,并且x86虚拟机中的代码能够原生的运行在物理CPU上。此外还有,AMD的AMD-v系列技术。

    趣味故事

    为了让虚拟化软件(VMM)不当传话筒,还是要让虚拟机内核正视自己的身份,你不是物理机,你是虚拟机。

    但是怎么解决权限等级的问题呢?于是Intel的VT-x和AMD的AMD-V从硬件层面帮上了忙。另弄一个新的标志位,表示当前是在虚拟机状态下,还是真正的物理机内核下。

    对于虚拟机内核来讲,只要将标志位设为虚拟机状态,则可以直接在CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。

    所以安装虚拟机的时候,务必要将物理CPU的这个标志位打开,是否打开对于Intel可以查看grep "vmx" /proc/cpuinfo,对于AMD可以查看grep "svm" /proc/cpuinfo

    这叫做硬件辅助虚拟化。

    硬件辅助虚拟化的发展(以KVM为代表)

    有了硬件辅助虚拟化的加持,虚拟化技术开始呈现井喷之势。这其中在云计算领域声名鹊起的当属开源的KVM技术了。

    KVM全称for Kernel-based Virtual Machine,意为基于内核的虚拟机。

    在虚拟化底层技术上,KVM和VMware后续版本一样,都是基于硬件辅助虚拟化的实现。不同的是VMware作为独立的第三方软件可以安装在Linux、Windows、MacOS等多种不同的操作系统之上,而KVM作为一项虚拟化技术已经集成到Linux内核之中,可以认为Linux内核本身就是一个HyperVisor,这也是KVM名字的含义,因此该技术只能在Linux服务器上使用

    KVM本身基于硬件辅助虚拟化(通过内核模块kvm.ko来实现核心虚拟化功能),仅仅实现CPU和内存的虚拟化,有了KVM之后,Guest OS的CPU指令不用再经过QEMU转译便可直接运行,大大提高了运行速度。但一台计算机不仅仅有CPU和内存,还需要各种各样的I/O设备,所以它必须结合QEMU才能构成一个完整的虚拟化技术。这个时候,QEMU就和KVM搭上了线,经过改造后的QEMU,负责外部设备的虚拟,KVM负责底层执行引擎和内存的虚拟,两者彼此互补,成为新一代云计算虚拟化方案的宠儿(称为KVM-QEMU架构)。 

    注:在x86架构CPU的硬件辅助虚拟化技术诞生之前,QEMU就已经采用全套软件模拟的办法来实现虚拟化,只不过这种方案下的执行性能非常低下(全虚拟化)。

     QEMU现在的主要用途已经不是作为一个模拟器了,而是作为以 QEMU-KVM为基础的为云计算服务的系统虚拟化软件。不仅仅KVM将 QEMU作为应用层组件,Xen后来支持的硬件虚拟机也使用 QEMU作为其用户态组件来完成虚拟机的设备模拟。

    6.3 容器技术(LXC和Docker)

     一种轻量级/操作系统虚拟化方式,由Linux内核支持

    起源:chroot系统调用,对当前程序及其子进程改变根目录

    优势:更快的交付和部署、更高效的虚拟化、更轻松的迁移和扩展、更简单的管理

    无论是基于翻译和模拟的全虚拟化技术、半虚拟化技术,还是有了CPU硬件加持下的全虚拟化技术,其虚拟化的目标都是一台完整的计算机(即:系统虚拟化),拥有底层的物理硬件、操作系统和应用程序执行的完整环境。而虚拟机中的程序或许只是想要一个单独的执行执行环境,不需要虚拟出一个完整的计算机来。

    不同于虚拟化技术要完整虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境。

    LXC技术就是这种方案的一个典型代表,全称是LinuX Container,通过Linux内核的Cgroups技术和namespace技术的支撑,隔离操作系统文件、网络等资源,在原生操作系统上隔离出一个单独的空间,将应用程序置于其中运行。举个例子,一套原来是三居室的房子,被改造成三个一居室的套间,每个一居室套间里面都配备了卫生间和厨房,对于住在里面的人来说就是一套完整的住房。

    Docker技术底层原理与LXC并无本质区别,甚至在早期Docker就是直接基于LXC的高层次封装。Docker在LXC的基础上更进一步,将执行执行环境中的各个组件和依赖打包封装成独立的对象,更便于移植和部署。

    容器技术的好处是轻量,所有隔离空间的程序代码指令不需要翻译转换,就可以直接在CPU上执行,大家底层都是同一个操作系统,通过软件层面上的逻辑隔离形成一个个单独的空间。

    容器技术的缺点是安全性不如虚拟化技术高,毕竟软件层面的隔离比起硬件层面的隔离要弱得多。隔离环境系统和外面的主机共用的是同一个操作系统内核,一旦利用内核漏洞发起攻击,程序突破容器限制,实现逃逸,危及宿主计算机,安全也就不复存在。

    记在最后:这篇博文严格来说只是找到了虚拟化的“门”,并不算是“入了门”,笔者接下来准备将调研重点放在“ QEMU”上,具体包括 QEMU的二进制翻译实现原理,安装,代码阅读等。

    君子以坦荡立于世间,必将步步生花,一路繁华,加油!

    注:本篇博文内容是作者对网上的众多资料学习后,形成的阅读笔记,现将部分参考资料备注如下:

    QEMU/KVM源码解析与应用 -- 李强 -京东阅读-在线阅读

    开源虚拟化KVM入门(KVM架构+KVM基本管理)视频课程【共34课时】_虚拟化课程-51CTO学堂

    我是虚拟机内核我困惑?!

    懂了!VMware、KVM、Docker原来是这么回事儿 - 知乎

    QEMU/KVM源码解析与应用(第一章)_都怪这夜色的博客-CSDN博客_qemukvm源码解析与应用pdf

    QEMU-KVM介绍_虚拟化系列视频课程(二)------KVM虚拟机实战篇_虚拟化视频-51CTO学堂Qemu,KVM,Virsh傻傻的分不清

    展开全文
  • 常见虚拟化技术

    千次阅读 2022-04-14 09:09:14
    1、简单叙述常见的虚拟化技术分类; 1.CPU虚拟化 CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能。 2.服务器虚拟化 服务器虚拟化...

    1、简单叙述常见的虚拟化技术分类;

    1.CPU虚拟化
    CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能。
    2.服务器虚拟化
    服务器虚拟化能够通过区分资源的优先次序,并随时随地将服务器资源分配给最需要它们的工作负载来简化管理和提高效率,从而减少为单个工作负载峰值而储备的资源。
    3.存储虚拟化
    虚拟存储设备需要通过大规模的raid子系统和多个I/O通道连接到服务器上,智能控制器提供LUN访问控制、缓存和其他如数据复制等管理功能。
    4.网络虚拟化
    网络虚拟化整合后的设备组成了一个逻辑单元,在网络中表现为一个网元节点,管理简单化、配置简单化、可跨设备链路聚合,极大简化网络架构,同时进一步增强冗余可靠性。
    5.应用虚拟化
    应用虚拟化通常包括两层含义,一是应用软件的虚拟化,一是桌面的虚拟化。

    2、XEN虚拟化技术的优缺点;

    Xen虚拟化技术的优点:
    (1)Xen构建于开源的虚拟机管理程序上,结合使用半虚拟化和硬件协助的虚拟化。操作系统与虚拟化平台之间的这种协作支持开发一个较简单的虚拟机管理程序来提供高度优化的性能。
    (2) Xen提供了复杂的工作负载均衡功能,可捕获CPU、内存、磁盘I/O和网络I/O数据,它提供了两种优化模式:一种针对性能,另一种针对密度。
    (3) Xen利用一种名为Citrix Storage Link 的独特的存储集成功能。使用Citrix Storage Link,系统管理员可直接利用来自HP、Dell Equal Logic、NetApp、EMC等公司的存储产品。
    (4) Xen包含多核处理器支持、实时迁移、物理服务器到虚拟机转换(P2V)和虚拟到虚拟转换(V2V)工具。集中化的多服务器管理、实时性能监控,以及Windows和Linux的快速性能。
    Xen虚拟化技术的缺点:
    (1) Xen会占用相对较大的空间,且依赖于0号虚拟机中的Linux操作系统。
    (2) Xen依靠第三方解决方案来管理硬件设备驱动程序、存储、备份和恢复,以及容错
    任何具有高I/O速率的操作或任何会吞噬资源的操作都会使Xen陷入困境,使其他虚拟机缺乏资源。
    (3) Xen缺少802.1Q 虚拟局域网(VLAN)中继,出于安全考虑,它没有提供目录服务集成、基于角色的访问控制、安全日志记录和审计或管理操作。
    (4) Xen目前最大的困难在于Linux内核社区的抵制,导致XEN相关的内核改动一直不能顺利进入内核源代码,从而无法及时得到内核最新开发成果的支持。

    3、KVM虚拟化技术功能特性及优缺点;

    1.开源
    KVM 一个开源项目,这就决定了KVM一直是开放的姿态,许多虚拟化的新技术都是首先在KVM上应用,再到其他虚拟化引擎上推广。
    2.性能
    KVM吸引许多人使用的一个动因就是性能,在同样的硬件条件下,能提供更好的虚拟机性能,主要是因为KVM架构简单,代码只有2万行,一开始就支持硬件虚拟化,这些技术特点保证了KVM的性能。
    3.免费
    KVM因为是开源项目,绝大部分KVM的解决方案都是免费方案,随着KVM的发展,KVM虚拟机越来越稳定,兼容性也越来越好,因而也就得到越来越多的应用。
    4.技术支持
    免费并不意味着KVM没有技术支持。在KVM的开源社区,数量巨大的KVM技术支持者都可以提供KVM技术支持。另外,如果需要商业级支持,也可以购买红帽公司的服务。
    虚拟化技术的优点
    KVM是一个免费开源软件,提供了虚拟化解决方案;提供了强大的命令行接口。
    虚拟化技术的缺点
    KVM可以运行在不支持虚拟化的CPU硬件上,但是在这样的话,效率会很低;KVM也可能会和虚拟机virtualbox冲突; KVM只是提供命令行接口,用户可以写脚本来管理KVM,并没有一个友好的GUI。

    4、红帽RHEV技术功能特性及优缺点;

    RHEV(Red Hat Enterprise Virtualization)红帽企业虚拟化,是一个服务器虚拟化的管理平台。由RHEV-M(Manager)、RHEV-H(Hypersior)和存储组成,能够简便、集中的对KVM虚拟机进行创建、删除、迁移、快照等操作,实现企业服务器物理资源的充分使用。是一种非常适合中小型企业的虚拟化解决方案。其组成如下图所示:在这里插入图片描述
    Xen虚拟化技术的优点:
    (1)性能和可扩展性:为实现企业级的虚拟化应用程序,如Oracle、SAP和Microsoft Exchange,为其提供领先的性能和可扩展性。
    (2)安全性:业界领先的安全性,在安全增强型红帽企业Linux内核基础上构建。
    (3)企业功能:业虚拟化管理功能,包括实时迁移、高可用性、负载均衡、节能等。
    (4)灵活性:通过消除桌面操作系统和基础硬件之间的依赖性,实现业务灵活性和连续性。
    (5)成本优势:与其他解决方案相比较,凭借红帽软件订阅模式的强大功能,能够以更低的购置和总拥有成本获得相同或更好的功能集,从而获得收益。
    Xen虚拟化技术的缺点:
    (1)技术不成熟:KVM的出现不过三四年时间,在可用资源、平台支持、管理工具、实施经验方面当然不能与出现8年之久的Xen相比。
    (2)需要Windows支持;KVM3.0之前的RHEV-M管理程序需要Windows支持,这是KVM在部署过程中最大的障碍,RedHat公司已经意识到这个问题的严重性,从KVM3.0开始,开发出基于Linux的RHEV-M,取消了其只能运行于Windows服务器上的尴尬,这一改动得到大量Linux用户的支持。
    (3)管理的物理服务器数量少,每台M端只能管理500台以内的H端服务器。

    5、简单叙述其他虚拟化技术的实现方法。

    VMware
    (1)VMware Workstation
    VMware Workstation是VMware公司销售的运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。该产品最早采用了VMware在业界知名的二进制翻译技术,在x86 CPU硬件虚拟化技术还未出现之前,为客户提供了纯粹的基于软件的全虚拟化解决方案。
    (2)VMware ESX Server
    ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP,它能让一个虚拟机同时使用四个物理处理器,和VMFS一样,它能使多个ESX服务器分享块存储器。
    Virtual Box
    Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机软件,现在由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部分。它提供使用者在32位或64位的Windows、Solaris及Linux操作系统上虚拟其他X86的操作系统。使用者可以在VirtualBox上安装并执行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等操作系统作为客户端操作系统。最新的VirtualBox还支持运行Android4.0系统。
    Hyper-V
    Hyper-V是微软提出的一种系统管理程序虚拟化技术。Hyper-V设计的目的是为广泛的用户提供更为熟悉及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。

    Hyper-V的设计借鉴了Xen,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V底层的Hypervisor运行在最高的特权级别下,微软将其称为ring-1(而Intel也将其称为root mode),而虚拟机的操作系统内核和驱动运行在ring0,应用程序运行在ring3。
    在这里插入图片描述

    展开全文
  • 虚拟化技术介绍

    千次阅读 2022-03-24 12:39:55
    虚拟化是一种资源管理技术,它将计算机的各种实体资源(CPU、内存、存储、网络等)予以抽象和转化出来,并提供分割、重新组合,以达到最大化利用物理资源的目的。 VMM(Virtual Machine Monitor),虚拟机监控器,也...
  • 虚拟化技术之docker技术详解

    千次阅读 多人点赞 2021-09-30 09:34:39
    文章目录虚拟化技术之docker技术详解 [⭐建议收藏⭐]关于作者作者介绍前言虚拟化技术概述及简介一 、什么是虚拟化技术?二、常见的虚拟化技术有哪些?2.1 KVM 虚拟化技术概念2.2 ESXI 虚拟化技术概念2.3 XEN 虚拟化...
  • 虚拟化技术原理

    千次阅读 2020-12-21 15:33:26
    3. 2 虚拟化技术原理 到目前为止,虚拟化技术的各方面都有了进步,虚拟化也从纯软件的虚拟化逐深入到处理器级虚拟化,再到平台级虚拟化乃至输入/输出级虚拟化。对数据中心来说,虚拟化可以节约成本,最大化利用数据...
  • 虚拟化技术简介

    千次阅读 2021-03-26 20:52:14
    虚拟化:是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统, 并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高...
  • 主要介绍虚拟化技术的历史演进过程和KVM虚拟化的一些特点。 0、简介 虚拟化技术的演变过程可以分为软件模拟、虚拟化层翻译、容器虚拟化三个大的阶段。其中,虚拟化层翻译又可以分为:软件捕获翻译(软件全虚拟化)...
  • 虚拟化技术的原理 虚拟化的基本概念 虚拟化是一种资源管理技术, 是将计算机的各种物理资源, 如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破物理设备结构间的不可切割的障碍,使用户可以比原本的...
  • 云计算技术与应用云计算关键技术—— 虚拟化本专题主要内容1 虚拟化概述2 服务器虚拟化3 存储虚拟化4 网络虚拟化5 桌面虚拟化1 虚拟化概述 虚拟化技术已经成为构建云计算环境的一项关键技术虚拟化技术的核心思想是...
  • 云计算和虚拟化技术

    千次阅读 2021-04-10 15:30:39
    # 写于2021.04.10 ...虚拟化 高可靠性 通用性 高可伸缩性 按需服务 极其廉价 1.3 云计算你找服务类型可分为哪几类? 1.4 云计算技术体系结构可分为哪几层? 资源池和管理中间件层为云计算技术
  • 云计算之虚拟化技术

    万次阅读 2019-07-16 15:01:35
    云叔和云计算关注 0.12017.12.10 13:32*字数 3194阅读 7608评论 0喜欢 5 通过前几篇文章的阅读,相信大家对云计算概念、架构和技术有了一定的认识。...在讲虚拟化技术前,我们先来学习几个概念: ...
  • 虚拟化技术的分类及介绍

    万次阅读 多人点赞 2019-01-03 19:45:06
    虚拟化技术的分类及介绍   摘要 虚拟化是云计算系统中的一种基础技术,可以说当前一个云计算服务必定是构建在虚拟化的基础上的。本文首先介绍了不同抽象层次的虚拟化技术,之后对应用广泛的系统级虚拟化和操作...
  • 虚拟化技术详解

    万次阅读 多人点赞 2018-07-14 17:10:52
    看到这篇文章的朋友,大部分应该都用过虚拟化软件,然后才会想知道虚拟化技术的。windows下的常用的虚拟化技术有VmWare,VirtualBox等等,那么这篇文章将会介绍这些技术基本的实现原理,并普及虚拟化相关的术语描述。 ...
  • 虚拟化技术概述介绍

    万次阅读 多人点赞 2020-04-11 17:22:01
    虚拟化技术 一、虚拟化技术概述 1.1、什么是虚拟化 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机(对计算机物理资源的抽象,实现资源的模拟、隔离和共享)。在一台计算机上同时运行多个逻辑计算机,...
  • 虚拟化技术原理(CPU、内存、IO)

    万次阅读 2019-08-27 10:10:52
    云计算现在已经非常成熟了,而虚拟化是构建云计算基础架构不可或缺的关键技术之一。 云计算的云端系统, 其实质上就是一个大型的分布式系统。 虚拟化通过在一个物理平台上虚拟出更多的虚拟平台, 而其中的每一个虚拟...
  • 好了,说完了CPU和内存的例子,不细说网络和硬盘了,也是类似,都是虚拟化软件模拟一个给虚拟机内核看的,其实啥事儿都需要虚拟化软件转一遍。 这种方式一个坏处,就是慢,往往慢到不能忍受。 于是虚拟化软件...
  • 浅谈虚拟化技术分类认识

    千次阅读 2019-08-07 23:38:47
        虚拟化技术已经在信息化产业领域产生了深刻的影响,被认为是支持云计算发展炙手可热的关键技术。广义的虚拟化意味着将不存在的事物或现象“虚拟”成为存在的事物或现象的方法;侠义的虚拟化虚拟化技术专指一台...
  • KVM 虚拟化技术(理论详解+实战)

    万次阅读 2021-03-04 10:26:50
    文章目录前言什么是虚拟化为什么要用虚拟化虚拟化技术的优势KVM简介关于KVM关于Virtual Machine Manager其他虚拟化软件KVM虚拟化平台部署 前言 什么是虚拟化 在计算机技术中,虚拟化(技术)或虚拟技术(英语:...
  • 浅谈Linux设备虚拟化技术的演进之路

    千次阅读 多人点赞 2021-09-16 14:56:42
    序言设备虚拟化技术,一直是云计算领域最重要的基础技术之一。我们在虚拟机里面看到的形形色色的设备,比如:网卡,磁盘,键盘,鼠标等,都离不开这项技术的帮助。这篇文章,我们将从技术演进的角度来谈...
  • 虚拟化技术的优点和缺点

    万次阅读 2019-10-10 13:54:29
    虚拟化技术的优点和缺点 在过去几年中,虚拟化一直是数据中心和企业技术的重点,大量企业已经使用云计算和其他解决方案实现了虚拟化。即使是小型企业,尤其是那些依赖数据处理的企业,也在享受虚拟化带来的好处。...
  • 了解虚拟化技术基础、服务器虚拟化、存储虚拟化和网络虚拟化技术
  • 虚拟化技术知识总结

    千次阅读 2021-11-15 09:36:23
    虚拟化是云计算系统中的一种基础技术,当前基本所有云计算服务都是构建在虚拟化所构造虚拟层基础上的。虚拟层将底层的传统硬件进行了整合甚至屏蔽,使上层的应用可透明的以为自己就是泡在真实的物理环境中,极大得...
  • 五种主流的虚拟化技术

    千次阅读 2019-04-17 21:11:46
    随着虚拟化技术的窜红,打着它的旗号的“衍生品”层出不穷。然而尽管到现在各种虚拟化技术还没能泾渭分明,但随着时间的发展,五种主流的虚拟化技术逐步展露。这五种虚拟化技术分别是:CPU虚拟化、网络虚拟化、...
  • 虚拟化技术在企业网络中的应用

    千次阅读 2021-11-15 10:01:23
    2019-11-试题二虚拟化技术在企业网络中的应用 虚拟化技术已经广泛应用于各类应用中,结合自己参与设计的系统加以评估,写出一篇有自己特色的论文。请围绕“虚拟化技术在企业网络中的应用”论题,依次从以下三个方面...
  • 六大Linux虚拟化技术全面讲解

    千次阅读 2021-05-12 05:27:45
    关于Linux虚拟化技术大致上可以分为六个不同的方式。在本文中,我们将讨论实现Linux虚拟化的这六种方式,以及Linux下的多种虚拟化解决方案。当我们讨论虚拟化解决方案的时候,常常都要提到具体厂商的具体产品,但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 461,519
精华内容 184,607
关键字:

虚拟化技术