云计算核心--服务器虚拟化技术原理与应用_第1页
云计算核心--服务器虚拟化技术原理与应用_第2页
云计算核心--服务器虚拟化技术原理与应用_第3页
云计算核心--服务器虚拟化技术原理与应用_第4页
云计算核心--服务器虚拟化技术原理与应用_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、服务器虚拟化技术,原理与应用,内容提要,虚拟化技术简介 虚拟化实现技术 硬件辅助虚拟化原理 KVM/QEMU实现分析 容器虚拟化 Libvirt简介,虚拟化简介,虚拟化 (Virtualization)的本质 虚拟化是资源的逻辑表示,不受物理限制的约束。其技术本质就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口和方法,抽象出一个虚拟机的软件或硬件接口,是的上层软件可以直接运行在虚拟机的环境上。 虚拟化的层面 硬件层虚拟化:通过虚拟硬件抽象层来实现虚拟机,为虚拟机操作系统呈现和物理硬件相似或接近的硬件层。 操作系统层虚拟化: 指操作系统的内核可以提供多

2、个互相隔离的用户态实例,各自有自己独立的文件系统、网络和系统设置、库函数等等。又叫容器虚拟化。 内存虚拟化: 操作系统通过段式页式管理,提供用户态所有应用程序一个连续完整的内存空间,从而屏蔽物理内存细节,简化应用开发。 编程语言层的虚拟化: 由虚拟机runtime系统将中间代码动态翻译成硬件的机器语言执行,从而在不同硬件和操作系统上运行,例如java的JVM。,虚拟化简介,系统虚拟化,在系统虚拟化中,物理资源通常称为宿主(host),而虚拟出来的资源称为客户(guset),而虚拟化管理软件成为VMM,虚拟化简介,虚拟化的优点 封装性: 以虚拟机为粒度的封装似的虚拟机运行环境的保存非常便捷,部署

3、、备份和恢复都非常迅速。 多实例: 在一个计算机上运行多个虚拟机使得硬件资源的利用率更高。通过多态硬件服务器组成的集群资源池,可以根据负载动态启用或关闭服务器。 隔离: 相比同一操作系统中的多任务,每个应用程序可以在自己的操作系统中独立的运行,不会影响到其他程序。 硬件无关性: 通过虚拟化模拟出的应用程序所需的硬件资源,从而使得应用和具体硬件关联性大大降低;通过动态迁移技术更是可以将运行状态的虚拟机无缝的迁移到其他服务器上运行。,虚拟化实现技术,系统虚拟化的实现方式 基于软件完全虚拟化:又称全虚拟化,通过软件的方式完整模拟底层硬件环境,让客户机操作系统完全觉察不到是运行在一个虚拟平台上。这样的

4、虚拟平台可以直接运行现有的操作系统,而无需对操作系统进行任何修改。具体的内容包括对处理器、内存和I/O的虚拟化处理。代表是Boches,Qemu 硬件辅助的全虚拟化:基于软件的完全虚拟化方式中,由于所有的指令执行都需要通过软件去模拟,在性能上会有一定的损失,导致虚拟机运行效率明显低于物理机。如果能把部分硬件(如物理CPU)能处理的指令直接交给硬件执行,而对于硬件不支持的操作则采用软件模拟的方式,这样就会大大提高效率。代表是基于KVM的QEMU,VMWare。 半虚拟化:通过修改操作系统的代码来解决虚拟化过程中的问题来实现虚拟化。代表是Xen(Xen也支持全虚拟化),虚拟化实现技术,异质与同质虚

5、拟化 异质虚拟化:在一种指令体系架构的宿主机中虚拟另一种体系架构下的虚拟机。例如,x86虚拟arm,所有指令都需要重新翻译、模拟后执行,效率非常低下,通常不会超过10%。 同质虚拟化: 虚拟机和宿主机是同种指令体系架构,例如,x86虚拟x86,powerpc虚拟powerpc。 同质虚拟化中很多指令可以直接在物理硬件上运行,而不需要逐条指令翻译。效率较高,现代实用级别服务器系统虚拟化都是同质虚拟化。 敏感指令: 同质虚拟化中,那些由于会产生冲突无法直接在物理硬件上运行的指令称作敏感指令。例如,涉及到硬件设备、内存寻址等方面的指令。 同质虚拟化的实现本质就是捕获与模拟。即补获敏感指令,模拟实现其

