KVM计算虚拟化原理,偏基础

搜索类

  • ### Ctrl+F 打开底部搜索框,查找关键字。

  • ### Ctrl+shift+F 在文件夹内找,与日常编辑器不同的地方是sublime允许添加多只公文夹进行搜索,略高端,未研究。

  • ### Ctrl+P 打开搜索框。举个栗子:1、输入当前档面临的文本称,快速搜索文件,2、输入@和重大字,查找文件中函数曰,3、输入:和数字,跳反到文件被该行代码,4、输入#暨要字,查找变量名。

  • ### Ctrl+G 打开搜索框,自动带来:,输入数字越反至该行代码。举个栗子:在页面代码比较丰富的文件中疾稳定。

  • ### Ctrl+R 打开搜索框,自动带@,输入关键字,查找文件中的函数称。举个栗子:在函数较多之页面很快搜索某个函数。

  • ### Ctrl+: 打开搜索框,自动带来#,输入关键字,查找文件中之变量名、属性名等。

  • ### Ctrl+Shift+P 打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。

  • ### Esc 退出光标多尽选,退出搜索框,命令框等。

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运行于物理机上的状态

图片 1

设若经过看内存的时候,发现映射表中尚未曾物理内存进行对应。如下图

图片 2

这时候MMU向CPU发出缺页中断,操作系统会因页表中之外存地址,在外存中找到所短的均等页,将那个调入内存。同时更新页表的照关系。产一致软访的下可以直接命中物理内存。

图片 3

对OS在虚拟机中的图景,过程将复杂很多。

对虚拟机内之进程的更换,需要开展两次易。也就是说首先将下的逻辑地址转换为虚拟机的大体地址,而立实在是QEMU进程的逻辑地址,所以只要投到实在内存的物理地址还需要做相同赖变。

图片 4

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

足见,KVM
为了当相同雅机器及运行多只虚拟机,需要追加一个新的内存虚拟化层,也就是说,必须虚拟
MMU 来支持客户OS,实现 VA -> PA -> MA 的翻。

客户操作系统继续控制虚拟地址到客户内存物理地址之映射 (VA ->
PA),但是客户操作系统不可知直接访问实际机器内存,因此VMM
需要负映射客户物理内存到实际机器内存 (PA -> MA)。

图片 5

VMM 内存虚拟化的贯彻方式:

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

编辑类

  • ### Ctrl+J 合并选中的多行代码为同一实行。举个栗子:将大半行格式的CSS属性合并为平履行。

  • ### Ctrl+Shift+D  复制光标所在整行,插入到下一行。

  • ### Tab 向右侧缩进。

  • ### Shift+Tab 向左缩进。

  • ### Ctrl+K+K 从光标处开始去代码到行尾。

  • ### Ctrl+Shift+K 删除整行。

  • ### Ctrl+/ 注释单行。

  • ### Ctrl+Shift+/ 注释多行。

  • ### Ctrl+K+U 转换大写。

  • ### Ctrl+K+L 转换小写。

  • ### Ctrl+Z 撤销。

  • ### Ctrl+Y 恢复撤销。

  • ### Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。

  • ### Ctrl+F2 设置书签

  • ### Ctrl+T 左右字母互换。

  • ### F6 单词检测拼写

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

KSM 是水源中之医护进程(称为
ksmd),它见面定期进行页面扫描,将副本页面进行联合,然后放多余的页面。KVM使用KSM来压缩多只一般之虚拟机的内存占用,提高内存的采用效率,在虚拟机使用同样镜像和操作系统时,效果更明朗。但是会加水源开发,所以为了提升效率,可以拿之特性关闭。

作为一个跨平台的编辑器,如果非以快捷键,就像有桥不活动,趟水沟,自找劳动。

每当是深厚效率的年代,提高效率十分增长必要之,保持效率进一步不可缺失的内容。所以就算把操作文档中的事物搬至马上来,随时参考

正文基于网上的素材整理而成为。

 

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

