[发明专利]一种虚拟机PCI设备透传方法和系统在审
申请号: | 201510391244.1 | 申请日: | 2015-07-06 |
公开(公告)号: | CN105159742A | 公开(公告)日: | 2015-12-16 |
发明(设计)人: | 吴光椿 | 申请(专利权)人: | 北京星网锐捷网络技术有限公司 |
主分类号: | G06F9/455 | 分类号: | G06F9/455;G06F13/10 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 黄志华 |
地址: | 100036 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 虚拟机 pci 设备 方法 系统 | ||
技术领域
本发明涉及媒体通信技术领域,尤其涉及一种虚拟机PCI设备透传方法和系统。
背景技术
随着QEMU/KVM虚拟化技术应用越来越广泛,在许多场合,模拟的USB、显卡、网卡等外设不管在性能还是功能上都已经不能满足日益增长的需求。比如图形工作站对显卡的性能要求很高,而QEMU(QuickEmulator)模拟的显卡不能做硬件加速,根本无法满足要求。解决这个问题常用的一种办法是把宿主机上的PCI设备(比如显卡)直接分配给某个虚拟机使用,这种技术叫PCI设备透传,它很好地解决了虚拟环境下外设的性能问题。
现有PCI(PeripheralComponentInterconnect)外设互联设备透传方案都是基于英特尔VT-d(IntelVirtualizationTechnologyforDirectedI/O)或者IOMMU(input/outputmemorymanagementunit)来实现。支持VT-d或IOMMU的CPU和主板成本普遍较高,而且相当一部分CPU和主板并不支持这项技术,给硬件选型带来较大困难。在QEMU(QuickEmulator)/KVM(KernelVirtualMachine)虚拟机中实现PCI设备透传,需要处理好以下四个方面的问题:
1.PCI配置空间映射;
2.PCI内存及I/O资源映射;
3.PCIIRQ中断映射;
4.DMA(直接内存访问)操作。
对前两个问题,可以直接将宿主机中该PCI设备对应的资源文件用mmap方式直接映射到虚拟机地址空间中即可。对于第3个问题,可以在内核中使用一个内核线程来截获中断,然后将中断注入到虚拟机中。已有的各种实现在这三点上也已经比较成熟。
但是对于PCI透传设备的DMA操作是PCI设备透传的一个难点。
从附图1可以看到QEMU/KVM中,从虚拟机物理内存GPA到宿主机物理内存HPA需要经过两层转换:一次线性映射和一次MMU映射,才能找到对应的宿主机物理内存HPA。这造成的结果是GPA和HPA几乎不可能是1:1对应的。
虚拟机vCPU在访问内存时,一样存在这个地址转换的问题,它通过扩展页表(EPT)技术从硬件层面上透明的将GPA转换到HPA。
而PCI透传设备的直接内存存取DMA(DirectMemoryAccess)操作没有EPT的支持。虚拟机的设备驱动申请到的DMA内存是虚拟机的物理内存GPA,它通过写该设备的特定寄存器将这段内存的起始地址和大小告知该设备,然后该设备就会用这个地址GPA直接去访问宿主机的物理内存,只有GPA和HPA是1:1对应的情况下,透传的PCI设备才能访问到正确的地址,否则就会产生错误。现有的PCI设备透传方案都是基于VT-d/IOMMU技术来解决这个问题,如附图2所示。
VT-d和IOMMU是类似的IO硬件虚拟化技术,VT-d属于Intel,IOMMU则属于AMD。这项技术的作用和EPT类似,都是用来将GPA转换为HPA,但服务对象是外设,而不是vCPU。
VT-d/IOMMU技术的原理是在外设和宿主机物理内存中间插入了一个IOMMU硬件单元,在虚拟化环境中,透传的PCI设备发起DMA操作时,GPA经过IOMMU转换后,变成正确的HPA。IOMMU的地址转换表由QEMU/KVM在虚拟机初始化时建立。
上述现有技术中的的缺点为:
1.虚拟化成本高。支持VT-d或IOMMU的CPU或主板普遍成本较高。
2.硬件选型比较困难。相当一部分CPU和主板并不支持VT-d或IOMMU。
3.虽然IOMMU硬件地址转换效率很高,但因为多了一次内存地址转换,对性能不可避免会有一定的影响。
发明内容
本发明的实施例提供了一种虚拟机PCI设备透传方法和系统,本发明提供了如下方案:
宿主机为虚拟机分配预留内存;
将虚拟机的待映射内存和宿主机的预留内存按照1:1建立映射关系;
虚拟机中安装驱动申请虚拟机中固定内存中的空闲内存;
加载PCI设备驱动,PCI设备根据所述映射关系发起DMA操作,直接访问宿主机内存。
根据本发明的上述方法,所述宿主机为虚拟机分配预留内存包括:
宿主机在QEMU中通过mmap/dev/mem为虚拟机分配所述预留内存;或,
宿主机创建内核模块为虚拟机分配所述预留内存。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京星网锐捷网络技术有限公司,未经北京星网锐捷网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510391244.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种虚拟机创建的方法及装置
- 下一篇:大棚辐射供暖结构