6、行为。,虚拟化实现技术,实现同质全虚拟化需要解决的问题 CPU虚拟化: 实现CPU指令的模拟;中断和异常的模拟和注入 内存虚拟化:提供所有虚拟机一个从0开始的连续物理内存空间;在各虚拟机之间有效隔离、调度以及共享内存资源。 IO虚拟化:管理有限的外设资源,截获guest os对设备的访问请求,通过软件模拟的方式来模拟真实设备的效果。,硬件辅助虚拟化,硬件需求: 确定机器有VT grep vmx /proc/cpuinfo (INTEL芯片) grep svm /proc/cpuinfo(AMD芯片) 确保BIOS里开启VT Intel(R) Virtualization Tech Enable

7、d 确保内核版本较新,支持KVM 用uname r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。,硬件辅助虚拟化,虚拟化漏洞与硬件辅助虚拟化基本原理 x86 硬件支持 4 个特权级 (Ring),一般内核运行在 Ring 0, 用户应用运行在 Ring 3 一些关键操作指令只能在最高特权级别上执行,它们一般被称为特权指令。如果在非特权级别上试图执行特权指令,将生成一个一般保护异常 非特权指令则可以在任何一个权限级别执行 敏感指令是VMM 不可以轻易让客户操作系统执行的指令,如果所有敏感指令都是特权指令,就可以利用保护异常实现虚拟化 当一部分敏感指令并不是特权指令,这就出现问

8、题了。非特权指令在Ring1Ring3上是可以执行。VMM不会处理这些指令。这就是硬件架构上的虚拟化漏洞,硬件辅助虚拟化,VT-x 引入两种模式, 统称VMX模式 根模式(VMX Root Operation): VMM 运行的模式 非根模式(VMX Non-Root): 客户机所运行的模式 非根模式的下所有敏感指令的行为被重新定义, 他们不经虚拟化就直接运行或通过陷入再模拟的方式运行,在根模式下所有的指令行为没有变化 非根模式下敏感指令引起的“陷入”称为VM-Exit, VM-Exit 自动从非根模式转换为根模式 VM-Entry 操作由VMM发起, 通常是调度某个客户机运行, 此时, CP

9、U由根模式切换到非根模式 VT-x 引入了VMCS, VMCS保存CPU需要的相关状态, VMCS主要提供CPU使用, CPU发生VM-Exit和VM-Entry时会自动更新VMCS。 VMM通过指令配置VMCS, 进而影响CPU,VMCS(Virtual-Machine Control Structure),VMCS是保存在内存中的数据, 包含了虚拟CPU相关寄存器的内容和虚拟CPU相关的控制信息, 每个VMCS对应一个虚拟CPU,任何时刻VMCS与物理CPU是一对一的绑定关系 VMCS不同时刻可以绑定到不同的物理CPU, 这种绑定关系的变化称为VMCS的迁移 VT-x提供了两条指令用于VM

10、CS的绑定和解除绑定: VMPTRLD: 将指定的VMCS与执行该指令的物理CPU绑定 VMCLEAR: 将执行该指令的物理CPU与他的VMCS解除绑定。 该指令将物理CPU缓存中的VMCS结构同步到内存中, 保证VMCS和新物理CPU绑定时, 内存中的值是最新的 VM-x提供两条指令用于VMX的打开和关闭 VMXON: 打开VMX操作模式 VMXOFF: 关闭VMX操作模式,VMCS 格式,VMREAD: 读VMCS中“索引”的数据 VMWRITE : 写VMCS中索引指定的域 VMCS数据域包括六大信息: Guest state area:虚拟机状态域 Host state area:宿主

