KVM总结虚拟化原理

Technorati 标签:
云计算,虚拟化

本文基于网上的材料整理而成。

第一章 服务器虚拟化概述

1.1 为何需要服务器虚拟化

一经物理机上只安排一种工作,资源利用率太低,不便利节约本钱。假诺说生产区域需要动用物理机来保证安居,对于开发测试区使用虚拟机不但可以节省有限的物理机资源,还可以够快快上线。

1.2 虚拟化发展历史

  • 指出概念:1959年11月提议,在列国消息处理大会上刊载的《大型高速总计机中的时间共享》杂谈中建议
  • 开发技术:20世纪60年间先导,IBM操作系统虚拟化技术应用在了大型机和小型机上
  • 蓬勃发展:20世纪90年代,VMware公司率先落实了X86架构上的虚拟化,于1999年生产了x86平台上的率先款虚拟化商业软件VMware
    workstation。
  • 群雄逐鹿:更多的厂商投入了虚拟化技术的武装

第二章 服务器虚拟化

服务器虚拟化首要有二种方法:

  • 硬件虚拟化:通过Hypervisor层虚拟出硬件系统环境,将硬件系统CPU发出的指令经过处理后传到大体CPU上。

硬件虚拟化的关键在于Hypervisor层。

所谓Hypervisor层就是在大体服务器和操作系统中间运行的软件层,可以对模拟硬件系统,将顺序对这个硬件系统CPU发送的授命经过处理未来,加以虚拟传到物理CPU上。同时它能够协调访问服务器上的物理设备和虚拟机,也叫虚拟机监视器(VMM
)。

  • 容器:只是虚拟化出利用运行时的条件,是相比轻量的虚拟化,层次相比较浅。

2.1 服务器虚拟化架构

  • 裸金属架构:Hypervisor层直接运行在硬件系统上。典型例子是KVM。KVM其实就是Linux内核提供的虚拟化架构,可将基本直接充当Hypervisor,KVM一般需要处理器本身襄助虚拟化扩大技术,如IntelVT等。KVM使用内核模块kvm.ko来贯彻基本虚拟化功效,不过只提供了CPU和内存的虚拟化,必须结合QEMU才能整合完整的虚拟化技术。

发展历史 1

  • 宿主架构:典型的就是QEMU,它可以经过二进制转换到模拟CPU,使Guest
    OS认为自己再与硬件打交道。
    发展历史 2

2.2 CPU虚拟化

进程的执行有二种情况

  • 内核态:紧要用于硬件访问,修改紧要参数,
  • 用户态:用户运行应用程序。

二种情景的权杖不同,对硬件的拜访必须在内核态,可以保证系统的可靠性,只给拔取人士开放用户态,不会对OS的运行带来大的熏陶。避免系统被人为攻击。

OS内核数据和代码区应该与用户区完全隔绝,也就是说程序可以看来的地址都是用户态地址,当程序执行系统调用的时候,进程会切入内核态举办基本访问,此时页表也需要切换来内核态的页表,带来的题目是性质相比较差。因为页表在内存中,切换会带来性能的下落。

由此近期主流的OS的做法是将根本代码和数据区放到用户进程虚拟地址控制器的高位区,32bit系统放到3~4G,windows默认占用2~4G区,64bit系统也放在高位。这样带来的益处是,进程空间的内核区也被映射到大体内存区,进程的切换不会导致TLB中从前缓存的对准内核区页表失效,保证了性能。

其实进程是无法访问内核区,因为强行访问的话,页表条目有权限位(进程近来权限保存在寄存器的CPL字段,为Ring3,而根本页表的权杖为Ring0,所以CPU会禁止访问。)