Intel 的 x86 CPU 通常采取4Kb内存页,当是通过安排,也能够用巨页(huge
page): (4MB on x86_32, 2MB on x86_64 and x86_32
PAE)使用巨页,KVM的虚拟机的页表将下重复不见的内存,并且将增长CPU的效率。最高情况下,可以加强20%之频率!

显示类

  • ### Ctrl+Tab 按文件浏览过的依次,切换时窗口的标签页。

  • ### Ctrl+PageDown 向左切换时窗口的竹签页。

  • ### Ctrl+PageUp 向右侧切换时窗口的标签页。

  • ### Alt+Shift+1 窗口分屏,恢复默认1屏(非小键盘的数字)

  • ### Alt+Shift+2 左右分屏-2排列

  • ### Alt+Shift+3 左右分屏-3列

  • ### Alt+Shift+4 左右分屏-4列

  • ### Alt+Shift+5 等分4屏

  • ### Alt+Shift+8 垂直分屏-2屏

  • ### Alt+Shift+9 垂直分屏-3屏

  • ### Ctrl+K+B 开启/关闭侧边栏。

  • ### F11 全屏模式

  • ### Shift+F11 免打扰模式

2.3.2 通过INTEL EPT技术来促成

KVM 中,虚机的物理内存纵然为 qemu-kvm 进程所占用的内存空间。KVM 使用
CPU 辅助的内存虚拟化方式。在 Intel 和 AMD
平台,其内存虚拟化的兑现方式分别吗:

  • AMD 平台及之 NPT (Nested Page Tables) 技术
  • Intel 平台达成的 EPT (Extended Page Tables)技术
    EPT 和 NPT采用类似的规律,都是当做 CPU
    中初的一样叠,通过硬件用来以客户机的大体地址翻译啊主机的情理地址。也就是说Guest
    OS完成虚拟机虚拟地址–>虚拟机物理地址第一层转化,硬件同时形成虚拟机物理地址及物理机物理地址这第二交汇转化。第二重叠转换对Guest
    OS来说是晶莹剔透的,Guest
    OS访问内存时和以物理机运行时是同的。这种艺术又称作内存辅助虚拟化。

故而内存辅助虚拟化就是直接用硬件来兑现虚拟机的大体地址及宿主机的大体地址之一步到位映射。VMM不用再保留一客
SPT (Shadow Page
Table),通过EPT技术,不再要一起两只页表,虚拟机内部的切换为无欲qemu进程切换,所用之是止是鲜蹩脚页表查找,而且是经过硬件来成功的,性能损耗低。

流程如下:

  • VM中的施用发现页没分片,MMU发起中断,从虚拟机的物理地址(QEMU的逻辑地址)中分配一页,然后更新页表。
    图片 6
  • 这虚拟机页的大体地址还没针对许物理内存的地点,所以触发了qemu进程在宿主机的page
    fault。宿主机内核分配内存页,并创新页表。
    图片 7
  • 下次造访就可以借助EPT来进行,只待查阅两不行表明即可。

图片 8

总结:
图片 9

 

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操作都完结。

图片 10

  • 半虚拟化: KVM/QEMU就动这种模式,它当 Guest OS 内核中设置前端驱动
    (Front-end driver)和以 QEMU
    中落实后端驱动(Back-end)的道。前后端驱动通过 vring
    (实现虚拟队列的环形缓冲区)直接通信,这即绕了了经 KVM
    内核模块的经过,提高了IO性能,相对于完全虚拟的模式,
    省去矣纯模仿模式下的慌捕获环节,Guest OS 可以跟 QEMU 的 I/O
    模块直接通信。