11、机状态域 VM-Execution control filelds VM-entry contorl filelds VM-exit control filelds VM退出信息,VMCS 块格式,VM-Entry与VM-Exit,执行基本的检查来确保VM-Entry能开始 对VMCS中的宿主机状态有效性检查,以确保下一次VM-Exit发生时可以正确的从客户机环境切换到VMM环境 检查VMCS中客户机状态域的有效性; 根据VMCS中客户机状态域来装载处理器状态 根据VMCS中VM-Entry MSR-load区域装载MSR寄存器 根据VMCS中VM-Entry事件注入控制的配置, 可能需要注入

12、一个事件到客户机中,CPU首先将此次VM-Exit的原因记录到VMCS相应的信息域中, VM-Entry interruption-information字段有效位(bit31)清零 CPU状态被保存到VMCS客户机状态,根据设置, CPU 也可能将客户机MSR保存到VM_Exit MSR-Store区域 根据VMCS中宿主机状态和VM-Exit控制域中的设置, 将宿主机状态加载到CPU相应寄存器。 CPU由非根模式切换到根模式, 从宿主机状态域中CS:RIP指定的VM_Exit入口函数开始执行,VM-Entry的过程:,VM-Exit的过程:,内存虚拟化,X86体系内存管理架构,内存虚拟化,

13、内存寻址与页表结构,内存虚拟化,虚拟机影子页表技术,客户机页表 GVA-GPA 载入硬件MMU无法访问真正物理内存 影子页表 GVA-HPA 载入硬件MMU访问真正物理内存 载入硬件MMU, TLB缓存影子页表表项 两者关系 客户机修改客户机页表 TLB刷新 INVLPG 影子页表同步客户机页表 VTLB,内存虚拟化,EPT(Extended Page Table)被用于支持内存虚拟化。 EPT在非根模式下将客户机物理地址(gpa)转换为宿主机物理机地址(hpa), 客户机的虚拟地址(gva)到客户机的物理地址(gpa)的转换由客户机页表实现 CPU同时使用两套页表(在原有的CR3控制器页表的

14、基础上引入了EPT页表的另一次映射) 两次页表转换都由CPU硬件自动完成 通过VMCS的“VM-Execution控制域”中的Enable EPT 字段进行激活 EPT在VM entry 时生效 当 EPT 生效时,EPT base pointer 指向Extended PageTable 当VM exit 时EPT失效,EPT硬件辅助技术,内存虚拟化,使用EPT硬件直接从GVA转换到HPA,KVM虚拟机简介,kernel-based Virtual Machine(KVM),是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的

15、调度器进行管理,KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化 kvm由两个部分组成:一个是KVM Driver, 已经成为linux内核的一个模块, 负责虚拟机的创建,虚拟机内存的分配, 虚拟机寄存器的读写以及虚拟CPU的运行等。 另外是一个稍微修改过的qemu, 用于模拟PC硬件的用户空间组件, 提供I/O设备模型以及访问外设的途径。 qemu是一种模拟处理器,现在运用最多的就是将KVM和QEMU结合起来 KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了,KVM基本结构,KVM 在 Linux 内核态与用户态的实现

16、,内核空间代码实现的功能包括以下几个方面 : 实现硬件辅助的虚拟化的核心功能。 提供用户空间对KVM控制。 对x86平台设备进行仿真。 实现IO Port空间和MMIO空间的仿真。 MMU虚拟化的支持。 PCI-Passthrough相关的功能。,KVM 在 用户态的实现(qemu)包括以下部分: 实现与KVM内核接口的用户空间逻辑。 各种层次和类型的硬件设备的仿真。 虚拟块设备的不同磁盘Image文件格式的支持。 VNC,SPICE等表示层协议的支持。 Virtio设备的后端。 QMP 协议的支持。,KVM 在 Linux 内核态与用户态的实现,内核空间代码实现的功能包括以下几个方面 : 实