总结一下就是x86 架构提供六个特权级别给操作系统和应用程序来走访硬件。
Ring 是指 CPU 的周转级别,Ring 0是最高级别,Ring1次之,Ring2更次之……

  • 基本需要直接访问硬件和内存,因而它的代码需要周转在高高的运行级别
    Ring0上,这样它能够运用特权指令比如控制中断、修改页表、访问设备等等。
  • 应用程序的代码运行在低于运行级别上Ring3上,咋样要访问磁盘,这就需要进行系统调用,此时CPU的运转级别会暴发从ring3到ring0的切换,并跳转到系统调用对应的木本代码地点执行,那样基本就为你成功了设施访问,完成之后再从ring0再次来到ring3。以此进程也称效用户态和内核态的切换。

发展历史 3

对此非虚拟化操作系统而言,应用程序和类别发出的平常指令都运行在用户级别指令中,只有特权指令运行在主题级别中,这样操作系统与运用解耦合。

这就是说,虚拟化在此地就碰见了一个难题,因为物理机OS是做事在 Ring0
的,虚拟机的操作系统就不可能也在 Ring0
了,所以有些特权指令是平昔不实施权限的

CPU虚拟化的格局就是

  • 特权解除:让Guest
    OS运行在用户级别,让hypervisor运行在中央级别,这样就解除了Guest
    OS的特权级别。
  • 深陷模拟:运作在Guest
    OS的平凡指令像过去同样运行,当运行到特权指令时,会暴发卓殊并被hypervisor捕获。
    发展历史 4

那么困难在于:

  • 何以模拟x86爱护格局
  • 哪些阻止并执行虚拟机的Ring0指令。
    解决方法如下
2.2.1 CPU虚拟化技术解决措施
  • 全虚拟化:客户操作系统运行在 Ring
    1,它在实施特权指令时,会接触至极,然后
    hypervisor捕获这多少个可怜,在很是里面做翻译,最后回来到客户操作系统内,客户操作系统认为自己的特权指令工作健康,继续运行。所以也叫二进制翻译技术(Binary
    Translate)。
    而是这一个特性损耗十分的大,简单的一条指令现在却要由此复杂的异常处理过程
    发展历史 5

    • 优点:不用修改GuestOS内核可以间接行使
    • 缺点:在VMM捕获特权指令和翻译过程会招致性能的回落。
      发展历史 6
      从上图能够看到,当虚拟机中的应用要运行在内核态的时候,会经过Hypervisor层的效仿,通过二进制翻译技术,将下令替换为此外的一声令下。
  • 半虚拟化:修改操作系统内核,替换掉不可能虚拟化的通令,通过顶尖调用(hypercall)间接和底部的虚拟化层hypervisor来报道,
    相对于完全虚拟化性能更高,因为省去了翻译的长河。然而需要对Guest
    OS举办修改,应用场景不多。
    发展历史 7
  • 硬件帮助虚拟化: 二零零五年后,CPU厂商AMD 和 英特尔 起首协助虚拟化了。
    英特尔 引入了 Intel-VT (Virtualization Technology)技术
    要害的贯彻形式是增多了一个VMX
    non-root操作形式,运行VM时,客户机OS运行在non-root情势,依旧有Ring0~ring3等级别
    当运行特权指令时或者暴发中断的时候,通过VM_EXIT就可以切换来root格局,拦截VM对虚拟硬件的造访。执行完毕,通过VM_ENTRY回到non-root即可。
    发展历史 8
    这种技术首要代表为intel VT-X,AMD的Intel-V
    发展历史 9

全虚拟化

半虚拟化

硬件辅助虚拟化

实现技术

BT和直接执行

Hypercall

客户操作系统修改/兼容性

无需修改客户操作系统,最佳兼容性

客户操作系统需要修改来支持hypercall,因此它不能运行在物理硬件本身或其他的hypervisor上,兼容性差,不支持Windows

性能

好。半虚拟化下CPU性能开销几乎为0,虚机的性能接近于物理机。

应用厂商

VMware Workstation/QEMU/Virtual PC

Xen

KVM 是基于CPU
救助的全虚拟化方案,它需要CPU虚拟化特性的补助。
总结:
发展历史 10

2.3 内存虚拟化原理

内存虚拟化指的是共享物理系统内存,动态分配给虚拟机。虚拟机的内存虚拟化很象虚拟内存方式