图片 11

  • IO-through:直接把机物理设备分配给虚拟机,不过要硬件具备IO透传技术;,Intel
    定义之 I/O 虚拟化技术变成 VT-d,AMD 的称呼 AMD-V。
    KVM 支持客户机以垄断方式访是宿主机的 PCI/PCI-E
    设备。通过硬件支持的 VT-d
    技术将配备分吃客户机后,在客户机看来,设备是大体上接连于PCI或者PCI-E总线上之
    几所有的 PCI 和 PCI-E
    设备还支持直接分配,除了显卡以外(显卡的特殊性在此地)。PCI
    Pass-through 需要硬件平台 Intel VT-d 或者 AMD IOMMU
    的支撑。这些特征必须于 BIOS 中吃启用
    图片 12

    • 好处:减少了 VM-Exit 陷入到 Hypervisor
      的过程,极大地提高了性能,可以直达几乎跟原生系统一样的属性。而且VT-d
      克服了 virtio 兼容性不好与 CPU 使用效率比较高之问题。
    • 相差:独占设备的话,无法兑现设备的共享,成本增长。
    • 不足的解决方案:(1)在同一尊物理宿主机及,仅少数 I/O
      如网性要求比较高之客户机使用
      VT-d直接分配设备,其他的行使纯模仿或 virtio
      已高达多个客户机共享同一个配备的目的
      (2)对于网络I/O的解决办法,可以选 SR-IOV
      是一个网卡产生多独独立的虚构网卡,将每个虚拟网卡分配个一个客户机使用。

总结
图片 13

 

2.3.1 软件方式

黑影页表(SPT,shadow page
table):Hypervisor为虚拟机护卫了一个虚拟机的虚拟地址至宿主机物理地址炫耀的之页表。也就是说,在原的少数重合地址层次基础及加以了相同交汇地下物理地址层次,通过这张表可以用客户机虚拟地址宿主机物理地址内进行映射。

客户OS创建之后,Hypervisor创建其针对性许影子页表。刚开头影子页表是拖欠的,此时任何客户OS的访存操作都见面生缺页中断,然后Hypervisor捕获缺页异常

图片 14

透过简单蹩脚地址映射转换获得虚拟机虚拟地址物理机物理地址的投关系,写副影子页表,逐步到位所有虚拟地址到宿主机机器地址的映射。
图片 15

代价是消保障虚拟机的页表和宿主机的影页表的协同。

选择类

  • ### Ctrl+D 选中光标所占的文本,继续操作则会选中下一个均等的文件。

  • ### Alt+F3 选中文本以下尽早捷键,即可一次性选择任何底同文本进行同时编制。举个栗子:快速选中并转移所有同一的变量名、函数叫等。

  • ### Ctrl+L 选中整行,继续操作则继续选生一行,效果及 Shift+↓ 效果同样。

  • ### Ctrl+Shift+L 先选取着几近尽,再依下尽早捷键,会于每行行尾插入光标,即可同时编制这些实践。

  • ### Ctrl+Shift+M 选择括号内之情节(继续选父括哀号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或还写括号内里的内容。

  • ### Ctrl+M 光标移动至括号内终止或开的职。

  • ### Ctrl+Enter 在生一行插入新行。举个栗子:即使光标不以行尾,也会很快往下栽一行。

  • ### Ctrl+Shift+Enter 在高达一行插入新行。举个栗子:即使光标不以行首,也会迅速上扬插入一行。

  • ### Ctrl+Shift+[ 选中代码,按下尽早捷键,折叠代码。

  • ### Ctrl+Shift+] 选中代码,按下尽早捷键,展开代码。

  • ### Ctrl+K+0 展开具有折叠代码。

  • ### Ctrl+← 向左单位性地移动光标,快速移动光标。

  • ### Ctrl+→ 向右侧单位性地活动光标,快速移动光标。

  • ### shift+↑ 向上选中多行。

  • ### shift+↓ 向下选中多行。

  • ### Shift+← 向左选中文本。

  • ### Shift+→ 向右选中文本。

  • ### Ctrl+Shift+← 向左单位性地选中文本。

  • ### Ctrl+Shift+→ 向右侧单位性地当选文本。

  • ### Ctrl+Shift+↑ 将光标所在行和达标一行代码互换(将光标所在行插入到齐一行之前)。

  • ### Ctrl+Shift+↓ 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。

  • ### Ctrl+Alt+↑ 向上添加多实行光标,可同时编制多行。

  • ### Ctrl+Alt+↓ 向下补充加多履行光标,可又编制多行。

