(1) 介绍和安装 (2) CPU 和内存虚拟化 (3) 1/0 QEMU 全虚拟化和准虚拟化 ( Para-virtulizaiton ) (4) 1/0 PCI/PCIe 设备直接分配和 SR-IOV (5) libvirt 介绍 (6) Nova 通过 libvirt 管理 QEMU/KVM 虚机 (7) 快照 ( snapshot ) (8) 迁移 ( migration ) 1. 为什么需要 CPU 虚拟化X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件。x86 架构提供四个特权级别给操作系统和应用程序来访问硬件。Ring 是指 CPU 的运行级别,Ring0 是最高级别,Ring1 次之,Ring2 更次之......就 Linux+x86 来说,讨算机系统窝用户和操作系统的奮Ring3应用程序的代码运行在最低运行级别上 ring3 上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU 的运行级别会发生从 ring3 到 ringO 的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从 ringO 返回 ring3。这个过程也称作用户态和内核态的切换。那么,虚拟化在这里就遇到了一个难题,因为宿主操作系统是工作在 ringO 的,客户操作系统就不能也在 ringO 了,但是它不知道这一点,以前执行什么指令,现在还是执行什么指令,但是没有执行权限是会出错的。所以这时候虚拟机管理程序(VMM)需要避免这件事情发生。虚机怎么通过 VMM 实现 GuestCPU 对硬件的访问,根据其原理不同有三种实现技术:1. 全虚拟化2. 半虚拟化3. 硬件辅助的虚拟化1.1 基于二进制翻译的全虚拟化(FullVirtualizationwithBinaryTranslation)GuestOSVMDirectExecutionofUserRequestsHostComputerSystemHardwareBinaryTranslationofOSRequestsUserApps客户操作系统运行在 Ring1,它在执行特权指令时,会触发异常(CPU 的机制,没权限的指令会触发异常),然后 VMM 捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。但是这个性能损耗,就非常的大,简单的一条指令,执行完,了事,现在却要通过复杂的异常处理过程。异常"捕获(trap)-翻译(handie)-模拟(emulate”) 过程:GuestOSexecuteaprivilegedinstructionHardwareexception(trap)e.g.generalprotectionfauhVMM'sexe&ptloribaridleremulatethephviSegedinytru 匚廿 on1.2.超虚拟化(或者半虚拟...