精华内容
下载资源
问答
  • 计算虚拟化的应用背景计算虚拟化是指在硬件层和应用层之间增加虚拟化层,对包括CPU、内存等计算机资源的表示、访问和管理进行简化,并为这些资源提供标准的I/O接口。通过虚拟化技术在一台物理机上虚拟和运行多台...

    物理机器是由CPU、内存和I/O设备等一组资源构成的实体。类似,虚拟机由虚拟CPU,虚拟内存和虚拟I/O设备等组成。

    19ffbdce345926c47534191e75df32a0.png

    计算虚拟化的应用背景

    计算虚拟化是指在硬件层和应用层之间增加虚拟化层,对包括CPU、内存等计算机资源的表示、访问和管理进行简化,并为这些资源提供标准的I/O接口。

    • 通过虚拟化技术在一台物理机上虚拟和运行多台虚拟机,从而提升计算机硬件资源的利用率。

    随着虚拟化技术的引入,应用层获得了软硬件解耦的好处,同时虚拟化技术也带来了性能的损失。如何保证应用层的高性能,降低虚拟化层对系统性能的影响?

    • 例如华为CloudCore解决方案通过资源隔离、NUMA亲和、绑核计算性能优化关键技术保证业务虚拟机的性能

    计算虚拟化的核心技术

    计算资源虚拟化可以简单理解为将pCPU(物理CPU)以vCPU(虚拟CPU)的形式分配给虚拟机使用。

    • 资源隔离:支持每个刀片服务器上虚拟化层资源隔离,用于限制虚拟化层进程的资源占用,避免虚拟化层进程和业务虚拟机之间抢占资源相互影响。
    • vCPU绑核:把某个虚拟机的vCPU与pCPU做一对一绑定并独占pCPU。
    b93554c0eca2196c44792ffd700e325b.png

    NUMA概念

    从服务器CPU架构来看,目前的商用服务器大体可以分为三类:

    • 多处理器结构 (SMP : Symmetric Multi-Processor)
    • 海量并行处理结构 (MPP : Massive Parallel Processing)
    • 非一致存储访问结构 (NUMA : Non-Uniform Memory Access):NUMA架构中,CPU可以访问整个系统内存,且访问本地内存的速度将远远高于访问远端内存
    ea211b2c560da5c01474265e738d94bc.png

    NUMA部署策略

    NUMA亲和性

    • 采用NUMA亲和性创建VM,使得VM的vCPU和内存资源来自于计算节点的同一个NUMA NODE,有效提升VM访问内存的性能,对于内存访问频繁性的应用性能提升更为明显。

    IO-NUMA

    • 当使用IO-NUMA时,VM的虚拟网卡也来自于同一NUMA NODE的物理网卡,避免跨NUMA NODE,从而提升VM的网络IO。
    4260519615f368df56853f806a9c431b.png

    部署策略

    *****

    好的,本期内容就是这些,如果大家有什么好的想法欢迎在下方评论区回复!

    喜欢的朋友可以点击“关注”和“转发”,您的支持对小编非常重要,新朋友可以阅览往期内容,小编会时不时地进行资料福利的分享哦!

    c367cedcc442f8e9bc11223dc74429cb.png

    我们下期再见!

    展开全文
  • 文章目录计算虚拟化相关概念及技术计算虚拟化概念什么是虚拟化?虚拟化的本质计算虚拟化技术分类根据虚拟化对象分类:根据虚拟化过程分类:CPU虚拟化首先我们要考虑,CPU虚拟化需要解决哪些问题?CPU与vCPU对应关系...

    文章目录

    计算虚拟化相关概念及技术

    计算虚拟化概念

    什么是虚拟化?

    虚拟化的本质

    计算虚拟化技术分类

    根据虚拟化对象分类:

    根据虚拟化过程分类:

    CPU虚拟化

    首先我们要考虑,CPU虚拟化需要解决哪些问题?

    CPU与vCPU对应关系

    内存虚拟化

    内存虚拟化需要解决的问题?

    影子页表

    EPT(扩展页表)

    透明大页(THP)

    I/O虚拟化

    I/O虚拟化需要解决的问题

    在QEMU/KVM中,客户机可以使用的设备大致可分为三类

    模拟设备

    Virtio设备

    PCI设备直接分配

    FusionCompute计算虚拟化介绍

    计算虚拟化功能特性

    兼容行业特殊操作系统

    灵活管理架构

    支持GPU虚拟化、GPU直通

    在线调整CPU和内存

    主机内存超分配

    内存复用包括:

    NUMA亲和性调度

    虚拟机HA

    虚拟机热迁移

    DRS动态资源调度

    DPM分布式电源管理

    IMC集群策略

    规则组

    计算虚拟化相关概念及技术

    计算虚拟化概念

    什么是虚拟化?

    虚拟化可以看作是一个抽象层,它打破了原本物理硬件和操作系统之间紧耦合的关系。

    虚拟化可以将资源抽象成共享资源池,实现对资源的动态调度和管理。

    本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。

    虚拟化的本质

    分区:虚拟化层为多个虚拟机划分所需的服务器资源,每个虚拟机可以同时运行一个单独的操作系统。

    隔离:虚拟机之间相互隔离(可以进行资源控制、性能隔离)

    封装:意味着整个虚拟机(硬件配置、BIOS 配置、内存状态、磁盘状态、CPU 状态)都存储在一个文件夹当中,只需要复制文件,就可以实现虚拟机的移动、复制。

    相对于硬件独立 :由于虚拟机运行在虚拟化层上,使用虚拟的硬件,不用考虑物理服务器的情况。因此在任何x86服务器上都可以无需任何修改的运行虚拟机。

    计算虚拟化技术分类

    根据虚拟化对象分类:

    CPU虚拟化—为了虚拟机上的指令可以被正常执行

    内存虚拟化—做到虚拟机之间的内存空间相互隔离,使它们都认为自己拥有整个内存空间

    I/O虚拟化—让虚拟机可以访问到所需的I/O资源

    根据虚拟化过程分类:

    全虚拟化—使用VMM实现CPU、内存、设备I/O的虚拟化。(兼容性好,但处理器会产生额外开销。)

    半虚拟化—使用VMM实现CPU和内存虚拟化,I/O虚拟化交给GusetOS实现。(因此需要修改操作系统内核,使得它们可以协同工作。兼容性差,只有Suse、Ubuntu等少数Linux系统支持。但性能比全虚拟化好)

    硬件辅助虚拟化—借助硬件(主要为处理器)的支持来实现高效的全虚拟化。

    CPU虚拟化

    首先我们要考虑,CPU虚拟化需要解决哪些问题?

    如何模拟CPU指令(敏感指令)

    敏感指令:可以读写系统关键资源的指令

    系统关键资源:处理器呈现给软件的接口是指令集和寄存器。而 I/O 设备呈现给软件的接口是状态和控制寄存器。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源 。

    特权指令:绝大多数的敏感指令都是特权指令,特权指令只在处理器的最高特权级执行。

    如何让多个虚拟机共享CPU

    类似于原生操作系统的定时器中断机制。(中断:在计算机执行程序期间,系统发生了需要紧急处理的事件,cpu会立刻停止当前操作,转而去处理相应的中断处理程序。处理完毕后,返回原本被中断的位置继续执行。)

    在CPU虚拟化场景下,当中断触发时陷入VMM,从而根据调度机制进行资源的调度。

    全虚拟化可以分为软件辅助虚拟化和硬件辅助虚拟化。

    (参考博客:https://blog.csdn.net/jmilk/article/details/51824935)

    软件辅助虚拟化能够成功的将所有在GuestOS中执行的系统内核特权指令进行捕获、翻译,使之成为只能对GuestOS生效的虚拟特权指令。(主要是由于CPU不能准确判断一个特权指令到底是GuestOS还是HostOS发出的,所以需要翻译。)

    硬件辅助虚拟化主要使用了支持虚拟化功能的CPU进行支撑,CPU可以明确的分辨出来自GuestOS的特权指令,并针对GuestOS进行特权操作,而不会影响到HostOS。

    半虚拟化:

    需要对GuestOS的内核代码做一定的修改,才能够将GuestOS运行在半虚拟化的VMM中。其中修改的部分则是加入了hypercall(超级调用),例如:可将GuestOS

    访问物理网卡做成系统调用,当GuestOS需要访问物理网卡时,就可明确告诉它可直接通过系统调用来访问物理网卡,这样可绕过宿主OS的参与直接完成访问,其效率更高。

    FusionCompute计算虚拟化技术采用的是KVM技术。KVM的CPU虚拟化是基于CPU辅助的全虚拟化(硬件辅助虚拟化)。

    x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。 Ring 是指 CPU 的运行级别,Ring 0是最高级别。

    Ioctl—专用于设备输入输出操作的系统调用。

    CPU与vCPU对应关系

    以RH2288H V3服务器使用2.6GHz主频CPU为例,单台服务器有2个物理CPU,每颗CPU有8核,又因为超线程技术可以提供每个物理内核两个处理线程,因此每颗CPU有16线程,总vCPU数量为282=32个vCPU。总资源为32*2.6GHz=83.2GHz。

    虚拟机vCPU数量不能超过单台CNA节点可用vCPU数量。多个虚拟机间可以复用同一个物理CPU,因此单CNA节点上运行的虚拟机vCPU数量总和可以超过实际vCPU数量。

    内存虚拟化

    内存虚拟化需要解决的问题?

    从物理地址0开始的:物理地址0只有一个,无法同时满足所有客户机从0开始的要求

    地址连续:虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性

    通过内存虚拟化共享物理系统内存,动态分配给虚拟机。

    影子页表

    由于宿主机MMU不能直接装载客户机的页表来进行内存访问,所以当客户机访问宿主机物理内存时,需要经过多次地址转换。也即首先根据客户机页表把客户机虚拟地址 (GVA)转换成客户机物理地址 (GPA),然后再通过客户机物理地址 (GPA)到宿主机虚拟地址 (HVA)之间的映射转换成宿主机虚拟地址,最后再根据宿主机页表把宿主机虚拟地址 (HVA)转换成宿主机物理地址 (HPA)。而通过影子页表,则可以实现客户机虚拟地址到宿主机物理地址的直接转换

    EPT(扩展页表)

    CR3(控制寄存器3)将客户机程序所见的客户机虚拟地址(GVA)转化为客户机物理地址(GPA),然后在通过EPT将客户机物理地址(GPA)转化为宿主机物理地址(HPA)。这两次转换地址转换都是由CPU硬件来自动完成的,其转换效率非常高。

    EPT只需要维护一张EPT页表,而不需要像“影子页表”那样为每个客户机进程的页表维护一张影子页表,从而也减少了内存的开销。

    透明大页(THP)

    增加了内存页面的大小,从而减少了页表的数量,所需要的地址转换也减少,TLB缓存失效次数也减少,提高了内存访问的性能。(另外,由于地址转换信息一般保存在CPU的缓存当中,大页的使用让地址转换减少,从而降低了CPU缓存的使用,提升了整体性能。)

    I/O虚拟化

    I/O虚拟化需要解决的问题

    设备发现:

    需要控制各虚拟机能够访问设备

    访问截获:

    通过I/O端口或者MMIO(内存映射I/O)对设备的访问

    设备通过DMA(直接内存存取)与内存进行数据交换

    在QEMU/KVM中,客户机可以使用的设备大致可分为三类

    模拟设备

    模拟I/O设备方式的优点是对硬件平台依赖性较低、可以方便模拟一些流行的和较老久的设备、不需要宿主机和客户机的额外支持,因此兼容性高;

    而其缺点是I/O路径较长、VM-Exit次数很多,因此性能较差。一般适用于对I/O性能要求不高的场景。

    Virtio设备

    优点是实现了VIRTIO API,减少了VM-Exit次数,提高了客户机I/O执行效率,比普通模拟I/O的效率高很多;

    而其缺点是需要客户机中与virtio相关驱动的支持 (较老的系统默认没有自带这些驱动,Windows系统中需要额外安装virtio驱动),因此兼容性较差。

    PCI设备直接分配

    设备直接分配让客户机完全占有PCI设备,这样在执行I/O操作时大量地减少甚至避免了VM-Exit陷入到Hypervisor中,极大地提高了I/O性能,可以达到几乎和Native系统中一样的性能。

    存在问题:一台服务器主板上的空间有限,所以允许添加的PCI设备也有限。另外成本较高。

    FusionCompute计算虚拟化介绍

    虚拟机生命周期管理:创建、删除、开关机、克隆、快照、迁移等

    虚拟资源管理:主机组、模板管理、数据中心/集群/主机/虚拟机分层管理等

    虚拟资源配置管理:内存复用、虚拟机资源、CPU超分配、NUMA调度等

    计算虚拟化功能特性

    兼容行业特殊操作系统

    (比较好理解不多谈了)

    灵活管理架构

    (比较好理解不多谈了)

    支持GPU虚拟化、GPU直通

    GPU虚拟化:类似于CPU虚拟化,提高GPU利用率,支持对vGPU资源管理和调度。

    GPU直通:物理GPU在硬件支持虚拟机通过绑定GPU直接访问物理GPU的部分硬件资源。

    在线调整CPU和内存

    支持主流Linux系统虚拟机在线调整CPU和内存;支持主流Windows系统虚拟机在线调整内存,在线调整CPU后重启生效。

    主机内存超分配

    支持虚拟机总配置内存超过物理主机实际运行内存,通过虚拟机之间使用内存气泡、内存交换以及内存共享等技术实现物理内存超规格使用。

    内存复用包括:

    内存共享:多台虚拟机共享数据内容相同的内存页。

    内存置换:将外部存储虚拟成内存给虚拟机使用,将虚拟机上暂时不用的数据存放到外部存储上。系统需要使用这些数据时,再与预留在内存上的数据进行交换。

    内存气泡:系统主动回收虚拟机暂时不用的物理内存,分配给需要复用内存的虚拟机。内存的回收和分配均为系统动态执行,虚拟机上的应用无感知。整个物理服务器上的所有虚拟机使用的分配内存总量不能超过该服务器的物理内存总量。

    NUMA亲和性调度

    NUMA—非统一内存访问

    NUMA把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间是通过互联模块进行连接和信息交互。

    只有当CPU访问自身内存对应的物理地址时,才会有较短的响应时间(后称Local Access)。而如果需要访问其他节点的内存的数据时,就需要通过inter-connect通道访问,响应时间就相比之前变慢了(后称Remote Access)

    所以在NUMA架构下,我们选择同一节点的CPU和内存,保证虚拟机的运行效率。

    虚拟机HA

    当虚拟机所处节点故障时,选择集群内可用节点重新启动该虚拟机,保障业务连续性,降低业务中断时间。

    支持主机、虚拟平台、虚拟机内部多种故障场景的检测和虚拟机恢复

    虚拟机热迁移

    支持在不影响用户使用或中断服务的情况下在服务器之间实时迁移虚拟机,这样就不需要为了服务器维护而中断业务了。

    DRS动态资源调度

    统一集群内,均衡各节点资源使用并保障业务有充足资源可用。因此,DRS是实现自动负载均衡的基础。

    DPM分布式电源管理

    该功能会自动检测集群内服务器资源使用情况。当出现资源利用率不足时,将该主机上的虚拟机迁移到其他主机,并做下电操作。反之同理。

    IMC集群策略

    设置集群的IMC策略,使虚拟机可以在不同CPU类型的主机之间进行迁移。不会因为CPU类型不同而导致虚拟机迁移失败。因为集群内主机会向虚拟机提供相同的CPU功能集。

    规则组

    设定规则组可以控制虚拟机与虚拟机、虚拟机与主机之间的位置关系,以满足不同应用场景的需求

    主要分为:聚集虚拟机、互斥虚拟机、虚拟机到主机

    (这个比较好理解,在这里就不多谈了)

    展开全文
  • 计算虚拟化简介

    千次阅读 2020-02-28 13:24:24
    云计算1.0时代以计算虚拟化技术为主,因此虚拟化技术也成为云计算的入门知识。 学习云计算有两个必不可少的学习内容:虚拟化、Linux 虚拟化简介 定义: 是一种可以将一台计算机虚拟成多台逻辑计算机的技术。在一台...

    前言

    云计算1.0时代以计算虚拟化技术为主,因此虚拟化技术也成为云计算的入门知识。
    学习云计算有两个必不可少的学习内容:虚拟化、Linux

    虚拟化简介

    定义:

    是一种可以将一台计算机虚拟成多台逻辑计算机的技术。在一台计算机上同时运行多台逻辑计算机,每个逻辑计算机可运行不用的操作系统,并且各自的应用程序都可以在互相独立的空间内运行而不受影响,从而显著挺高计算机的工作效率。

    说白了就是把物理的设备进行逻辑化。以前的用的物理服务器、电脑都是可以看的见的。现在把物理的设备转成一个逻辑的文件夹。文件夹中一部分记录硬件信息,一部分记录用户数据。
    文件夹可以同时保存在一个物理机上。所以一个物理机上可以同时运行多台虚拟机。每个虚拟机都都可以独立运行一个操作系统。所以提高资源利用率。
    相信很多朋友都在自己的电脑上装过虚拟机,如用VMware Workstation来装Linux等操作系统,细心的朋友一定会发现创建出来的虚拟机是文件的形式存在的。
    文件夹的形式
    我电脑上的虚拟机

    计算机虚拟化发展史

    1964年IBM开始尝试在大型机上实现虚拟化,1972年IBM成功推出了在大型机上的虚拟化。1978 年 6 月 8 日,英特尔(Intel)发布了新款的 16 位微处理器 8086,自此开创了一个新的时代,属于 x86 架构的时代,直至今天。在隔了二十多年的时间之后,1999年,个人电脑需求火热的时代,VMware推出了x86架构的虚拟化产品,从此虚拟化技术终于走下了大型机的神坛。 2002年英国剑桥大学的以为讲师发布了开源虚拟化项目Xen1.0,往后,基于 Xen 虚拟化解决方案陆续被 Redhat、Novell 和 Sun 等的 Linux 发行版集成,作为默认的虚拟化解决方案。后来Xen被思捷收购,Linux转投KVM。10年Xen彻底被Linux抛弃。2006年以色列公司Qumranet宣布推出KVM虚拟化技术,并在2008年被Red Hat收购,红帽开始使用KVM替换在Linux中使用的Xen。同年微软在windows Server 2008 R2中加入了Hyper-v技术。2011年IBM、红帽、惠普、英特尔成立开放虚拟化联盟,加速KVM推广与发展。2013年虚拟化容器技术Docker被推出,6 月,Docker 发布了第一个正式版本 v1.0。同年,Redhat 和 AWS 就宣布了为 Docker 提供官方支持。容器技术开始成为虚拟化热门技术。2014年Rocket被推出。
    看完了这段历史之后,很多朋友可能对Xen、KVM、Docker等概念云里雾里,别着急我会一个一个具体介绍。

    虚拟化中的重要概念

    重要概念

    物理服务器

    也就是我们个人电脑的架构

    最底层是硬件,然后是操作系统(Host OS)然后最上层是应用和用户交互,操作系统和硬件之间通过Bios相连
    Host Machine:

    物理最底层的硬件:CPU、内存、硬盘等

    Host OS:

    在物理机上安装的操作系统

    虚拟机

    相比物理服务器,有些不同:多出了操作系统(Guest OS)、虚拟机、虚拟机监视器。
    Hypervisor:

    虚拟机监视器/虚拟化软件层。又叫VMM:虚拟机监控机

    • 前面提到的KVM、XEN都是Hypervisor
    • 有了Hypervisor才有虚拟化,它是虚拟化的核心
    • 负责监控虚拟机的状态,给虚拟机分配CPU、内存、甚至是I/O的虚拟化。
      Guest Machine:

    虚拟机

    Guest OS:

    安装在虚拟机上的操作系统

    • Guest OS通过Hypervisor/VMM来访问实际的物理资源

    举例:平常用VMware安装虚拟机。Windows就是Host OS。VMware软件就有Hypervisor的功能,然后创建之间要建虚拟机,然后再在虚拟机上安装Linux或者其他操作系统:Guset OS。

    计算机虚拟化的分类

    根据Host OS和Hypervisor/VMM的关系分:
    (也可以说是根据Hypervisor/VMM的位置)

    类型 名称
    Ⅰ型 裸金属型虚拟化
    Ⅱ型 宿主型虚拟化

    虚拟化分类

    裸金属虚拟化(Ⅰ型)

    Hypervisor直接可以掌握调动硬件资源,不需要经过Host OS(没有Host OS)
    或者说:在Ⅰ型虚拟化中,Hypervisor就是Host OS,定制的Host OS

    优点:

    • 不依赖操作系统
    • 虚拟机支持多种操作系统以及多种应用

    缺点:

    • 内核开发难度大
    • 负载重

    产品

    • 华为的Fusion Compute
    • Xen Server
    • VMware Esxi
    • Hyper-v

    宿主型虚拟化(Ⅱ型)

    物理资源由Host OS来管理,实际的虚拟化功能由VMM提供。

    VMM是Host OS上的一个普通的应用程序。

    通过VMM在创建相应的虚拟机,和Host OS共享底层的硬件资源。VMM通过调用Host OS的服务来调用资源。VMM创建的虚拟机通常是作为Host OS中的一个进程在运行。

    优点:

    • 简单、易实现

    缺点

    • 占用资源多,性能损耗大

    产品

    • VMAware Workstation
    • VirtualBox(Oracle:甲骨文公司)
    • KVM

    Ⅰ型虚拟化和Ⅱ型虚拟化没有孰优孰劣之分。

    虚拟化的特点

    无论是Ⅰ型虚拟化还是Ⅱ型虚拟化都具备了以下四个特点

    特点 解释
    分区 传统的物理机,不会装很多应用,因为应用之间可能会有冲突。 将单个物理服务器上可以同时安装多个虚拟机,将物理资源分别分区给虚拟机,虚拟机认为自己是运行在专属的服务器上。
    隔离 虚拟机间互不干扰 一个Guest OS遭到病毒攻击,不是对其他造成影响
    封装 虚拟机封装成文件,且可以通过移动复制文件的方式来移动复制虚拟机。 将安装好的虚拟机拷贝到另一台物理机上也是可以运行的(VMware中的文件,直接复制到另一台电脑可以直接运行)
    独立 相对于硬件独立,一个硬件中可以装不同的虚拟机 无需修改就可以在任何服务器上运行虚拟机

    计算虚拟化一共分为三个领域。分别是CPU虚拟化、内存虚拟化、I/O虚拟化。

    cpu虚拟化

    CPU虚拟化分为

    分类
    全虚拟化
    半虚拟化

    CPU虚拟化

    CPU的分级保护域

    Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3。RING0层拥有最高的权限,RING3层拥有最低的权限。

    按照Intel原有的构想,应用程序工作在RING3层,只能访问RING3层的数据,操作系统工作在RING0层,可以访问所有层的数据,而其他驱动程序位于RING1、RING2层,每一层只能访问本层以及权限更低层的数据。Guest os在Ring1

    如果普通应用程序企图执行RING0指令,则会显示“非法指令”错误信息。

    原因:

    保护计算机安全。威胁到计算机的指令只能由操作系统来执行,防止恶意的软件随时调用硬件资源

    举例:

    某个应用需要开启摄像头,需要向Ring 0的驱动程序请求开关,否则会被拒绝此类操作。

    在虚拟化中带来一个问题:

    Guest OS是一个操作系统,Hypervisor也是一个操作系统。原先OS在Ring 0上,做虚拟化之后,Guest OS运行在Ring 1层。Host OS或者Hypervisor在Ring 0层。但是两个操作系统都应该有Ring 0的权限,底层硬件就不知道听谁的了。

    这时候就引入一个新的方法:敏感指令
    只有在虚拟化才有
    解决方案有两个:全虚拟化、半虚拟化

    全虚拟化

    Guest OS执行敏感指令的时候,Hypervisor也会截获这个指令,并翻译指令,然后再传给硬件资源,调用硬件,再把返回的结果传给Guest OS
    过程中:Guest OS不知道自己是一个虚拟机,它认为自己完全执行了这个敏感指令。
    由于在执行的过程中,敏感指令被执行了两次,还要被Hypervisor翻译,所以效率低。

    半虚拟化

    半虚拟化中Guest OS知道自己是虚拟机,当它发现要执行敏感指令时,就会直接给Hypervisor发送Hypercall指令,然后Hypervisor再去调用硬件资源,再把结果返回给Guest OS

    优点:

    • 性能几乎等于物理机

    缺点:

    • 必须修改Guest OS的内核、开源的操作系统支持半虚拟化,有些闭源的操作系统不支持半虚拟化:windows

    在这里插入图片描述

    硬件辅助虚拟化

    经过了时代的发展,推出了硬件辅助虚拟化。将所有的工作都交给CPU去处理。

    在硬件辅助虚拟化中CPU保护域不再只是分为Ring 0到Ring 3,而是分为ROOT模式和非ROOT模式,每个模式下面再分分保护域。(两套特权级,两个Ring 0),Guest OS在非ROOT模式下的Ring 0上,Hypervisor或者Host OS就运行在ROOT模式的Ring 0上。执行指令时,Guest OS先将指令发给Hypervisor,Hypervisor再发给硬件资源。

    需要硬件(CPU)支持:

    Inter vp-x、AMD -V

    优点:

    • 效率高,性能提高

    目前全虚拟化、半虚拟化一般都有硬件辅助虚拟化加持

    内存虚拟化

    内存虚拟化
    一台物理机一般只有一条内存条。但是一台物理机可能运行了多台虚拟机。那就遇到一个问题:如何分配内存空间

    因为通常情况下使用内存空间有两个要求:

    1. 地址空间连续的
    2. 内存空间要从0开始

    解决办法:通过逻辑的地址映射

    VMM将物理内存映射给虚拟机,让虚拟机觉得自己在使用一个真实的、连续的内存。但是其实在真实内存中,他是不连续的。

    I/O虚拟化

    技术 解释
    模拟(完全虚拟) 完全使用软件来模拟真实硬件,模拟通常硬件,例如键盘鼠标,通过焦点捕获,焦点被哪个主机捕获就被哪个主机使用,性能很差。
    半虚拟化 对硬件驱动由前端(IO frontend)直接转到后端(IO backend)调用,通常仅适用于硬盘和网卡,性能高。
    IO-through:IO透传 直接分配给虚拟机物理设备,例如直接分配一个硬盘或网卡给虚拟机,需要硬件具备IO透传技术,在Xen下由Dom0分配,但是访问使用直接使用,不经过Dom0,需要硬件支持。 性能最高 硬件设备不经过Hypervisor,相当于把物理设备直接做虚拟化,给虚拟机使用。

    虚拟化和云计算的对比

    虚拟化

    为了提高硬件的利用率,把物理主机虚拟成多台逻辑主机。每一台主机上都可以运行不同的操作系统。

    云计算

    在云计算中我们主要用虚拟化来实现基础的Iaas云服务。但是云计算中不单单是Iaas

    • 虚拟化是一种技术
    • 云计算是一种模式
    • 没有虚拟化我们也能实现云计算,但是又虚拟化我们能更好的实现云计算。

    主流的计算机虚拟化技术

    开源虚拟化技术

    • KVM

    • Xen

      开源的优劣势

      • 技术免费
      • 使用要求高,学习成本高,出问题只能自己解决
      • 技术更新快(因为开源)

    闭源

    • HUAWEI FusionSphere

    • Hyper-v

    • VMware ESXi

      闭源优劣势

      • 收费
      • 学习成本低
      • 厂商服务支持

    XEN与KVM

    主流的Hypervisor架构:XEN、KVM
    可以说是Hypervisor的分类
    在这里插入图片描述
    Xen :

    轻量级Hypervisor

    Xen是第一类运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,属于裸金属架构。Xen支持hypervisor和虚拟机互相通讯。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行,能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能。

    Xen中的虚拟机分为两类
    Dom0:特权用户(相当于管理员,老大)

    1. 管理普通用户的生命周期
    2. 直接命令底层硬件
    3. 启动DomU之前,只要启动DomU

    DomU:普通用户
    不能直接访问硬件资源
    所有操作都需要前后端驱动的方式,转给Dom0,再由Dom0完成具体的操作之后再返回给DomU

    KVM

    KVM是在Host os(必须linux)上镶嵌一个KVM模块,使内核成为Hypervisor。Host kernel与VM对于共享区域的访问和映射 无需经过Hypervisor的授权,故尔访问路径较短。kvm采用全虚拟化技术(不修改Guest kernel),搭配硬件辅助虚拟化(支持intel-VT/AMD-V). 混合虚拟化架构。

    KVM是集成到linux内核的系统虚拟化模块,是Linux中的一个进程,使用linux自身调度器进行管理,工作在X86架构且需支持硬件辅助虚拟化技术(Intel VT和AMD-V)。使用全虚拟化技术,采用混合虚拟化架构。

    只支持全虚拟化技术

    KVM简介

    KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor:

    在这里插入图片描述
    单独KVM:

    • Linux中的内核模块(程序),使Linux变成Hypervisor。
    • KVM内核模块本身只能提供CPU和内存的虚拟化,不能提供其他的虚拟化(如I/O)

    QEMU-KVM:

    • 提供CPU、内存的虚拟化。拦截客户机的I/O。Guest OS的I/O被KVM拦截之后,交给QEMU处理。

    QEMU:

    • 原生的QEMU:

      • Qemu 是纯软件设计的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和虚拟机打交道,但其实是和Qemu模拟出来的硬件打交道,Qemu 将这些真正的指令转译给真正的硬件
    • QEMU-KVM(构成一套完整的虚拟化解决方案)

      • 正因为Qemu是纯软件实现的,所有的指令都要经过qemu过一手,性能非常低,所以在生产环境中,Qemu配合KVM来完成虚拟化工作,因为kvm是硬件辅助的虚拟化技术,主要负责比较繁琐的cpu虚拟化和内存虚拟化,而QEMU则负责IO设备虚拟化,两者合作发挥自身的优势,相得益彰,提高性能。

    运行模式

    安装了KVM就相当于安装KVM的LINUX内核模块,会产生三个模式(guest mode; 用户 mode;内核 mode)

    1. Guest Mode(客户模式)

      只要指的是虚拟机,以及虚拟机模拟的CPU、磁盘,等设备。受限的CPU模式

    2. 用户 Mode(用户模式)

      主要运行QEMU,主要是为虚拟机模拟执行I/O操作请求。
      只拥有部分的控制权限,绝大多数的应用程序都运行在这个模式。该模式出现状态异常,仅导致该应用程序崩溃。

    3. Kernel Mode(内核模式)

      进行真正的硬件操作。
      代码具有对硬件所有的控制权限。可以执行所有CPU的指令。该模式下出现 状态异常,将导致整个机器崩溃。

    Guest OS需要调用硬件硬件的时候,需要先发送请求到用户模式,再到内核模式,才能调用硬件。

    KVM体系架构

    KVM架构

    管理工具

    管理工具 作用
    Virsh 命令行 基于 libvirt 的 命令行工具 (CLI)
    Virt-manager 图形化界面 基于 libvirt 的 GUI 工具
    Virt-viewer 图形化界面 连接到虚机屏幕的工具
    Virt-install 命令行 创建KVM虚机的命令行工具
    Others Virt-clone(虚机克隆工具) virt-top sVirt:安全工具 virt-v2v:虚机格式迁移工具

    Libvirt

    操作和管理KVM虚机的虚拟化 API。是一个开源项目,非常强大的管理工具。被管理的虚拟化平台可以是:XEN、KVM、Hyper-V、VMware等等

    上面的管理工具被打包成一个API库包括在Libvirt
    libvirt包括一个API库,一个守护进程(Libvirtd),和一个命令行实用程序(virsh)
    Libvirt直接可以管理KVM,而且向上还提供各个语言的接口。许多公司会基于KVM来做定制的开发,开发适用于自己产品的管理工具,管理工具可能使用JAVA、Python、PHP等不同的语言开发,Libvirt能够完美的兼容各种语言开发的管理工具。

    KVM+QEMU

    这两个组件就能组成一个完整的虚拟化解决方案。(QEMU-KVM)

    KVM内核模块本身只能提供CPU和内存的虚拟化,所以它必须结合QEMU才能构成一个完成的虚拟化技术,这就是QEMU-KVM。
    再加上管理工具、Libvirt就是一套更完整的解决方案。

    一般的体系架构都是这样的。所以可以通过这个体系架构去了解其他的架构。

    KVM I/O操作流程

    可以对应先前讲的 I/O的模拟和半虚拟化

    默认操作流程(全虚拟化I/O)

    在这里插入图片描述
    默认的情况下,KVM的I/O操作流程,使用模拟的流程。

    模拟的方式要经过十个步骤:所以性能差

    流程

    1:虚拟机发起I/O的操作请求,把请求发给虚拟的设备驱动
    2:KVM中模块中的I/O Trap Code会捕获这个请求
    3:然后将请求发送到I/O共享页中 同时告诉QEMU这里有个请求,你来解决一下:Notification
    4:QEMU到共享页中拿这个请求
    5:查看请求是什么要调用什么设备?然后根据I/O请求去给真实的设备驱动发送请求
    6:设备驱动调用真实设备
    7:处理完成之后,QEMU将处理完成的信息放到共享页当中 并通知KVM模块,我已经处理完成了
    8:然后KVM模块中的I/O Trap Code将信息从I/O共享页中拿出来
    9、10:再返回给Guset OS

    无论是Guest OS发出请求,还是QEMU处理完请求之后返回的信息,都经过了KVM模块,但是KVM并没有做实质性的处理。这让性能降低。
    所以有没有一种方法,让Guest OS请求方,QEMU处理方,直接让他们交流,不经过KVM模块。

    Virtio (半虚拟化I/O)

    Virtio
    在Virtio中,无论是Guest OS的请求消息,还是QEMU返回的消息都不经过KVM模块。只是通过KVM来发一个通知。
    请求和返回的结果全部放在一个中间的vring的一个空间中。少了KVM模块经手的手续。从而提高I/O虚拟化的性能

    具体性能提升举例:

    网卡速率:模拟出来的网卡速率一般只有百兆,然后用Virtio之后,网卡速率可以达到万兆。

    华为FusionCompute简介

    架构

    架构
    华为Fusion Compute的架构和KVM体系架构差不多,也是包括:管理工具、虚拟化的产品。

    Fusion Compute管理工具:

    VRM(Virtual Resource Manager,虚拟资源管理器)。

    VRM给管理员、用户提供一个Web的图形化界面了,界面中可以看到虚拟机的状态、底层硬件资源池的状态(剩多少内存、硬盘、有多少CPU)、虚拟机的信息等等

    集群:

    向上提供了计算、存储、网络资源

    Fusion Computer的优势:

    1. 虚拟化和物理资源统一管理
    2. 快速发放虚拟机(最大可50台)

    组件作用

    FusionCompute由两部分组成:

    1. CNA(Computing Node Agent,计算节点代理)
    2. VRM(Virtual Resource Manager,虚拟资源管理器)

    其中VRM相当于KVM中的管理工具,管理员和用户可以通过图形化的Portal对FusionCompute进行管理和使用。它是基于Linux操作系统的,所以我们登录VRM后,很多Linux命令都可以使用。

    CNA相当于KVM中QEMU+KVM模块,主要提供虚拟化功能,通常是以集群的方式部署,将集群内的计算、存储和网络资源虚拟化成资源池供用户使用。同样,CNA也是基于Linux操作系统的。

    组件 主要作用
    CNA 提供虚拟计算功能。 管理计算节点上的虚拟机。 管理计算节点上的计算、存储、网络资源。
    VRM 管理集群内的块存储资源。 管理集群内的网络资源(IP/VLAN),为虚拟机分配IP地址。 管理集群内虚拟机的生命周期以及虚拟机在计算节点上的分布和迁移。 管理集群内资源的动态调整。 通过对虚拟资源、用户数据的统一管理,对外提供弹性计算、存储、IP等服务。 通过提供统一的操作维护管理接口,操作维护人员通过WebUI远程访问FusionCompute对整个系统进行操作维护,包含资源管理、资源监控、资源报表等

    注意CNA和VRM的区别

    VRM和CNA都有管理的作用,CNA管理的是本节点上的虚拟机和资源,而VRM是从集群或者整个资源池的层面进行管理。如果VRM对某个虚拟机进行修改或者其它生命周期的操作时,需要将命令下发给CNA节点,再由CAN去执行。操作完成后,CNA再把结果返回给VRM,由VRM记录到数据库中。所以尽量不要到CNA上执行虚拟机或其它资源的修改操作,以避免造成VRM数据库中的记录与实际不匹配的情况。

    展开全文
  • 计算机虚拟化原理

    2020-07-02 18:39:29
    虚拟化是将底层的计算机资源抽象成为多组相互隔离的计算平台,每一个计算平台都具有计算机5大基本部件中的所有设备 直接上干货。。。。。。。。。。。。 虚拟化的两种实现方式: 1、硬件宿主机运行虚拟化软件、...

    计算机虚拟化原理

    虚拟化是将底层的计算机资源抽象成为多组相互隔离的计算平台,每一个计算平台都具有计算机5大基本部件中的所有设备

    直接上干货。。。。。。。。。。。。

    虚拟化的两种实现方式:
        1、硬件宿主机运行虚拟化软件、创建各种虚拟机(type-2型虚拟化---有虚拟机管理器)
            可以借助宿主机的各种虚拟机管理工具来管理虚拟机---KVM、VMware、virtualbox
            系统上电之后启动的是一个操作系统,操作系统上安装叫做虚拟机管理器的软件,VM Monitor
        2、在硬件上安装Hypervisor、在其上运行各种虚拟机、没有宿主机(type-1型虚拟化---直接跑到硬件上的就叫做Hypervisor)
            在实现虚拟化功能管理方面的更可靠、彻底---xen,VMware esx/ESXi
            在系统上电之后直接运行虚拟机监控程序,而没有运行任何内核、Guest操作系统直接在其虚拟化环境中运行

    虚拟化技术分类:
       1、 模拟:硬件-host-模拟器(emulator-虚拟机监控器)---实现CPU、内存、IO的软件模拟

              如,PearPC,Bochs,QEMU
       2、完全虚拟化(full-virtulization也叫native-virtulization):CPU、内存不做模拟,IO要做模拟(BT技术、HVM硬件虚拟化)              如,VMware-Workstation,KVM,Xen(HVM)等,完全虚拟化跟模拟的硬件环境是一样的,只不过CPU平台需要保持一致(VMware Workstation打开的接口就是虚拟机管理器)
        3、半虚拟化(para-virtualization):虚拟机的内核知道自己是运行在虚拟机上的,因此虚拟机的架构和底层架构必须完全一样,guest os必须修改其内核基于Hyper call完成底层调用。Windows的内核不允许修改,所以很难跑到半虚拟化环境中,著名的软件有xen,uml(user-mode linux)
        4、OS级别虚拟化:基于提供虚拟机的目的是提供用户空间而非内核的,把虚拟化向下推了一层,底层上面跑一个内核,内核上面跑一个虚拟化管理器,虚拟化管理器管理跑在共享底层内核上的各个用户空间,某一个用户空间不小心把内核搞坏了,其他用户空间都玩完,很多IDC采用,著名的实现:OpenVZ,lxc,Solaris Containers,FreeBSD jails,docker等,稳定性、隔离性不好
        5、库虚拟化:wine
        6、应用程序虚拟化:JVM

    基于上述概念,从CPU、Memory、IO针对虚拟化实现原理展开详述。。。。。。。。。。。。。

    1.CPU虚拟化(时间片):

        CPU在执行计算机指令的时候是按指令环来划分指令级别的(X86 CPU由环0,1,2,3四个环所组成)

        对CPU的虚拟化基于分时实现,当一个操作系统操作系统启动以后,操作系统本身不执行任何具有生产能力的任务,真正生产功能是由执行具体任务的进程提供的,由此整个操作系统运行时,为了实现协调多任务,操作系统被分割成两段,接近硬件具有特权指令权限的叫做内核空间,执行具体任务的进程运行在用户空间,用户空间的进程需要使用特权权限和使用硬件时,向内核发起申请,这个过程就叫做系统调用

        X86CPU具有保护环(protection ring~从内侧到外侧依次0/1/2/3),最外层环3执行普通指令,环1和环2暂时未使用,环0是特权环,执行包括操作硬件和访问CPU中敏感寄存器的特权指令------内核空间在环0执行,用户空间在环3执行

        以VMWare为例,VM是一个运行在宿主机内核上的应用,虚拟机我们称作guest,宿主机我们成为host,guest有自己的用户空间和内核空间,guest用户空间的应用程序要使用硬件,首先要经过自己的内核,再经过host的内核,这就是虚拟机性能瓶颈的关键因素。

        这时候就产生了一个问题?

    host直接安装在硬件上,其内核运行在环0,guest运行在用户空间,其内核必然运行于环3,但是操作系统设计的时候,内核不运行在环0,就无法调用硬件资源,那么这个操作系统就无法运行起来

        解决方案:

    用软件给虚拟机模拟一个CPU,这个CPU有所有的环,guest运行在模拟CPU上(硬件资源提供给我们的接口都是微码编程的,用软件的方式可以模拟微码接口),模拟的CPU以一个进程的形式运行在host上,特权指令发给host的内核,通过这种方式我们可以自己定义CPU的核心数量,并且实现不同虚拟机之间的隔离。虚拟机操作特权指令需要模拟CPU转换成host的CPU执行特权指令,软件的执行、解码、封装、转换等一系列操作相当耗时,性能很低。

        扩展思考:

    1)在X86架构下软件模拟X86架构CPU,guest用户空间非特权指令怎么运行?

    2)在X86架构下软件模拟ARM架构下的CPU,用户空间非特权指令怎么运行?

        针对于问题1,guest本身是运行在host用户空间的进程,其运行非特权指令不涉及到自身和操作系统内核的系统调用,无论host还是guest的非特权指令都由host的CPU直接在用户空间执行。

        针对于问题2,ARM和X86的指令集不同,guest用户空间的非特权指令需要转换成host物理CPU的指令集才能执行,中间涉及到指令集的转换会进一步降低虚拟机的性能。

        针对于上述问题,引出如何提升虚拟机性能

        1)VMware引入了BT(binary transaction)技术,运行时翻译二进制转换,能让各guest执行特权指令时,按需要在调用的时候直接翻译成对host中特权指令的调用,不用在软件级别进行多次的解码,边运行边调用边转换,基于上述模式,guest用户空间运行在环3上,guest内核空间运行在环1,host内核运行在环0上,BT在环1上进行监控-----据上述,用BT的方式替代软件模拟CPU的方式就必须是host和guest底层物理架构保持一致(guest内核运行在环1的缘故)。

        2)CPU硬件虚拟化:如Intel VTS等

    在硬件虚拟化中,CPU将增加一个环-1,环-1叫做根环或者根区域,host内核运行在环-1上,-1就是特权指令环,把环0让出来给guest使用(依据上述知识,内核必须使用环0,无论软件虚拟一个CPU还是硬件加一个-1环),guest可以直接调用各种特权指令(至少是自己以为),host能捕获环0上guest的特权调用指令,调用特权指令时由CPU交给环-1,中间不需要软件指令转换。

    据上述,引出及总结一下干货:

    CPU虚拟化主要由以下形式:

    1)模拟:emulation 纯软件,CPU模拟环0123
    2)虚拟:virtulization,Guest和Host底层架构保持一致
    3)完全虚拟化(full-virtulization):
            BT:host完全虚拟出来一个虚拟平台,Guest不清楚自己运行在虚拟环境中,只需要给虚拟机模拟CPU环0,各Guset内核运行在环1
            HVM:硬件虚拟化
      4)半虚拟化(para-virtulization):为了提高模拟环0造成的性能损失而特别研发的
            各Guset内核明确知道自己运行在虚拟化环境中,这时候需要运行特权指令时不是直接调用特权指令,而是向host内核发起请求,这时候Guest发起的指令调用就被简化为简单的对于host内核某些特权指令的操作请求,这时候host的名字就变成了VM Monitor(虚拟机监视器)== HyperVisor
            直接跑在硬件平台的是Hypervisor直接管理硬件,相当于是一个内核,内核对底层硬件的操作,一般是CPU和内存,不包括IO,由Hypervisor来管理,hypervisor把CPU和内存的使用虚拟成hyper call,一般对于内核的调用叫做系统调用,对于Hypervisor的调用一般叫做Hyper调用,各guest在使用特权指令时,有些特权指令不影响到其他guest或Hypervisor的都由各guest内核自己直接调用,有影响的需要向Hypervisor发起请求,进行Hyper call调用,中间省去了翻译的过程---各guest的内核必须知道自己运行到虚拟机中,各内核必须能适应对hyper call的调用,所以开发内核时,一旦发生特权指令就不能以为自己调用CPU的指令集而是调用Hyper call,必须要修改能运行在各个操作系统中的内核,至少内核开发者开发时有这种功能------必须要修改操作系统内核来使其知道对Hyper Call的调用
            guest的内核不认为自己能直接运行在环0上,明确知道自己不能再直接调用特权指令,一旦发起特权指令调用时,直接发起hyper call。

    2.存储设备虚拟化(空间切割):

        每一个进程看到的都是线性连续的地址空间,每一个guest默认自己是可以从最低地址空间到最高地址空间寻址内核看到的是整个物理内存空间(至少都是自己以为)

        以半虚拟化为例,对内存管理的是hypervisor,hypervisor上运行多个guest,hypervisor实现对CPU和内存的管理,内存被分配成内存页,被分割以后划分给各个guest,每个guest拿到的是离散的非完整的内存空间,内核在研发的时候以为自己是运行在物理地址空间上的,所以以为自己使用的是连续的和完整的物理内存空间(堆中的内存申请是使用malloc进行系统调用从空闲的内存地址空间申请)

         据以上描述引出一下,应用访问内存空间过程:guest上的应用进程访问某一个地址、把请求发给CPU,CPU发给MMU,MMU根据内核维护进程的内存映射表转换成guest内核管理的某一段内存地址,hypervisor把guest内核管理的内存地址空间再转换到真正的内存地址空间中,据以上进行了两级虚拟,这就意味着进程在CPU上的地址转换是无效的,只是guest自己内核管理的物理内存空间,第一次转换MMU,第二次转换是软件模拟(hypervisor使用shadow page table)实现,这个实现是一个非常复杂的软件实现,导致了快表TLB很难命中,尤其是多guest场景更是如此(MMU放的是page table,TLB放到是线性空间到物理地址的映射结果),每次guest切换就不得不清空TLB,快表命中率低导致了guest性能地下。

          据以上问题引出,引出了虚拟MMU技术,如Intel EPT和AMD NPT,硬件级别提供的MMU虚拟化,实现了从guest应用程序线性地址直接到host物理地址的转换,省去了guest内核维护自己的地址空间的转换。

          TLB虚拟化(tagged TLB,给不同guest的TLB打上标签)。

    3.IO设备虚拟化:

    外存:硬盘等

    网络设备:网卡

    显示设备:VGA等

    键鼠:用焦点捕获的方式,给每一个guest模拟键鼠,建立临时关联关系

    其他设备:串口设备等

    IO设备虚拟化一般有三种形式:

    1)模拟:完全使用软件模拟真实硬件,以网卡为例guest网络请求通过虚拟网卡驱动发送、请求转到host后,host再通过驱动和网卡发送。

    2)半虚拟化:guest明确知道自己的硬件设备是虚拟出来的,guest会调用自己的虚拟网卡发送网络请求(用户看来是由网卡驱动的、叫做IO前端驱动,但内存的请求直接由内核发往后端驱动),设备的调用会转换成hypervisor虚拟网卡的调用,hypervisor使用IO stack来存储和调度不同guest的网卡请求,然后再调用后端驱动,利用真正的网卡发包(这种方式一般使用于网卡和硬盘)

    3)透传(IO-through):让guest直接使用物理设备,依然需要hypervisor的Device Manager进行分配、管理、协调,硬件必须支持透传技术(Intel VT-d),传统的架构下,所有的IO设备都有一个共享的DMA或集中式管理的DMA(直接内存访问),就意味着hypervisor管理的IO设备都由hypervisor统一管理的DMA来管理,在DMA中使用IOMMU实现从IO地址总线到IO设备自动的转换设备,如果能将某一个IO设备直接分配给某一个guest使用,就意味着hypervisor级别的对某一个端口的调用就只能接受同一个guest进行,所以必须在IOMMU级别进行隔离,这就是Intel VT-d的方案。

    中断隔离:

          IO会产生大量的终端操作,如果IO端口分配给某一个guest使用,产生端口也必须由该guest处理,IO虚拟化必须正确的分离这些请求

    传统设备的中断请求一般有两种方式:

    1)可编程终端控制器

    2)DMA:基于DMA来实现终端管理时,需要在DMA中嵌入目标内存地址,目标内存地址通常有hypervisor管理的内存地址,因此这个架构要完全访问到所有内存地址才能实现中断管理,并不能实现中断隔离,在Intel VT-d中完成完全的中断映射,从一个硬件设备到guest的内存地址空间的DMA映射,实现了中断隔离。

    Intel VT-d:基于北桥的硬件辅助的虚拟化技术,提升IO的灵活性、可靠性

    Intel硬件辅助虚拟化:
        CPU:vt-x,EPT(MMU虚拟化---tagged-TLB)
        I/O:vt-d,在vd-d基础上实现IOV,VMDq
        
        第一类:跟处理器相关的:vt-x
        第二类:跟芯片相关的:vt-d
        第三类:跟IO相关的:VMDq和SR-IOV

    4.网络虚拟化:

            实现网络虚拟化常见的有如下方式:
            1)桥接:

            host网卡当做一个交换机来用,物理机上再虚拟出一个网卡(这个网卡设备就叫做桥接设备),无论是否发往本网卡的mac帧都由host网卡根据MAC地址转发(形象的比喻:桥接是物理网卡作为一个交换机,连接一个host和多个guest,host和guest是在同一个网络里面通过交换机更外界进行通信)。

            使用桥接:第一步:建立网桥设备,把物理网卡让出来做交换机,在VMware workstation中网桥设备创建没有展示出来,在linux上网桥设备是由独立的接口,是可以展示出来的
           2)仅主机模式:

            目的是让各guest通信,让各guest跟host通信,跟外部是隔离的,guest跟host通信需要创建一个虚拟交换机(纯软件方式实现),各guest用虚拟网卡跟虚拟交换机通信,要想让host连接虚拟交换机,就给host虚拟一个网卡(vnet0),连接到虚拟交换机,如果host没有打开网卡间转发功能,就无法从host虚拟网卡转发到物理网卡,数据无法转发出去

            使用VMware Workstation之后再Windows中网络适配器出现的vmnet1就是host用来跟guest通信的虚拟网卡

           3)路由模式:

           根据以上仅主机模式,如果打开了host网卡间转发功能,数据就可以从host虚拟网卡转发到物理网卡(pnet0),进而转发到外部网络中。该host上的Guest-1跟外部其他网络中的host-1通信,host-1收到请求报文的源地址是guest-1的地址,目的地址是host-1的地址,host-1回报文的目的地址是guest-1的地址,源地址是host-1的地址,host-1和guset-1很可能不在同一个网段中,意味着host-1极有可能需要通过另外一个网关才能转到guest-1,所以网关必须指向该host的物理接口地址(必须到达host网卡),但是如果host-1在互联网内,其必然接入了路由器,那么发出的地址都会往路由器发并被路由器转发,要想实现转发到该host中的guest-1就必须使用静态路由,配置host-1发送到该host的物理网卡的静态路由,在路由模式下外网的host-1可以看到该虚拟机网络中的guest-1。
           4)NAT模式(在VMware Workstation中一般是vmnet8):

            由host创建一个vnmet8虚拟网卡,并且创建一个NAT服务器,如果不想让外网的host-1看到虚拟网络中的guest-1,那么不打开转发功能,guest-1要跟host-1通信时,网关要指向vnet8,通过NAT服务器在数据包到达物理网卡pnet0时,把源地址改为物理网卡的地址,host-1回的时候再回给物理网卡pnet0,物理网卡再通过NAT转化成Guest-1的地址
            5)隔离模式:

            只有虚拟机之间可以通信,跟物理机不能通信,例如用vmnet2等,虚拟一个交换机,用来虚拟机间相互通信

    以上,虚拟化原理基本讲完了。。。。。。。。。。。。。。。。。。

    虚拟网络延展:

          在Linux上每启动一个虚拟机,都会在我们物理设备上或hypervisor上显示一个虚拟网卡(虚拟网卡也会显示在host上,就相当于虚拟网卡分成了两半,一半在guest上,一半在host上,虚拟网络交换机在host上,就相当于把一半在host上的虚拟网卡连接到虚拟交换机上,两半虚拟网卡的地址都在guest上,在host上的虚拟网卡没有地址),基于上述模型在启动guest的时候必须相应在host上启动一个虚拟网卡,有如下两种:
        TUN和TAP是(host)操作系统内核中的虚拟网络设备,不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部由软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能
        TAP:等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层的设备,操作第三层数据包比如IP数据封包。
        操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以向操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。TUN/TAP都是host上虚拟出来跟guest通信的另一半设备。
        每个不同的VLAN中的guest要想使用动态地址获取,需要在每一个虚拟交换机上接一个DHCP服务器(软件方式提供的一个实例,仅服务于各个不同的虚拟网络)
       
        基于脚本配置网桥:
        linux上配置桥设备的步骤:
            #brctl addrbr br0
            #brctl stp br0 on
            #ifconfig eth0 0 up
            #brctl addif br0 eth0
            #ifconfig br0 IP/NETMASK up
            #route add default gw GW
        以上配置可以基于配置文件

    展开全文
  • 随着烟草企业的发展,...本文基于烟草企业计算虚拟化构架的设计实现为目的,通过对计算虚拟化技术、虚拟化构架等知识分析研究的方法,结合烟草企业计算虚拟化构架的设计试验,得出烟草企业计算虚拟化构架设计的结论。
  • FusionCompute计算虚拟化

    千次阅读 2020-02-28 19:48:50
    文章目录计算虚拟化相关概念及技术计算虚拟化概念什么是虚拟化?虚拟化的本质计算虚拟化技术分类根据虚拟化对象分类:根据虚拟化过程分类:CPU虚拟化首先我们要考虑,CPU虚拟化需要解决哪些问题?CPU与vCPU对应关系...
  • 虚拟化之计算虚拟化 计算虚拟化包含了: CPU虚拟化 内存虚拟化 VCPU的计算方式:CPU个数CPU的核数CPU的线程数。 CPU的QOS: 上线:分配给VM的VCPU上限。 份额:如果发生了抢占,则根据份额分配资源。 预留:给...
  • 原标题:【科普】CPU和内存虚拟化计算虚拟化计算虚拟化就是在虚拟系统和底层硬件之间抽象出CPU和内存等,以供虚拟机使用。计算虚拟化技术需要模拟出一套操作系统的运行环境,在这个环境你可以安装Windows,也可以...
  • 计算虚拟化与Hypervisor

    2020-03-28 11:54:42
    计算虚拟化与Hypervisor 一、计算虚拟化概述 随着云计算的不断普及,云计算、虚拟化等名词逐渐被大众所熟知,但是两者的概念却经常会让人混淆。云计算不是一项具体的技术,而是一种资源交付模型,云计算1.0是以...
  • 声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,...今天,咱们继续计算虚拟化这个话题,主要来聊一下 I/O 虚拟化。 1 I/O 虚拟化 1.1 I/O 虚拟化简介 现实中的外设资源是有限的,例如服务器单个...
  • 计算机虚拟化(HCIA)

    2020-05-03 19:40:10
    计算虚拟化 目录 计算虚拟化 云计算简介: 云计算五种基本特质: 云计算的四种部署模式: Q&A:客户来说为何采用云计算,为何不自己部署服务器? 云计算三种服务模式: 云计算的发展历程: 虚拟化技术 ...
  • 云计算的那些事儿之计算虚拟化

    万次阅读 2017-04-16 11:23:29
    上一篇介绍了虚拟化分别从计算虚拟化、存储虚拟化和网络虚拟化几个角度总体说了一下。下面就主意进行讲解,本篇先介绍计算虚拟化,其实我觉得用计算虚拟化可能比较狭隘,我个人更偏向另个一个更大的概念,软件定义的...
  • 云计算 分布式 并行计算 虚拟化云计算 分布式 并行计算 虚拟化
  • 恩智浦边缘计算架构工业物联网网关边缘计算虚拟化业务部署方案
  • 计算虚拟化与云计算Since the foundation of the concept of cloud computing many have argued about its relation with Virtualization to the extent that some even consider cloud as synonymous with ...
  • 计算机虚拟化技术.doc计算机虚拟化技术.doc计算机虚拟化技术.doc计算机虚拟化技术.doc
  • 计算机虚拟化发展史 计算机虚拟化中的重要概念 计算虚拟化的分类 虚拟化的特点 CPU虚拟化 CPU虚拟化拓展 内存虚拟化 I/O虚拟化
  • 局域网SDN技术硬核内幕 一 从计算虚拟化到网络虚拟化 前面提到,随着服务器核数的激增,虚拟化已经成为数据中心的必备组件。而为了批量管理大量的虚拟机,又出现了开源云计算平台——OpenStack,以及基于OpenStack的...
  • 目标:描述计算虚拟化实现原理 区分三种内存复用技术 描述FusionCompute中计算虚拟化功能特性 一、什么是虚拟化 虚拟化是一个抽象层,它打破了物理硬件和操作系统之间的硬性连接 虚拟化是云计算的基础。简单的说,...
  • 云计算学习(4-2)虚拟化技术-计算虚拟化 计算虚拟化的关键概念: hypervisor:管理和调配物理资源,各个厂商有自己的hypervisor,使用的架构也不一样。 虚拟机:通过软件模拟的计算机系统 镜像:虚拟机文件的...
  • 自 6 月以来,气温逐渐攀升,赤日炎炎似火烧的季节...针对企业以及特定场景的关键应用,计算虚拟化需要满足计算高性能低时延、可靠性、资源占用效率的要求。这是如何做到的呢?主要涉及到的关键性技术如下图所示。 ...
  • 华为云计算入门-计算虚拟化

    千次阅读 多人点赞 2019-08-12 17:18:05
    华为云计算HCIA-计算虚拟化 云计算简介,我们为什么学云计算 有什么用? 云计算的确是最近几年兴起的话题,但是它采用的技术并不是新颖的,反而是很多年前的老技术,组合起来使用。需要涉猎范围很广,需要理解存储...
  • 虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。计算机虚拟化技术主要包括以下几个方面: CPU虚拟化; 网络...
  • 1. FusionSphere 架构 ...计算虚拟化(FusionCompute) ,存储虚拟化(FusionStorage) ,网络虚拟化(SDN, 软件定义网络) C.基础设施服务 Openstack(分为南北方向)fusionManager Openstack 核心组件 Nova 计算 cin
  • 支持客户的上云工作,首先得自己是“专家”,客户只会与“专家“交流。在进行一些方案的制作时,...今天的内容是最基础的计算虚拟化内容。 一、计算虚拟化的作用是将硬件进行解耦 计算虚拟化解决了四大问题 ...
  • 服务器托管、vps主、服务器租用的中国信息港来为你详细介绍服务器虚拟化硬件的配置!1、处理器:Hyper-VR2最多能利用到主机的64个LogicalProcessor,同时一个LogicalProcessor能支持运行8个虚拟Processor,即如果是...
  • 如果要采用虚拟化,那服务器的硬件配置应该如何计算?例如每个虚拟机需要1个CPU,2G内存,100G硬盘,100Mbps的网络带宽,数量为200个虚拟机等。1. 处理器:Hyper-V R2最多能利用到主机的64个Logical Processor,同时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,345
精华内容 4,138
关键字:

计算虚拟化