虚拟内存是电脑系列内存管理的一种技术,目的是让应用程序认为它拥有连续的可用的内存(一个连连完整的地方空间)。其实就是操作系统将内存资源的虚拟化,屏蔽了内存调用的底细,对应用程序而言,不需要关注内存访问的细节,能够把内存当作线性的内存池。

x86 CPU 都不外乎了一个称作内存管理的模块MMU(Memory Management Unit)和
TLB(Translation Lookaside Buffer),通过MMU和TLB来优化虚拟内存的特性。

OS将内存遵照4KB为单位展开分页,形成虚拟地址和大体地址的映射表。假诺OS在物理机上运行,只要OS提供这么些页表,MMU会在访存时自动做虚拟地址(Virtual
address, VA)到大体地址(Physical address, PA)的转向。

但是倘若虚拟机上运行OS,Guest
OS经过地点转化到的“物理地址”实际上是QEMU的逻辑地址,由此还需要运用软件将其转会为实际物理内存地址

对此OS运行在情理机上的状态

发展历史 11

只要经过访问内存的时候,发现映射表中还从未物理内存举办对应。如下图

发展历史 12

这时MMU向CPU发出缺页中断,操作系统会遵照页表中的外存地址,在外存中找到所缺的一页,将其调入内存。同时革新页表的映照关系。下三次访问的时候可以直接命中物理内存。

发展历史 13

对于OS在虚拟机中的情况,过程就要复杂很多。

对于虚拟机内的历程的变换,需要展开两次改换。也就是说首先将动用的逻辑地址转换为虚拟机的情理地址,而这其实是QEMU进程的逻辑地址,所以要映射到骨子里内存的大体地址还亟需做三回转换。

发展历史 14

  • VA:应用的虚拟地址
  • PA:虚拟机物理地址,也是QEMU进程的逻辑地址
  • MA:物理机的情理地址

看得出,KVM
为了在一台机械上运行六个虚拟机,需要充实一个新的内存虚拟化层,也就是说,必须虚拟
MMU 来协理客户OS,实现 VA -> PA -> MA 的翻译。

客户操作系统继续控制虚拟地址到客户内存物理地址的映射 (VA ->
PA),可是客户操作系统不可能一贯访问实际机器内存,由此VMM
需要承受映射客户物理内存到实际机器内存 (PA -> MA)。

发展历史 15

VMM 内存虚拟化的兑现形式:

  • 软件模式:通过软件实现内存地址的翻译,比如 Shadow page table
    (影子页表)技术
  • 硬件实现:基于 CPU 的相助虚拟化效用,比如 AMD 的 NPT 和 AMD 的 EPT
    技术
2.3.1 软件形式

黑影页表(SPT,shadow page
table):Hypervisor为虚拟机护卫了一个虚拟机的虚拟地址到宿主机大体地址照耀的的页表。也就是说,在原先的两层地址层次基础上加了一层伪物理地址层次,通过这张表可以将客户机虚拟地址宿主机物理地址中间开展映射。

客户OS创制之后,Hypervisor创设其对应影子页表。刚开首影子页表是空的,此时其它客户OS的访存操作都会时有发生缺页中断,然后Hypervisor捕获缺页万分

发展历史 16

透过一次地址映射转换得到虚拟机虚拟地址物理机物理地址的映射关系,写入阴影页表,逐渐完成具有虚拟地址到宿主机机器地址的映射。
发展历史 17

代价是亟需保持虚拟机的页表和宿主机的黑影页表的一起。

2.3.2 通过INTEL EPT技术来兑现

KVM 中,虚机的物理内存即为 qemu-kvm 进程所占据的内存空间。KVM 使用
CPU 协理的内存虚拟化形式。在 AMD 和 AMD平台,其内存虚拟化的落实格局分别为:

  • AMD 平台上的 NPT (Nested Page Tables) 技术
  • AMD 平台上的 EPT (Extended Page Tables)技术
    EPT 和 NPT选取类似的原理,都是用作 CPU
    中新的一层,通过硬件用来将客户机的物理地址翻译为主机的大体地址。也就是说Guest
    OS完成虚拟机虚拟地址–>虚拟机物理地址第一层转化,硬件同时到位虚拟机物理地址到物理机物理地址这第二层转化。第二层转换对Guest
    OS来说是晶莹剔透的,Guest
    OS访问内存时和在物理机运行时是一样的。这种措施又叫做内存襄助虚拟化。