17、现硬件辅助的虚拟化的核心功能。 提供用户空间对KVM控制。 对x86平台设备进行仿真。 实现IO Port空间和MMIO空间的仿真。 MMU虚拟化的支持。 PCI-Passthrough相关的功能。,KVM 在 用户态的实现(qemu)包括以下部分: 实现与KVM内核接口的用户空间逻辑。 各种层次和类型的硬件设备的仿真。 虚拟块设备的不同磁盘Image文件格式的支持。 VNC,SPICE等表示层协议的支持。 Virtio设备的后端。 QMP 协议的支持。,KVM/QEMU的执行路径,QEMU的设备虚拟化,设备虚拟化基本原理: 1. 模拟设备所具有的所有请求和响应的逻辑模块 2. 从操作系统的角

18、度,模拟目标设备的软件接口,实现相应的功能 3. 对于真实设备硬件的内部逻辑以及同其他设备的连接,则不需要精确模拟,QEMU的设备虚拟化,设备模型的软件接口: PCI 配置空间寻址方式 通过平台相关的寄存器访问,由两个寄存器组成,一个指定设备和偏移,一个读取或写入数据。,QEMU的设备虚拟化,2. PCI配置空间偏移地址,PCI配置空间的模拟: 客户机发现和初始化设备时会访问PCI配置空间。由于客户机使用相同的配置空间寄存器来访问设备的配置空间,因此只要拦截对这些寄存器的访问,就可以用进行相应的模拟,QEMU的设备虚拟化,不同访问设备方式的模拟: 端口IO (pic, dma):通过特定的指令

19、访问IO空间,x86平台包括in,out,ins,outs 。 qemu会事先注册特定端口的读写处理函数,当向这些端口发出IO指令时,就会调用相应的处理函数,完成指定的处理逻辑 MMIO:某些内存区域没有被映射到RAM存储器,而是设备的MMIO或寄存器.操作系统通过页表将相应的内存区域映射到虚拟内存空间,并通过类似访问内存的方式访问设备寄存器。 和端口IO类似,不同的是页表中并不存在相应的映射,因此会导致缺页异常,KVM拦截这些异常,进行处理或交给qemu进行处理,QEMU的设备虚拟化,DMA和中断的模拟: DMA (Direct Memory Access):操作系统向特定的硬件寄存器写入D

20、MA地址,然后向另一寄存器地址写入DMA命令来发起DMA操作。 由于DAM会读写IO端口或MMIO,因此可以用相应的读写处理函数进行拦截和模拟 中断:当设备需要操作系统处理中断时,会通过虚拟中断控制器发出中断,CPU相应中断时,通过读写特定寄存器清除中断 QEMU通过模拟中断控制器来进行处理,QEMU的磁盘虚拟化,IDE简介与数据传输模式: IDE是英文Integrated Drive Electronics的缩写,翻译成中文叫做“集成驱动器电子装置”, 它的本意是指把控制器与盘体集成在一起的硬盘驱动器。通常我们所说的IDE指的是硬盘等设备的一种接口技术。 IDE接口也叫ATA(Advance

21、d Technology Attachment)接口, 即高级技术附加。 PIO 模式(Programming Input/Output Model): 一种通过CPU执行IO端口指令来进行数据读写的数据交换模式。 DMA 模式 (Direct Memory Access)是一种不经过CPU而直接从内存存取数据的数据交换模式,QEMU的磁盘虚拟化,QEMU的PIO模拟,QEMU的磁盘虚拟化,QEMU的DMA模拟,QEMU的磁盘虚拟化,QEMU的磁盘Cache,QEMU的磁盘虚拟化,半虚拟化驱动与QEMU中的VirtIO,容器虚拟化技术,什么是容器虚拟化?,轻量级的虚拟化 仅隔离进程和上下文相关

