硬件虚拟化技术浅析

上传人:dus****log 文档编号:76791848 上传时间:2022-04-19 格式:DOCX 页数:11 大小:17.19KB
收藏 版权申诉 举报 下载
硬件虚拟化技术浅析_第1页
第1页 / 共11页
硬件虚拟化技术浅析_第2页
第2页 / 共11页
硬件虚拟化技术浅析_第3页
第3页 / 共11页
资源描述:

《硬件虚拟化技术浅析》由会员分享,可在线阅读,更多相关《硬件虚拟化技术浅析(11页珍藏版)》请在装配图网上搜索。

1、硬件虚拟化技术浅析=目录1 硬件虚拟化技术背景2 KVM的内部实现概述2.1 KVM的抽象对象2.2 KVM的vcpu2.3 KVM的IO虚拟化2.3.1 IO的虚拟化2.3.2 VirtIO3 KVM-IO可能优化地方3.1 Virt-IO的硬盘优化3.2 普通设备的直接分配(Direct Assign)3.3 普通设备的复用=1 硬件虚拟化技术背景硬件虚拟化技术通过虚拟化指令集、MMU(Memory Map Unit)以及IO来运行不加修改的操作系统。传统的处理器通过选择不同的运行(Ring 特权)模式,来选择指令集的范围,内存的寻址方式,中断发生方式等操作。在原有的Ring特权等级的基础

2、上,处理器的硬件虚拟化技术带来了一个新的运行模 式:Guest模式1,来实现指令集的虚拟化。当切换到Guest模式时,处理器提供了先前完整的特权等级,让Guest操作系统可以不加修改的运行 在物理的处理器上。Guest与Host模式的处理器上下文完全由硬件进行保存与切换。此时,虚拟机监视器(Virtual Machine Monitor)通过一个位于内存的数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统的交互,以完成整个平台的虚拟化。传统的操作系统通过硬件MMU完成虚拟地址到物理地址的映射。在虚拟化环境中,Guest的虚拟地址需要更多一层的转换,才能放

3、到地址总线上: Guest虚拟地址 - Guest物理地址 - Host物理地址 | | MMU1 MMU2其中MMU1可以由软件模拟(Shadow paging中的vTLB)或者硬件实现(Intel EPT、AMD NPT)。MMU2由硬件提供。系统的IO虚拟化技术,通常是VMM捕捉Guest的IO请求,通过软件模拟的传统设备将其请求传递给物理设备。一些新的支持虚拟化技术的设备,通过硬件技术(如Intel VT-d),可以将其直接分配给Guest操作系统,避免软件开销。1X86处理器的生产厂商有自己的称谓,比如英特尔将Guest模式称为non-root operation,与之相对的是roo

4、t operation,本文称为host模式。2 KVM的内部实现概述KVM是Linux内核的一个模块,基于硬件虚拟化技术实现VMM的功能。该模块的工作主要是通过操作与处理器共享的数据结构来实现指令集以及MMU的虚 拟化,捕捉Guest的IO指令(包括Port IO和mmap IO)以及实现中断虚拟化。至于IO设备的软件模拟,是通过用户程序QEMU来实现的。QEMU负责解释IO指令流,并将其请求换成系统调用或者库函数传 给Host操作系统,让Host上的驱动去完成真正的IO操作。她们之间的关系如下图所示: +-+ +-+ | Qemu | | | | | | | | +-+ +-+| | Gu

5、est | | |vHD| |vNIC| | | | |drivers |exit_reason) .case KVM_IO: handle_io(vcpu);break;case KVM_MMIO:handle_mmio(vcpu);break;.该线程同Guest的vcpu紧密相连。如果我们把线程的执行看作Guest vcpu的一部分,那么从Host的角度来看,该vcpu在三种不同的上下文中运行:Host user/Host kernel/Guest,将运行于一个更大的循环当中。该vcpu的运行逻辑如下图: Host user | Host kernel | Guest mode | |

6、| | | | | +-kvm_run(vcpu)-+ | | | | v | | | | +-vm entry-+ | | | | | v | | | | | Execute | | | | | Natively | | | | | | | | | | vm exit-+ | | | | | | | | | | | | | | Yes | | v | | | +-I/O ? | | | | | | | No | | | | | | | | | | | | | v | | | v Yes | | Signal | | +-Handle IO-Pending? | | | | | No | |

