文档介绍:硬件虚拟化技术浅析
====================================
目录
1 硬件虚拟化技术背景
2 KVM内部实现概述
KVM抽象对象
KVMvcpu
KVMIO虚拟化
IO虚拟化
VirtIO
3 KVM-IO可能优化地方
Virt-IO硬盘优化
一般设备直接分配(Direct Assign)
一般设备复用
===================================
1 硬件虚拟化技术背景
硬件虚拟化技术经过虚拟化指令集、MMU(Memory Map Unit)和IO来运行不加修改操作系统。
传统处理器经过选择不一样运行(Ring 特权)模式,来选择指令集范围,内存寻址方法,中止发生方法等操作。在原有Ring特权等级基础上,处理器硬件虚拟化技术带来了一个新运行模 式:Guest模式[1],来实现指令集虚拟化。当切换到Guest模式时,处理器提供了先前完整特权等级,让Guest操作系统能够不加修改运行 在物理处理器上。Guest和Host模式处理器上下文完全由硬件进行保留和切换。此时,虚拟机监视器(Virtual Machine Monitor)经过一个在内存数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统交互,以完成整个平台虚拟化。
传统操作系统经过硬件MMU完成虚拟地址到物理地址映射。在虚拟化环境中,Guest虚拟地址需要更多一层转换,才能放到地址总线上:
Guest虚拟地址 -> Guest物理地址 -> Host物理地址
^ ^
| |
MMU1 MMU2
其中MMU1能够由软件模拟(Shadow paging中vTLB)或硬件实现(Intel EPT、AMD NPT)。MMU2由硬件提供。
系统IO虚拟化技术,通常是VMM捕捉GuestIO请求,经过软件模拟传统设备将其请求传输给物理设备。部分新支持虚拟化技术设备,经过硬件技术(如Intel VT-d),能够将其直接分配给Guest操作系统,避免软件开销。
[1]X86处理器生产厂商有自己称谓,比如英特尔将Guest模式称为non-root operation,和之相正确是root operation,本文称为host模式。
2 KVM内部实现概述
KVM是Linux内核一个模块,基于硬件虚拟化技术实现VMM功效。该模块工作关键是经过操作和处理器共享数据结构来实现指令集和MMU虚 拟化,捕捉GuestIO指令(包含Port IO和mmap IO)和实现中止虚拟化。至于IO设备软件模拟,是经过用户程序QEMU来实现。QEMU负责解释IO指令流,并将其请求换成系统调用或库函数传 给Host操作系统,让Host上驱动去完成真正IO操作。她们之间关系以下图所表示:
+--------------+ +--------+
| Qemu | | |
| | | |
| +---+ +----+| | Guest |
| |vHD| |vNIC||<-----+ | |
| +---+ +----+| | | |
+--------------+ | +--------+
^ | ^
| syscall |IO stream |
| via FDs | |
+----|----------------|------------|--------+
|