故此内存协理虚拟化就是从来用硬件来实现虚拟机的情理地址到宿主机的情理地址的一步到位映射。VMM不用再保留一份
SPT (Shadow Page
Table),通过EPT技术,不再需要联合两个页表,虚拟机内部的切换也不需要qemu进程切换,所急需的是只是一回页表查找,而且是通过硬件来成功的,性能损耗低。

流程如下:

  • VM中的应用发现页没有分片,MMU发起中断,从虚拟机的物理地址(QEMU的逻辑地址)中分配一页,然后更新页表。
    发展历史 18
  • 此时虚拟机页的大体地址还没对应物理内存的地方,所以触发了qemu进程在宿主机的page
    fault。宿主机内核分配内存页,并更新页表。
    发展历史 19
  • 下次访问就足以借助EPT来拓展,只需要查五回表即可。

发展历史 20

总结:
发展历史 21

2.4 KVM其他内存管理技术

2.4.1 KSM (Kernel SamePage Merging 或者 Kernel Shared Memory)

KSM 是根本中的守护进程(称为
ksmd),它会定期开展页面扫描,将副本页面举行统一,然后释放多余的页面。KVM使用KSM来压缩多少个一般的虚拟机的内存占用,提升内存的行使频率,在虚拟机使用相同镜像和操作系统时,效果尤其旗帜显著。不过会大增基础开发,所以为了提升效用,可以将此特性关闭。

2.4.2 KVM Huge Page Backed Memory (巨页内存技术)

AMD 的 x86 CPU 日常采用4Kb内存页,当是经过安排,也可以采纳巨页(huge
page): (4MB on x86_32, 2MB on x86_64 and x86_32
PAE)使用巨页,KVM的虚拟机的页表将运用更少的内存,并且将增长CPU的频率。最高意况下,能够增强20%的功用!

2.5 IO虚拟化

  • 如法炮制(完全虚拟):使用 QEMU 纯软件的办法来模拟 I/O
    设备。使用一个Service VM来模拟真实硬件,性能很差。
    客户机的装备驱动程序发起 I/O
    请求操作请求,KVM会捕获此IO请求,然后嵌入IO共享页,同时用户空间的QEMU进程,QEMU模拟出本次IO操作,同样置于共享页中并同时KVM举办结果的取回。

留神:当客户机通过DMA (Direct Memory Access)访问大块I/O时,QEMU
模拟程序将不会把结果放进共享页中,而是经过内存映射的章程将结果向来写到客户机的内存中,然后通告KVM模块告诉客户机DMA操作已经做到。

发展历史 22

  • 半虚拟化: KVM/QEMU就采纳那种情势,它在 Guest OS 内核中设置前端驱动
    (Front-end driver)和在 QEMU
    中实现后端驱动(Back-end)的法门。前后端驱动通过 vring
    (实现虚拟队列的环形缓冲区)直接通信,这就绕过了经过 KVM
    内核模块的过程,提升了IO性能,相对于完全虚拟的格局,
    省去了纯模仿形式下的至极捕获环节,Guest OS 能够和 QEMU 的 I/O
    模块直接通信。