7、| +-+ | | 图 3实际上,在host上通过ps命令看到的关于vcpu这个线程的运行时间正是这三种上下文的总和。2.3 KVM的IO虚拟化2.3.1 IO的虚拟化传统系统中,设备都直接或间接的挂在PCI总线上。PCI设备通过PCI配置空间以及设备地址空间接收操作系统的驱动请求和命令,通过中断机制通知反馈操 作系统。配置空间和设备地址空间都将映射到处理器Port空间或者操作系统内存空间中,所以设备的软件模拟需要VMM将相关的Guest PIO和MMIO请求截获,通过硬件虚拟化提供的机制将其传送给软件。模拟软件处理完后再通过VMM提供的虚拟中断机制反馈Guest。如下图所示: +-+ | +

8、-+ | | | PCI config | +-+ | | +-+| driver | | | +-+| | | | | Device memory| +-+ | | +-+ | | | | +-|-|-+ | | vINTR via VMM PIO/MMIO via VMM| +-+ v | +-+ | +-+ +-+ | | | PCI | | Device | | | | config | | memory | | Virtual Device | +-+ +-+ | +-+ | v +-+ |host driver | +-+ 图 4虚拟设备的软件逻辑放在用户层也可以放在内核中。完全的

9、虚拟设备模拟,可以处理在Guest中不加修改的驱动请求。通常这将消耗大量的处理器cycle去 模拟设备。如果可以修改或者重写Guest的驱动代码,那么虚拟设备和驱动之间的IO接口可以根据虚拟化的特性重新定义为更高层更加高效的接口,如下图所 示: +-+ | | | +-+ | | |para-driver| | | +-+ | +-+ | | new I/O interface via VMM v +-+ |Virtual | |device | +-+ | v +-+ |host driver | +-+ 图 5KVM的virtio正是通过这种方式提供了高速IO通道。除了软件模拟,现有的硬件

10、虚拟化技术还可以将一些支持虚拟化技术的新兴硬件直接分配给Guest。除了需要支持虚拟化技术的硬件(可以发起 remmappable的MSI中断请求),设备的直接分配一般还需要主板上的芯片以及CPU支持,比如英特尔的VT-d技术。支持虚拟化技术的硬件平台 主要做两件事,一个是DMA Remapping,将DMA请求中的Guest的物理地址映射到Host的物理地址,另一个是中断Remapping,将能remappable的中断 请求根据由VMM设置,位于内存的IRT(Interrupt Remapping Table)发送到指定的vcpu上。PC平台上,通常北桥(或者类似结构的root-compl

11、ex)连接着CPU、内存以及外设。用于DMA Remapping和中断Remapping的硬件逻辑位于北桥中。如下所示: +-+ |cpu0, cpu1.| +-+ | - System Bus | | v v +-+ | North Bridge | | | +-+ | +-+ | Memory | | | vt-d | | +-+ | +-+ | +-+ | | v v +-+ +-+ | PCI-e | | South | PCI legacy devices. | device | | Bridge | +-+ +-+ 图 6目前,只有支持MSI的PCI/PCI-e设备才能直接分配给G

12、uest。其中PCI-e设备可以直接与北桥相连或者桥连,然后单独分配给一个 Guest。在一个桥后的所有的桥连PCI设备只能作为一个整体分配给一个Guest。KVM在硬件虚拟化的平台上支持PCI-e/PCI设备的直接分 配。2.3.2 VirtIOVirtIO为Guest和Qemu提供了高速的IO通道。Guest的磁盘和网络都是通过VirtIO来实现数据传输的。由于Guest的地址空间 mmap到Qemu的进程空间中,VirtIO以共享内存的数据传输方式以及半虚拟化(para-virtualized)接口为Guest提供了高效的 硬盘以及网络IO性能。其中,KVM为VirtIO设备与Guest

13、的VirtIO驱动提供消息通知机制,如下图所示: +-+ | Qemu | | +-+ | +-+ | | VirtIO | | | +-+ | | | Device | | | | VirtIO | Guest | | +-+ | | | Driver | | +-|-+ | +-+ | | | +-|-+ irqfd | | PIO | | fd_vm | |ioeventfd | |vInterrupt -|-|-|-|- v | v | +-+ +-+ Host | eventfd | KVM.ko | kernel | core | | | +-+ +-+ 图 7如图所示,Guest

