阿里云大学-虚拟化技术入门-听课笔记
课时2 虚拟化技术概述
对资源的抽象:
- 进程级虚拟化——应用层面抽象(如JVM)
- 系统虚拟化——平台层面抽象(虚拟机)
注意:本文讨论的是系统虚拟化,而不是进程级虚拟化。
虚拟化技术分类:
全虚拟化
硬件辅助虚拟化
基于二进制翻译等
半虚拟化(需要Guest OS的支持)
Hypervisor (VMM)
- Type 1:硬件之上直接运行Hypervisor
- Type 2:硬件之上运行Host OS并在内核中包含Hypervisor的功能
设计标准
Hypervisor:
必须能够控制硬件资源(CPU、内存、IO等)
必须有效隔离客户机(免受客户机的威胁)
多客户机之间强隔离
虚拟机:
等价性(硬件资源的等价性)
高效性(emulator不够高效,不被称为虚拟机)
常见的Hypervisor
- Xen - 剑桥大学 2002
亚马逊、rackspace、阿里云
- KVM - 以色列 2007
基于Linux内核
Hyper-v - 微软 2006
VMware ESX Server(高端服务器)
VMware workspace (工作站)
VirtualBox(PC上常用的虚拟化技术)
课时3 CPU虚拟化技术
CPU虚拟化:
- 二进制翻译(早期x86技术不支持虚拟化)
扫描Guest OS指令,对敏感指令进行替换;实现复杂,效率低。
- 半虚拟化(修改Guest OS中的敏感指令)
不需要扫描Guest OS指令,效率很高。
- 硬件辅助虚拟化
CPU厂商从硬件上支持虚拟化指令。
课时4 内存虚拟化技术
内存虚拟化挑战:
操作系统要求内存从0开始
操作系统要求内存地址连续
它的好处在于:低段内存连续、管理更高效、使用superTLBS加速访问效率
内存重映射技术
MMU(内存管理单元)虚拟化技术:
Direct page table 直接页表
Virtual TLB 虚拟TLB
Shadow page table 影子页表
Extended page table 硬件扩展页表
Direct page table
通过修改内核使Guest和Hypervisor共享同一张页表,使用段保护的方式对地址空间分段,让Guest无法访问Hypervisor的空间。这种技术广泛应用于XenLinux32,因为无需切换页表而相当高效,但安全性必须通过审计保证,且不支持Windows。
Virtual TLB
当Guest访问虚拟地址时触发page fault,Hypervisor通过分析得知是Guest的正常请求,于是将其翻译为Hypervisor的内存地址。该实现方案简单,但因为它只能缓存访问过的虚拟地址,因此效率非常低。
Shadow page table
在Guest内部有一张页表的同时,在Hypervisor中为其建立一张对应的转换表,即影子页表。影子页表的建立过程相对复杂(Guest访问虚拟内存,引发缺页异常,Hypervisor捕获并查询Guest中的页表,最终将Guest到Hypervisor的地址转换关系放入影子页表中)。该实现方案无需修改内核,但效率较低(相对物理机而言,XenLinux32的转换效率为84%左右,而XenLinux64仅为65%左右)。
Extend page table
CPU厂商引入硬件支持,完成虚拟机内存到物理机内存的转换,整个过程无需Hypervisor介入。而Hypervisor唯一需要做的就是在创建虚拟机时,将地址的映射关系放入CPU的某个寄存器当中。该实现方案的效率极高(相对物理机而言,使用4K页的转换效率可达95%以上,而使用2M页可达98%以上)。
课时5 IO虚拟化技术
I/O设备的工作原理:
- 硬件设备的中断请求
- CPU与内存的寄存器访问
- 设备与内存的DMA
I/O虚拟化的实现方式
软件模拟
Hypervisor通过捕获访问,然后解码并进行模拟。这种方式的效率很低,并且仅出现在早期的虚拟化中。
半虚拟化(PV)
重新定义I/O架构,例如Xen引入split diver,通过共享内存交换数据,摒弃了寄存器和DMA的操作方式,因此效率很高,唯一的不足是软件复杂度较高。采用PV虚拟化的I/O解决方案大量出现于商业级虚拟化软件中,例如Xen和KVM。
设备直通(VT-d + SRIOV)
CPU厂商通过在北桥芯片中加入VT-d技术,解决中断及DMA的remapping(重映射)问题,联合I/O设备对SRIOV技术的支持,解决物理设备独占访问的问题,最终使得I/O虚拟化的大部分工作由硬件完成,提高了效率并且降低了软件复杂度。
课时6 开源虚拟化项目
Xen
Xen起源于2002年剑桥大学的开源项目,2003年发布Xen2.0支持PV,2006年发布Xen3.0支持PVHVM,后来被Citrix以5亿美元收购,目前Xen仍处于研发状态,最新的Xen 4.6支持PVH。
Xen的PV模式,需要修改Guest OS内核,将所有的I/O,中断等重新定义,形成与x86完全不同的架构。而Xen的HVM模式,借助CPU的硬件辅助(VT-x),将Hypervisor运行在Ring0,Guest Kernel运行在Ring1上。HVM无需修改Guest OS内核。
Xen还提供了另外一些技术:用于挂载PV驱动的Xen Bus,还有用于信息存储和交换的Xen Store。
Xen对于I/O设备的支持包括软件模拟、半虚拟化(PV)和设备直通。
Xen的商业化云平台包括:亚马逊AWS、阿里云等。
KVM
KVM通过在Linux内核中加入一个模块,把Linux内核扩展成为Hypervisor。KVM最早由以色列的一家公司于2007年创建并引入Linux内核。它依赖于VT技术,最初仅支持x86架构,后来被RedHat以1亿美元收购。
KVM基于Linux内核开发而来,依赖Intel VMX或AMD SVM技术,完成CPU和内存的虚拟化,借助what I/O架构实现I/O虚拟化。此外,KVM还通过Para-virtualized spinlocks解决自旋锁的性能损失问题,通过Para-virtualized Timing解决时间虚拟化的问题,通过Para-virtualized Huge page降低内存虚拟化开销。
KVM的商业化云平台包括:Google GCE、阿里云ECS 2.0。
比较
Xen和KVM的共同点:借助硬件技术模拟CPU和内存,使用Qemu模拟非关键设备,通过PV增强虚拟化I/O的性能。
Xen和KVM的不同点:Xen是Type-1 Hypervisor而KVM是Type-2;Xen的软件复杂度(代码量)远大于KVM。
阿里云大学-虚拟化技术入门-听课笔记相关推荐
- [阿里云大学][Java面向对象开发][课程笔记][17-42课时]
课时17 数组的定义与使用(数组转置) 首尾交换 1. 新定义一个空数组,然后把原数组的值从后到前存入新的数组 问题:开辟了两块相同的堆内存空间,造成浪费 2. 在原数组上反转 计算数组长度/2,交换 ...
- 【Java】【阿里云大学】面向对象编程全套笔记(更新中)
文章目录 Java面向对象编程 第一章 类与对象 课时2:面向对象简介 课时3:类与对象简介 课时4:类与对象定义 课时5:对象内存分析 课时6:对象引用分析 课时7:引用传递与垃圾产生分析 第二章 ...
- 阿里云大学python_阿里云大学「学习路线」,一站式从入门到高手——Python、Java、前端、运维、数据库、云原生……...
阿里云大学有哪些学习路线? 已上线(免费学习+自测考试): 即将上线: 迁移上云.大数据技术.人工智能.微服务.IoT.小程序-- 为什么要做学习路线? 大家知道,学习一门技术,都要经历从理论到实战, ...
- 阿里云大学云计算专业欢迎加入
2019独角兽企业重金招聘Python工程师标准>>> 云计算: 云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易 ...
- 大学计算机基础知识点_阿里云大学和腾讯云大学的计算机基础课程
再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理: <生信分析人员如何系统入门R(2019更新版)& ...
- 阿里云大学课程学习有奖征文活动现在开始
2019独角兽企业重金招聘Python工程师标准>>> "学有所获,分享为美"--阿里云大学课程学习有奖征文活动开始啦~~ 看课程,写心得,赢千元大奖,还有机会加 ...
- 快来加入阿里云大学【云学院】班级助理招募—机会稍纵即逝,错过遥遥无期!...
2019独角兽企业重金招聘Python工程师标准>>> 如果你对云计算.大数据.云安全.人工智能领域感兴趣~ 如果你想从事与此相关的工作~~ 如果你又喜欢边交流边学习的方式~ 那么, ...
- 阿里云大数据助理工程师ACA认证最新笔记(2021)
阿里云大数据助理工程师ACA认证最新笔记(2020) 首先谈论一下考试相关 本人与最近学习并通过了阿里云云计算助理工程师ACA认证,购买了认证包,有6个月的时间,无数次的观看视频,每个沙箱实验都有两次 ...
- 阿里云消息队列MQ学习—阿里云大学视频课
在刷ACE题的过程中,感觉对于消息队列部分的理解不是很深刻,这里来学习一下. 例行还是先走一遍阿里云大学的一些视频课程扫扫盲,选择如下课程: 阿里消息队列MQ简介:阿里巴巴中间件技术部自主研发的专业消 ...
最新文章
- Python的range()函数
- 后端缓存的23个关键关注点
- SQLServer2008/2005 生成数据字典语句
- MFC中“资源在另一个编译器中打开”报错解决方法
- 关于SQL漏洞注入(Ado.Net)
- 邮件系统磁盘监控脚本
- session的存储,以及redis基本介绍
- 接收不到其他机器发来的报文_TCP/IP报文格式,康康就知道了
- mysql 每组取一条_MySql分组后随机获取每组一条数据的操作
- 如何查看linux中的ssh端口开启状态
- C++实现读取图片的长度和宽度
- linux 3ds模拟器下载地址,3ds模拟器
- 水卡修改金额_【技术分享】关于IC卡,水卡修改控制位教程
- 快速将MP3音频转换为WAV的软件
- 湿度控制c语言程序,基于51单片机的湿度控制系统设计.doc
- Presto Split 详解
- pikachu站点所有问题
- 物联网概论学习总结(已结课)
- 用java设计节拍器_java定时执行方法节拍器
- Nand Flash基础笔记(1)
热门文章
- 《MYSQL是怎样运行的》笔记|配置文件|系统变量|字符集|InnoDB存储结构|数据页结构|索引结构与使用|数据目录|表空间|连表原理|查询优化|BufferPool|事务|redo与undo|锁
- Python函数式编程15 python包
- 黑苹果与白苹果的区别及其安装方式
- c++2048小游戏编写
- 光有激光雷达还不够?4D成像雷达进入“量产上车”时代
- 倍加福UB300-18GM40-U-V1超声波传感器
- windows查询主机名命令
- 电镀行业水处理分析:褪镀废水回收重金属,用什么工艺解决
- paper学习笔记 - PLE
- Spark 第一讲 Scala安装配置