22、资源 模拟操作系统行为而不是硬件行为 不需要提供指令解释机制以及全虚拟化的其他复杂特性 更少的硬件资源需求,更快的运行速度。相同硬件条件下,可同时支撑虚拟机的数量以及创建、启动虚拟机的速度是全虚拟化的数十到数百倍 典型代表:OpenVZ,LXC,容器虚拟化技术,传统(硬件辅助)全虚拟化架构,容器虚拟化架构,容器虚拟化技术,LXC简介 LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。 提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。Linux Containe

23、r有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,因为lxc是一种操作系统层次上的资源的虚拟化。 除了内核特性之外,LXC提供了一套用户态管理工具,常用的有: lxc-execute, lxc-start, lxc-kill, lxc-destroy, lxc-info, lxc-ps 等等,容器虚拟化技术,LXC的关键技术 Control Groups(cgoups) cgroups允许定义一个包括一个或多个进程(例如,sshd、apache等),然后设置一系列资源控制和记账选项来控制该组和其他子系统分离,包括:文件系统访问、通用设备访问、内存资源、网络设备

24、资源、CPU带宽、块设备IO带宽等 POSIX File Capabilities POSIX文件能力是一种分配权限给一个进程允许更多的特定安全控制而不是传统的root对应user的常规unix操作系统权限分离,容器虚拟化技术,Docker简介 docker 是一个基于LXC 的高级容器引擎。 Docker基于底层的LXC特性基础上,在上层构建了一套更高层次的具备多个强大功能的工具集。 Docker定义了一个将应用打包的规范,而它的所有依赖都被封装到了一个简单对象里,它可以被传输到任意一台能运行 Docker的机器,并且在这里启动Docker的实例之后,它能够确保承载应用的执行环境将会与之前所

25、定义的完全一致。,容器虚拟化技术,Docker的技术实现: LXC Cgroup+ namespace + Chroot + veth +用户态控制脚本 Docker LXC+AUFS+构建与控制工具,容器虚拟化技术,Docker的常用命令示例 获取docker: 配置好centos-extras软件源,yum install docker 启动docker: service docker start 或 systemctl start docker.service 下载一个镜像: docker pull centos 查看确认镜像: docker images centos 运行一个容器并进

26、入其bash:docker run -i t centos /bin/bash 查看正在运行的容器列表:docker ps 在容器中安装软件包并退出:yum install wget ; exit 保存容器:docker commit id(docker ps查看的id的前2位即可) wget_centos(名称) 停止容器:docker stop id(docker kill也类似,但stop发送SIGTERM,kill发送SIGKILL),容器虚拟化技术,Docker的常用命令示例 续: host与容器之间拷贝文件: docker cp contain_id:/tmp/a.txt /roo

27、t (类似scp,也可以反过来从host拷贝到容器里,但需要先停止容器) 删除一个容器: docker rm id 删除一个模板: docker rmi image_name 删除所有容器: docker rm docker ps -a q ,容器虚拟化技术,容器虚拟化的局限,虚拟机只能部署同类操作系统(Linux) 基于相同内核,虚拟机无法加载特定内核模块或驱动 隔离性不如全虚拟化,host更容易受到影响,Libvirt简介,什么是libvirt libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库。 其旨在为包括kvm、vmware、xen、lxc等等在内的各种虚拟化平

28、台提供一套方便、可靠的编程接口。 支持与C,C+,Ruby,Python,Java等多种主流开发语言的绑定。,Libvirt简介,什么是libvirt libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库。 其旨在为包括kvm、vmware、xen、lxc等等在内的各种虚拟化平台提供一套方便、可靠的编程接口。 支持与C,C+,Ruby,Python,Java等多种主流开发语言的绑定。,Libvirt简介,更详细的libvirt架构图,Libvirt简介,Libvirt的优点: 提供统一、稳定、开放的源代码的应用程序接口(API)、守护进程 (libvirtd)和和一个默认命令行管理工具(virsh)。 提供了对虚拟化客户机和它的虚拟化设备、网络和存储的管理。 提供了一套较为稳定的C语言应用程序接口。目前,在其他一些流行的编程语言中也提供了对libvirt的绑定,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论