发展历史 23

  • IO-through:直接把机物理设备分配给虚拟机,可是需要硬件具备IO透传技术;,AMD定义的 I/O 虚拟化技术变成 VT-d,英特尔 的称之为 英特尔-V。
    KVM 协助客户机以垄断格局访问这些宿主机的 PCI/PCI-E
    设备。通过硬件帮忙的 VT-d
    技术将配备分给客户机后,在客户机看来,设备是大体上连接在PCI或者PCI-E总线上的
    几乎拥有的 PCI 和 PCI-E
    设备都补助直接分配,除了显卡以外(显卡的特殊性在此间)。PCI
    Pass-through 需要硬件平台 AMD VT-d 或者 AMD IOMMU
    的支撑。这么些特点必须在 BIOS 中被启用
    发展历史 24

    • 便宜:缩短了 VM-Exit 陷入到 Hypervisor
      的过程,极大地提高了性能,可以达到几乎和原生系统一样的习性。而且VT-d
      制伏了 virtio 兼容性欠好和 CPU 使用频率较高的题材。
    • 不足:独占设备的话,无法实现设备的共享,成本增高。
    • 相差的解决方案:(1)在一台物理宿主机上,仅少数 I/O
      如网络性能要求较高的客户机使用
      VT-d直接分配设备,其他的使用纯模仿或者 virtio
      已达成五个客户机共享同一个配备的目的(2)对于网络I/O的解决办法,可以挑选 SR-IOV
      是一个网卡爆发六个独立的虚拟网卡,将各样虚拟网卡分配个一个客户机使用。

发展历史,总结
发展历史 25

2.6 网卡虚拟化

VM发出的流量一般有二种

  • 到物理机外部的设备,
  • 到当地物理服务器上的虚拟机。

所以我们需要保证不同虚拟机流量的竞相隔离,同时又要考虑情理设备内虚拟机的互联互通。

化解措施:
对此对物理机外部的流量,给各种VM分配一个专用通道,共享物理网卡资源。
最主要有如下三种格局:

  • Bridge桥接格局:把物理主机上的网卡当交流机,然后虚拟出一个Bridge来接收发往物理机的包。
    发展历史 26
  • isolation mode:仅guest OS之间通信;不与表面网络和宿主机通信。
    发展历史 27
  • routed mode:与外部主机通信,通过静态路由使得各Guest OS
    的流量需经过物理网卡
    发展历史 28
  • nat:地址转换;在编造网卡和情理网卡之间建立一个nat转发服务器;对数据包举行源地址转换。
    发展历史 29

对内部流量:

  • 在hypervisor上树立virtual
    switch,可是会消耗CPU资源,而且存在较大安全隐患。(intel的VT-c用VMDq技术使网卡芯片处理局部vswitch的办事,同时用vFW来保障安全)
  • 能够先让流量出服务器通过安全设备区域开展多少清洗将来再回去。主流模式采取硬件SR-IOV对VM流量举行甄别和处理

总结

发展历史 30

2.7 Hypervisor层的虚拟化实现

操作系统是用户和物理机的接口,也是拔取和物理硬件的接口。主旨职能在于任务调度和硬件抽象。

不等操作系统的最大不同在于内核。

单内核、混合内核、微内核、外内核的区别
发展历史 31

  • 单内核:内核所有的效力代码全体都运作在同一个内核空间内,优点是性质性能很高,缺点是规划复杂,稳定性不够好;
  • 微内核:类似C/S服务情势,只有最基础的代码会运行于内核空间,其他的都运行于用户空间,优点是稳定高,缺点性能较低;
  • 混合内核:性能与安定的妥协产物,完全由设计者举行用户自定义;
  • 外内核:比微内核更加极端,连硬件抽象工作都交给用户空间,内核只需要保证应用程序访问硬件资源时,硬件是悠闲的

发展历史 32

2.7.1 主流的Hypervisor总结

Hypervisor的类别

KVM

Xen

Hyper-v

ESX/ESXi

内核类型

Linux

Linux(修改)&Nemesis

Windows&Hyper-V

Linux&VMernel

内核

单核

外内核

外内核

混合内核

I/O虚拟化方式

类Service VM Model

Service VM Model

Service VM Model

Monolithic Model

特点

集成在Linux内核中

有被KVM取代之势,性能低于KVM

捆绑Windows Server

技术积累深厚,Vmkernel是核心竞争力

发表评论

电子邮件地址不会被公开。 必填项已用*标注