Technorati 标签:
云计算,虚拟化

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。其一过程吧如打算户态和内核态的切换。

图片 16

于非虚拟化操作系统而言,应用程序和体系发出的平凡指令都运作于用户级别指令中,只有特权指令运行于着力级别中,这样操作系统和使用解耦合。

那么,虚拟化在这边就遇到了一个难题,因为物理机OS是办事以 Ring0
的,虚拟机的操作系统就是未克吧在 Ring0
了,所以有些特权指令是尚未尽权的

CPU虚拟化的点子就是

  • 特权解除:让Guest
    OS运行于用户级别,让hypervisor运行在核心级别,这样便散了Guest
    OS的特权级别。
  • 陷入模拟:运作在Guest
    OS的平常指令像过去一致运行,当运行到特权指令时,会生很并吃hypervisor捕获。
    图片 17

这就是说难在:

  • 何以模拟x86保护模式
  • 何以堵住并施行虚拟机的Ring0指令。
    解决智如下

2.7 Hypervisor层的虚拟化实现

操作系统是用户以及物理机的接口,也是采取和情理硬件的接口。核心功能在任务调度和硬件抽象。

差操作系统的极端深异在内核。

单内核、混合本、微内核、外内核的界别
图片 18

  • 单内核:内核所有的功用代码全部且运行在和一个基础空间内,优点是性性能好高,缺点是规划复杂,稳定性不敷好;
  • 微内核:类似C/S服务模式,只有极其基础的代码会运作于本空间,其他的都运行为用户空间,优点是平静强,缺点性能比逊色;
  • 错落本:性能及安定的让步产物,完全由设计者进行用户从定义;
  • 外内核:比微内核更加极端,连硬件抽象工作还授用户空间,内核只需要保证应用程序访问硬件资源时,硬件是悠闲之

图片 19

2.2.1 CPU虚拟化技术解决方式
  • 全虚拟化:客户操作系统运行于 Ring
    1,它在实施特权指令时,会硌异常,然后
    hypervisor捕获这个充分,在生里面做翻译,最后回到到客户操作系统内,客户操作系统认为好的特权指令工作健康,继续运行。所以啊于二进制翻译技术(Binary
    Translate)。
    但这特性损耗大的万分,简单的同长条指令现在也使透过复杂的不胜处理过程
    图片 20

    • 亮点:不用修改GuestOS内核可以直接采用
    • 缺陷:在VMM捕获特权指令和翻译过程会促成性的退。
      图片 21
      自打上图可以看到,当虚拟机中的使要运行在内核态的上,会经Hypervisor层的效仿,通过二进制翻译技术,将命替换为其他的一声令下。
  • 半虚拟化:修改操作系统内核,替换掉不可知虚拟化的指令,通过顶尖调用(hypercall)直接和脚的虚拟化层hypervisor来报道,
    相对于完全虚拟化性能更胜,因为省去了翻的长河。但是急需针对Guest
    OS进行改动,应用场景不多。
    图片 22
  • 硬件辅助虚拟化: 2005年晚,CPU厂商Intel 和 AMD 开始支持虚拟化了。
    Intel 引入了 Intel-VT (Virtualization Technology)技术
    重中之重的落实方式是增加了一个VMX
    non-root操作模式,运行VM时,客户机OS运行于non-root模式,依然有Ring0~ring3等级别
    当运行特权指令时抑或来中断的时刻,通过VM_EXIT就可切换到root模式,拦截VM对虚拟硬件的看。执行完毕,通过VM_ENTRY回到non-root即可。
    图片 23
    这种技能主要代表也intel VT-X,AMD的AMD-V
    图片 24

全虚拟化

半虚拟化

硬件辅助虚拟化