14、 VirtIO驱动通过访问port空间向Qemu的VirtIO设备发送IO发起消息。而设备通过读写irqfd或者IOCTL fd_vm通知Guest驱动IO完成情况。irqfd和ioeventfd是KVM为用户程序基于内核eventfd机制提供的通知机制,以实现异步的 IO处理(这样发起IO请求的vcpu将不会阻塞)。之所以使用PIO而不是MMIO,是因为KVM处理PIO的速度快于MMIO。3 KVM-IO可能优化地方3.1 Virt-IO的硬盘优化从图1中可以看到,Guest的IO请求需要经过Qemu处理后通过系统调用才会转换成Host的IO请求发送给Host的驱动。虽然共享内存以及半虚拟化

15、接口的通信协议减轻了IO虚拟化的开销,但是Qemu与内核之间的系统模式切换带来的开销是避免不了的。目前Linux内核社区中的vhost就是将用户态的Virt-IO网络设备放在了内核中,避免系统模式切换以及简化算法逻辑最终达到IO减少延迟以及增大吞吐量的目的。如下图所示: +-+ | +-+ | | | VirtIO | Guest | | | Driver | | | +-+-+ | +-|-+ PIO | | | | vInterrupt -|-|- v | +-+ +-+ Host | Vhost | KVM.ko | kernel | net | | | +-+ +-+ | | +-v-

16、+ | NIC | | Driver | +-+ 图 8目前KVM的磁盘虚拟化还是在用户层通过Qemu模拟设备。我们可以通过vhost框架将磁盘的设备模拟放到内核中达到优化的效果。3.2 普通设备的直接分配(Direct Assign)如前文所述,目前只有特殊的PCI设备才能直接分配给相应的Guest,即VMM-bypass,避免额外的软件开销。我们可以在KVM中软实现DMA以及中断的remapping功能,然后将现有的普通设备直接分配给Guest。如下图所示: +-+ | Guest | | +-+ | +-| | Driver | | | | +-+ | | +-+ D | | | M |

17、 DMA Req.| | vINTR A | | | | +-|-|-+ O | | v KVM | | p | | +-+ | e | | | DMA remmapping | | r | | | | | a | | | INTR remmapping | | t | | +-+ | i | +-|-|-+ o | | | INTR n | v | | +-+ +-| Deivce | +-+ 图 9这将大大减少Guest驱动同物理设备之间的路径(省去了KVM的涉入),去掉了虚拟设备的模拟逻辑,不过IO性能的提高是以增加KVM的逻辑复杂 度的代价换来的。此时,IO的性能瓶颈从Qemu/KVM

18、转移到物理设备,但是IO的稳定性、安全性将会更加依赖于KVM的remapping逻辑实现。3.3 普通设备的复用在普通设备的直接分配的基础上,我们甚至可以在多个Guest之间复用设备,好比m个进程跑在n个处理器上一样(n m)。比如将一个硬盘分成多个区,每一个分区作为一个块设备直接分配给Guest;或者直接将n个网卡分配给m个Guest(n | | | -+ | +-+ | | | | +-+ | +-+ | |Guest |-| | +-+ | +-+ | +-+ | Device | | | | | Scheduler| | +-+ | +-+ +-+ | |Guest |-| |-+ |

19、 +-+ | +-+ | | | +-v-+ | | Current-+-+ DM | | +-+ | Context | +-+-| NIC | | +-+ | +-+ | | 图 10其中,Device Modle(DM)实现前文提到的remapping逻辑,Device Scheduler用于选择和切换设备上下文实现物理设备的复用。在普通设备直接分配的基础上,通过对现有普通设备的复用,将会带来廉价、灵活、高效的 IO性能。与之相对的是,目前已经有支持SR-IOV的网卡,从硬件上实现复用功能,支持多个(静态,即最大数目是内置的)虚拟的PCI网卡设备,价格昂 贵,且受到一个网口总带宽有限的限

20、制(软件复用技术,可以复用多个网卡,进而提高系统总的带宽)。参考:2代码 Linux-2.6/virt/kvm/*, arch/x86/kvm/*, drivers/virtio/*, drivers/block/virtio_blk.c, drivers/vhost/*3手册 Intel Virtualization Technology for Directed I/O4手册 Intel 64 and IA-32 Architectures Software Developers Manual 3B.5论文 Towards Virtual Passthrough I/O on Commodity Devices. 2008.6论文 kvm: the Linux Virtual Machine Monitor. 2007.7论文 virtio: Towards a De-Facto Standard For Virtual I/O Devices. 20088论文 High Performance Network Virtualization with SR-IOV. 2010.9论文 QEMU, a Fast and Portable Dynamic Translator. 2005.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!