990 likes | 1.37k Views
分布式系统 Distributed Systems 第 9 讲 虚拟化 Lecture 9 virtualization. 王晓阳、张 奇 复旦大学 计算机科学技术学院. 目录. 7.1 虚拟化介绍 7.2 处理器虚拟化 7.3 内存 虚拟化 7.4 I/O 虚拟 化 7.5 实例. 虚拟化技术的历史. 虚拟化技术将物理资源转化为便于切分的资源池,符合云计算的基本条件; 虚拟化给资源以动态调配的能力,符合云计算按需分配的要求;. 资源池. 2006. Amazon 采用虚拟化技术提供云计算平台,取得了商业上的成功,虚拟化技术成为云计算的基石;.
E N D
分布式系统 Distributed Systems第 9 讲 虚拟化Lecture 9 virtualization 王晓阳、张 奇 复旦大学 计算机科学技术学院
目录 • 7.1 虚拟化介绍 • 7.2 处理器虚拟化 • 7.3 内存虚拟化 • 7.4 I/O虚拟化 • 7.5 实例
虚拟化技术的历史 虚拟化技术将物理资源转化为便于切分的资源池,符合云计算的基本条件; 虚拟化给资源以动态调配的能力,符合云计算按需分配的要求; 资源池 2006 Amazon采用虚拟化技术提供云计算平台,取得了商业上的成功,虚拟化技术成为云计算的基石; 1960‘s 1999 2003 2005 IBM推出虚拟化技术,提高了昂贵的大型机的利用率; VMware公司解决了X86虚拟化问题,推出了X86平台的虚拟机软件,使虚拟化技术开始走向普通用户。 开源虚拟化技术Xen推出,使虚拟化技术的研究和应用更加普及; Intel和AMD推出支持虚拟化技术的处理器和芯片组,实现了硬件辅助虚拟化技术; 来源: ZTE中兴 虚拟化技术
服务器虚拟化的基础概念 未更改过的应用 未更改过的OS 虚拟硬件 虚拟化将硬件、操作系统和应用程序一同封装一个可迁移的虚拟机档案文件中 虚拟化后 虚拟化前 • 软件必须与硬件相结合 • 每台机器只能 运行单一的操作系统 • 每个操作系统有一个或多个应用程序负载(通常只有一个) • 增加虚拟化层 • 裸金属架构 • 每台机器上有多个操作系统和多个应用负载 来源: ZTE中兴 虚拟化技术
虚拟化计算系统体系结构 虚拟化计算系统 计算模式 传统计算系统 计算模式 应用系统 应用系统 应用系统 应用系统 虚拟机 虚拟机 虚拟机 虚拟机 操作系统 操作系统 操作系统 操作系统 应用程序 操作系统 … 虚拟机管理器VMM VMM VMM VMM 单计算系统 虚拟化 多计算系统 虚拟化 来源: ZTE中兴 虚拟化技术
虚拟技术: 四大特性 隔离 分区 在单一物理服务器上同时运行多个虚拟机 在同一服务器上的虚拟机之间相互隔离 相对于硬件独立 封装 整个虚拟机都保存在文件中,而且可以通过移动和复制这些文件的方式来移动和复制该虚拟机 无需修改即可在任何服务器上运行虚拟机 来源: ZTE中兴 虚拟化技术
虚拟化益处:实现资源最优利用 虚拟机 Hypervisor Hypervisor Hypervisor Hypervisor • 通过虚拟化进行服务器整合优势: • 大大提高硬件利用率 • 增加系统的可管理性 • 简化服务器安装过程,节约时间50%~70% • 减少10倍或更多的硬件购买需求,节约一半的购买和维护成本 来源: ZTE中兴 虚拟化技术
虚拟化益处:动态负载均衡资源 利用虚拟机与硬件无关的特性的虚拟机迁移技术,按需分配资源 Hypervisor Hypervisor Hypervisor 来源: ZTE中兴 虚拟化技术 当VMM监测到某个计算节点的负载过高时,可以在不中断业务的情况下,将其迁移到其它负载较轻的节点或者在节点内通过重新分配计算资源 执行紧迫计算任务的虚拟机得到更多的计算资源,保证关键任务的响应能力
虚拟化益处:系统自愈功能提升可靠性 实现经济高效、独立于硬件和操作系统的应用程序高可用性 Hypervisor Hypervisor Hypervisor 来源: ZTE中兴 虚拟化技术 系统服务器硬件故障时,可自动重启虚拟机 消除在不同硬件上恢复操作系统和应用程序安装所带来的困难,其中任何物理服务器均可作为虚拟服务器的恢复目标 减少硬件成本和维护成本
虚拟化益处:提升系统节能减排能力 • 与服务器管理硬件配合实现智能电源管理 • 优化虚拟机资源的实际运行位置,达到耗电最小化 • 可为运营商节省大量电力资源,减少供电成本,节能减排 Hypervisor Hypervisor Hypervisor 休眠 来源: ZTE中兴 虚拟化技术
虚拟化技术的驱动力——IT成本的消减 • 虚拟化技术能够显著提高硬件平台的利用率,节省50%以上的IT投资; • 硬件服务器的减少同时能够节省机房电力、空间和制冷方面的投入; IDC统计的每用户年度花费
虚拟化技术的驱动力——管理和可用性的提升 • 虚拟机与物理服务器的隔离,使物理服务器的变化不波及虚拟机,简化了管理难度; • 虚拟机间能够提供对上层透明灾难恢复机制,灾难恢复过程简单灵活,能显著提高系统可用性; 虚拟机 虚拟机 App App OS OS 故障 升级 维护 物理设备 来源: ZTE中兴 虚拟化技术
数据中心整合案例 客户示例:领先的北美公共设施公司 VMware 对其产生的影响 • 硬件成本节省 • 数据中心空间、电力和制冷成本节省 70-80% • 2 年节省 800 万美元 • 运营效率 • 服务器重建和应用程序载入时间从 20-40 小时缩短到 15-30 分钟 • 每年节省 10,000 工时 来源: ZTE中兴 虚拟化技术
认识虚拟化 性能 计算机系统 应用程序 LIB库仿真 高 Wine 应用编程接口API 操作系统虚拟化 程序库 VServer 系统调用SysCall 半虚拟化 Xen 操作系统 全虚拟化 KVM/Vmware 指令集合ISA 硬件 指令仿真 QEMU 低 来源: ZTE中兴 虚拟化技术
X86平台虚拟化的三种方式 来源: ZTE中兴 虚拟化技术
X86平台 Full virtualization虚拟化技术 App • 客户操作系统运行在Ring 1级,VMM运行在Ring 0级,VMM提供给操作系统各种虚拟资源(虚拟BIOS、虚拟设备和虚拟内存管理等)。对于不能虚拟化的特权指令,通过二进制转换方式转换为同等效果的指令序列运行,而用户级指令可直接运行。 • 客户操作系统与底层硬件资源完全隔离,操作系统不感知运行在虚拟机上,也不需要修改操作系统,虚拟机具有较好的隔离性和安全性。 Ring 3 用户指令直接执行 Ring 2 Guest OS Ring 1 对特权指令进行二进制转换 VMM Ring 0 X86 硬件平台 来源: ZTE中兴 虚拟化技术
X86平台 Para-virtualization虚拟化技术 • 这种方式需要修改操作系统内核,将不能虚拟化的指令替换为hypercall,hypercall直接与虚拟层通信,虚拟层提供内核操作的关键接口,如内存管理、中断处理和时间管理等。 • 这样显著减少了虚拟化开销,性能较高,但是由于需要修改操作系统内核,对于非开放的操作系统,如windows 2000/xp,则无法支持。 App Ring 3 用户指令直接执行 Ring 2 Ring 1 Guest OS Ring 0 通过Hypercall调用虚拟层操作 VMM X86 硬件平台 来源: ZTE中兴 虚拟化技术
X86平台 硬件辅助虚拟化 • 在Intel的VT-x技术中,CPU在Ring 0级之下还提供了一个Root Mode,VMM运行在Root Mode下。特权指令自动被VMM捕获,不需要进行二进制转换或调用Hypercall。 • Intel还对外设提供了VT-d和VT-c等技术,提供对外设虚拟化的支持。 App Ring 3 用户指令直接执行 Ring 2 非Root mode Ring 1 Guest OS Ring 0 特权指令被VMM捕获,不需要二进制转换 VMM Root mode X86 硬件平台 来源: ZTE中兴 虚拟化技术
虚拟化技术的关键组件——VMM组织架构 VMM又称为Hypervisor,负责为虚拟机统一分配CPU、内存和外设,调度虚拟资源; APP Guest OS1 App Guest OS2 APP Guest OS1 APP Guest OS2 APP Guest OS1 APP Guest OS2 Service OS VMM Host OS VMM VMM Hardware Hardware Hardware VMM作为一个应用程序运行在主机操作系统上,兼容性好但效率低。 OS-Hosted 模式 Stand-alone Hypervisor 模式 VMM直接运行在物理硬件上,效率更高,但硬件兼容性差。 前两种方式的综合,VMM直接运行在物理硬件上,但驱动程序由Service OS提供。 Hybrid模式 来源: ZTE中兴 虚拟化技术
7.2 处理器虚拟化 • CPU 背景 • 处理器虚拟化技术 • 系统ISA虚拟化 • 指令解释 • 陷入模拟 • 二进制翻译 • 混合模型
计算机系统组成 CPU 内存 MMU 控制器 本地总线 I接口 高速I/O总线 帧缓存 NIC 控制器 桥 LAN 低速I/O总线 CD-ROM USB
CPU 组成 • 指令系统结构(ISA) 定义: • 对编程人员可见的状态 • 寄存器和内存 • 在这些状态上进行的操作指令 • 典型ISA划分为2部分 • 用户 ISA • 主要用来计算 • 系统 ISA • 主要用来管理系统资源
用户 ISA – 状态 专用寄存器 用户虚拟内存 程序计数器 条件码寄存器 通用[一般]寄存器 浮点寄存器 Reg 0 FP 0 Reg 1 FP 1 Reg n-1 FP n-1
用户 ISA – 指令 整数 内存 典型指令流水线 控制流[图] 浮点数 Integer 加 减 与 比较 … 载入字节 载入字 多路存储 压栈 … 跳转 相等跳转 调用 返回 … 单精度加 双精度乘 双精度开根号 … Integer 取指 译码 寄存器操作 发射 Memory FP 指令集
系统 ISA • 特权级别 • 控制寄存器 • 陷入和中断 • 硬编码向量 • 分派表 • 系统时钟 • 内存管理单元MMU • 页表 • TLB • I/O 设备访问 User System User Extension Kernel Level 0 Level 1 Level 2
Isomorphism 形式上讲,虚拟化就是从客户机状态到宿主机状态的同构构造 Guest Si Si’ e(Si) Sj Sj’ V(Si) V(Sj) Host e’(Si’)
系统指令体系结构的虚拟化 • 监视器需要的硬件支持 • 例如: 监视器必须能够控制实际的硬件中断 • 访问硬件使得虚拟机(VM)破坏隔离性 • 例如: 访问MMU使得VM能够写任何页 • 因此… • 客户机所有对虚拟系统ISA访问的操作必须由监视器软件模拟实现。 • 系统的状态保存在内存中。 • 系统指令都由虚拟机监视器的相关函数实现[相关函数实现在监视器中]
示例:CPU状态 • CPU虚拟化技术的目标 • 能够尽可能快的处理一般指令 • 特权指令转交给模拟例程 static struct { uint32 GPR[16]; uint32 LR; uint32 PC; int IE; int IRQ; } CPUState; void CPU_CLI(void) { CPUState.IE = 0; } void CPU_STI(void) { CPUState.IE = 1; }
指令解释 • 模拟 取指/译码/执行 软件流水线 • 优点 • 容易实现 • 复杂度最低 • 缺点 • 慢!
实例: 虚拟化中断标识w/ 指令解释器 void CPU_Run(void) { while (1) { inst = Fetch(CPUState.PC); CPUState.PC += 4; switch (inst) { case ADD: CPUState.GPR[rd] = GPR[rn] + GPR[rm]; break; … case CLI: CPU_CLI(); break; case STI: CPU_STI(); break; } if (CPUState.IRQ && CPUState.IE) { CPUState.IE = 0; CPU_Vector(EXC_INT); } } } void CPU_CLI(void) { CPUState.IE = 0; } void CPU_STI(void) { CPUState.IE = 1; } void CPU_Vector(intexc) { CPUState.LR = CPUState.PC; CPUState.PC = disTab[exc]; }
陷入和模拟 客户操作系统+ 应用 非特权态 缺页 未定义指令 虚拟中断 虚拟机监视器 特权态 MMU 模拟 CPU 模拟 I/O 模拟
陷入模拟的问题 • 并不是所有的体系结构都支持 • 陷入的代价比较高 • 监视器在特权级别 • 需要虚拟化保护级别
二进制翻译 客户代码 翻译器 翻译缓存 CPU 模拟例程 翻译缓存[TC] 索引 调出
基本块 客户代码 vPC movebx, eax cli Straight-line code and ebx, ~0xfff 基本块 movebx, cr3 sti ret 控制流图
二进制翻译 客户代码 翻译缓存 vPC movebx, eax movebx, eax 开始 cli call HANDLE_CLI and ebx, ~0xfff and ebx, ~0xfff movebx, cr3 mov [CO_ARG], ebx sti call HANDLE_CR3 ret call HANDLE_STI jmp HANDLE_RET
二进制翻译 客户代码 翻译缓存 vPC movebx, eax movebx, eax start cli mov [CPU_IE], 0 and ebx, ~0xfff and ebx, ~0xfff movebx, cr3 mov [CO_ARG], ebx sti call HANDLE_CR3 ret mov [CPU_IE], 1 test [CPU_IRQ], 1 jne call HANDLE_INTS jmp HANDLE_RET
基本二进制翻译器 void BT_Run(void) { CPUState.PC = _start; BT_Continue(); } void BT_Continue(void) { void *tcpc; tcpc = BTFindBB(CPUState.PC); if (!tcpc) { tcpc = BTTranslate(CPUState.PC); } RestoreRegsAndJump(tcpc); } void *BTTranslate(uint32 pc) { void *start = TCTop; uint32 TCPC = pc; while (1) { inst = Fetch(TCPC); TCPC += 4; if (IsPrivileged(inst)) { EmitCallout(); } else if (IsControlFlow(inst)) { EmitEndBB(); break; } else { /* ident translation */ EmitInst(inst); } } return start; }
基本二进制翻译器– 第二部分 void BT_CalloutSTI(BTSavedRegsregs) { CPUState.PC = BTFindPC(regs.tcpc); CPUState.GPR[] = regs.GPR[]; CPU_STI(); CPUState.PC += 4; if (CPUState.IRQ && CPUState.IE) { CPUVector(); BT_Continue(); /* NOT_REACHED */ } return; }
控制流的控制 客户代码 翻译缓存 vEPC test eax, 1 test eax, 1 开始 jeq jeq add ebx, 18 call END_BB movecx, [ebx] call END_BB mov [ecx], eax ret
控制流的控制 客户代码 翻译缓存 test eax, 1 test eax, 1 jeq jeq vEPC add ebx, 18 call END_BB 查找下一个 movecx, [ebx] call END_BB mov [ecx], eax add ebx, 18 ret movecx, [ebx] mov [ecx], eax call HANDLE_RET eax == 0
控制流的控制 客户代码 翻译缓存 test eax, 1 test eax, 1 jeq jeq vEPC add ebx, 18 jmp movecx, [ebx] call END_BB mov [ecx], eax add ebx, 18 ret movecx, [ebx] mov [ecx], eax call HANDLE_RET eax == 0
控制流的控制 客户代码 翻译缓存 test eax, 1 test eax, 1 jeq jeq add ebx, 18 jmp movecx, [ebx] call END_BB 查找下一步 vEPC mov [ecx], eax add ebx, 18 ret movecx, [ebx] mov [ecx], eax call HANDLE_RET mov [ecx], eax call HANDLE_RET eax == 1
控制流的控制 Guest Code Translation Cache test eax, 1 test eax, 1 jeq jeq add ebx, 18 jmp movecx, [ebx] jmp vEPC mov [ecx], eax add ebx, 18 ret movecx, [ebx] mov [ecx], eax call HANDLE_RET mov [ecx], eax call HANDLE_RET eax == 1
二进制翻译存在的问题 • 翻译缓存索引数据结构 • PC(程序计数器) 在中断上的同步 • 自我修改(Self-modifying )的代码 • 将写操作转给翻译后的客户机代码[在翻译好的客户代码的写通知]
二进制翻译的其他使用 • ISA交叉翻译器 • Digital FX!32 • 优化翻译器 • H.P. Dynamo • 高级语言字节码翻译器 • Java • .NET/CLI
混合方式 • 内核代码[为内核]的二进制翻译 • 用户代码[为用户]的直接执行(陷入模拟) • U.S. Patent 6,397,242 直接执行OK? 直接执行跳转到客户机PC Yes 陷入 处理特权指令 No TC 验证 在TC中执行 调出 Translation Cache(TC)
7.3 内存虚拟化 • 背景 • 虚拟化技术 • TLB仿真 • 影子页表 • 页面保护 • 内存追踪 • 隐藏监视器 • 硬件支持的内存虚拟化 • 嵌套页表
计算机系统结构 CPU Memory MMU Controller 本地 总线 Interface 高速I/O 总线 Frame Buffer NIC Controller Bridge LAN 低速 I/O 总线 CD-ROM USB
传统地址空间 0 4GB RAM 帧缓冲器 设备 ROM 物理地址空间
传统地址空间 0 4GB 当前进程 操作系统 虚拟地址空间 0 4GB RAM 帧缓冲器 设备 ROM 物理地址空间