实现技术

BT和直接执行

Hypercall

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

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

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

性能

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

应用厂商

VMware Workstation/QEMU/Virtual PC

Xen

KVM 是基于CPU
拉的全虚拟化方案,它要CPU虚拟化特性的支撑。
总结:
图片 25

2.1 服务器虚拟化架构

  • 裸金属架构:Hypervisor层直接运行于硬件系统上。典型例证是KVM。KVM其实就算是Linux内核提供的虚拟化架构,可拿基本直接充当Hypervisor,KVM一般用处理器本身支持虚拟化扩展技术,如Intel
    VT等。KVM使用内核模块kvm.ko来兑现核心虚拟化功能,但是就提供了CPU和内存的虚拟化,必须做QEMU才能够结合完整的虚拟化技术。

图片 26

  • 宿主架构:典型的就是QEMU,它好透过二进制转换来拟CPU,使Guest
    OS认为自己还与硬件打交道。
    图片 27
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是核心竞争力

1.1 为什么用服务器虚拟化

若果物理机上只有安排一种植业务,资源利用率太没有,不便民省成本。如果说生区域用以物理机来保证平稳,对于开发测试区使用虚拟机不但可省去有限的物理机资源,还可以速直达丝。

1.2 虚拟化发展历史

  • 提出概念:1959年6月提出,在列国信息处理大会上刊载之《大型高速计算机被的年华共享》论文被提出
  • 开发技术:20世纪60年代起,IBM操作系统虚拟化技术应用在了大型机和袖珍机上
  • 蓬勃发展:20世纪90年间,VMware公司先是落实了X86绑架构上的虚拟化,于1999年出产了x86平台上之率先磨蹭虚拟化商业软件VMware
    workstation。
  • 群雄逐鹿:更多之厂商投入了虚拟化技术的军

第二章 服务器虚拟化

服务器虚拟化主要发生星星点点种植艺术:

  • 硬件虚拟化:通过Hypervisor层虚拟出硬件系统环境,将硬件系统CPU发出之吩咐经过处理后传至大体CPU上。

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

所谓Hypervisor层就是以情理服务器和操作系统中运行的软件层,可以对法硬件系统,将先后对斯硬件系统CPU发送的吩咐经过处理后,加以虚拟传到物理CPU上。同时其可协调访问服务器上之情理设备与虚拟机,也给虚拟机监视器(VMM
)。

  • 容器:只是虚拟化出下运行时的环境,是比较轻量的虚拟化,层次较浅。

2.6 网卡虚拟化

VM发出之流量一般发生三三两两种植

  • 顶物理机外部的装备,
  • 交地头物理服务器上的虚拟机。

从而我们得确保不同虚拟机流量的并行隔离,同时还要要考虑情理设备外虚拟机的互联互通。

化解方式:
对此对物理机外部的流量,给每个VM分配一个专用通道,共享物理网卡资源。
关键出如下几种植模式:

  • Bridge桥搭模式:把物理主机及之网卡当交换机,然后虚拟生一个Bridge来接收发于物理机的管教。
    图片 28
  • isolation mode:仅guest OS之间通信;不跟表面网络与宿主机通信。
    图片 29
  • routed mode:与外部主机通信,通过静态路由使得各Guest OS
    的流量需要通过物理网卡
    图片 30
  • nat:地址转换;在编造网卡和大体网卡之间建立一个nat转发服务器;对数码包进行源地址转换。
    图片 31

本着内部流量:

  • 在hypervisor上确立virtual
    switch,不过会耗费CPU资源,而且存在比较生安全隐患。(intel的VT-c用VMDq技术如果网卡芯片处理部分vswitch的干活,同时用vFW来保障平安)
  • 得先叫流量产生服务器通过安全设备区域展开数据清洗以后再也返。主流方式使用硬件SR-IOV对VM流量进行鉴别和拍卖

总结

图片 32

第一章 服务器虚拟化概述

2.4 KVM其他内存管理技术