_range函數來做內存映射;
[0121]生成組件2122:其用于用mknod命令為所述內核模塊生成對應的字符設備文件;
[0122]第二獲取組件2123:其用于使用open函數打開/dev/mem文件,獲取文件句柄;
[0123]第二傳遞組件2124:其用于將包括所述文件句柄的映射信息傳給mmap函數,獲取預留內存的虛擬地址;
[0124]第二分配組件2125:其用于通過所述虛擬地址訪問為虛擬機分配的預留內存。
[0125]其中,驅動模塊23,包括:
[0126]驅動組件231:其用于根據所述虛擬機的操作系統創建一個空的驅動,在所述驅動中加載的驅動函數里循環調用用于申請指定地址區間內的物理內存的函數,直至將指定地址區間內的物理內存都申請完,結束循環。
[0127]一種虛擬機PCI設備透傳系統,還包括:加載組件25:其用于在PCI設備驅動加載之前加載虛擬機中安裝的所述驅動。
[0128]一種虛擬機PCI設備透傳系統,還包括:調整組件26:其用于建立所述映射關系之前,調整虛擬機內存布局,使所述待映射內存在虛擬中的物理內存GPA和宿主機的物理內存HPA保持一致。
[0129]用本發明實施例的裝置進行虛擬機PCI設備透傳的具體過程與前述方法實施例類似,此處不再贅述。綜上所述,本發明實施例通過宿主機為虛擬機分配預留內存;將虛擬機的待映射內存和宿主機的預留內存按照1:1建立映射關系;虛擬機中安裝驅動申請虛擬機中固定內存中的空閑內存;加載PCI設備驅動,PCI設備根據所述映射關系發起DMA操作,直接訪問宿主機內存。解決在沒有VT-d/1MMU的CPU主板上無法透傳PCI設備到QEMU/KVM虛擬機的問題,使PCI設備直接發起DMA操作,直接訪問宿主機內存,這可以大大降低PCI設備透傳的成本,并為硬件選型提供更多選擇。
[0130]本領域普通技術人員可以理解:附圖只是一個實施例的示意圖,附圖中的模塊或流程并不一定是實施本發明所必須的。
[0131]通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到本發明可借助軟件加必需的通用硬件平臺的方式來實現。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在存儲介質中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例或者實施例的某些部分所述的方法。
[0132]本說明書中的各個實施例均采用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置或系統實施例而言,由于其基本相似于方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置及系統實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解并實施。
[0133]以上所述,僅為本發明較佳的【具體實施方式】,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應該以權利要求的保護范圍為準。
【主權項】
1.一種虛擬機PCI設備透傳方法,其特征在于,包括: 宿主機為虛擬機分配預留內存; 將虛擬機的待映射內存和宿主機的預留內存按照1:1建立映射關系; 虛擬機中安裝驅動申請虛擬機中固定內存中的空閑內存; 加載PCI設備驅動,PCI設備根據所述映射關系發起DMA操作,直接訪問宿主機內存。2.根據權利要求1所述的一種虛擬機PCI設備透傳方法,其特征在于,所述宿主機為虛擬機分配預留內存包括: 宿主機在QEMU中通過_ap/dev/mem為虛擬機分配所述預留內存;或, 宿主機創建內核模塊為虛擬機分配所述預留內存。3.根據權利要求2所述的一種虛擬機PCI設備透傳方法,其特征在于,所述宿主機在QEMU中通過_ap/dev/mem為虛擬機分配所述預留內存,包括: 宿主機使用open函數打開/dev/mem文件,獲取文件句柄; 將包括所述文件句柄的映射信息傳給mmap函數,獲取預留內存的虛擬地址; 通過所述虛擬地址訪問為虛擬機分配的預留內存。4.根據權利要求2所述的一種虛擬機PCI設備透傳方法,其特征在于,所述宿主機創建內核模塊為虛擬機分配所述預留內存,包括: 宿主機創建內核模塊,為所述內核模塊建立mmap操作調用內核的remap_pfn_range函數來做內存映射; 用mknod命令為所述內核模塊生成對應的字符設備文件; 使用open函數打開/dev/mem文件,獲取文件句柄; 將包括所述文件句柄的映射信息傳給mmap函數,獲取預留內存的虛擬地址; 通過所述虛擬地址訪問為虛擬機分配的預留內存。5.根據權利要求1至4任一項所述的一種虛擬機PCI設備透傳方法,其特征在于,所述虛擬機中安裝驅動申請虛擬機中固定內存中的空閑內存包括,根據所述虛擬機的操作系統創建一個空的驅動,在所述驅動中加載的驅動函數里循環調用用于申請指定地址區間內的物理內存的函數,直至將指定地址區間內的物理內存都申請完,結束循環。6.根據權利要求5所述的一種虛擬機PCI設備透傳方法,其特征在于,還包括,在PCI設備驅動加載之前加載虛擬機中安裝的所述驅動。7.根據權利要求6所述的一種虛擬機PCI設備透傳方法,其特征在于,建立所述映射關系之前,包括:調整虛擬機內存布局,使所述待映射內存在虛擬中的物理內存GPA和宿主機的物理內存HPA保持一致。8.一種虛擬機PCI設備透傳系統,其特征在于,包括: 預留模塊:其用于宿主機為虛擬機分配預留內存; 映射模塊:其用于將虛擬機的待映射內存和宿主機的預留內存按照1:1建立映射關系; 驅動模塊:其用于在虛擬機中安裝驅動申請虛擬機中固定內存中的空閑內存; 透傳模塊:其用于加載PCI設備驅動,PCI設備根據所述映射關系發起DMA操作,直接訪問宿主機內存。9.根據權利要求8所述的一種虛擬機PCI設備透傳系統,其特征在于,所述預留模塊,包括: 第一預留模塊:其用于使宿主機在QEMU中通過_ap/dev/mem為虛擬機分配所述預留內存;或, 第二預留模塊:其用于使宿主機創建內核模塊為虛擬機分配所述預留內存。10.根據權利要求9所述的一種虛擬機PCI設備透傳系統,其特征在于,所述第一預留豐吳塊,包括: 第一獲取組件:其用于使宿主機使用open函數打開/dev/mem文件,獲取文件句柄; 第一傳遞組件:其用于將包括所述文件句柄的映射信息傳給mmap函數,獲取預留內存的虛擬地址; 第一分配組件:其用于通過所述虛擬地址訪問為虛擬機分配的預留內存。11.根據權利要求9所述的一種虛擬機PCI設備透傳系統,其特征在于,所述第二預留豐吳塊,包括: 創建組件:其用于使宿主機創建內核模塊,為所述內核模塊建立_ap操作調用內核的remap_pfn_range函數來做內存映射; 生成組件:其用于用mknod命令為所述內核模塊生成對應的字符設備文件; 第二獲取組件:其用于使用open函數打開/dev/mem文件,獲取文件句柄; 第二傳遞組件:其用于將包括所述文件句柄的映射信息傳給mmap函數,獲取預留內存的虛擬地址; 第二分配組件:其用于通過所述虛擬地址訪問為虛擬機分配的預留內存。12.根據權利要求8至11任一項所述的一種虛擬機PCI設備透傳系統,其特征在于,所述驅動t吳塊,包括: 驅動組件:其用于根據所述虛擬機的操作系統創建一個空的驅動,在所述驅動中加載的驅動函數里循環調用用于申請指定地址區間內的物理內存的函數,直至將指定地址區間內的物理內存都申請完,結束循環。13.根據權利要求12所述的一種虛擬機PCI設備透傳系統,其特征在于,還包括:加載組件:其用于在PCI設備驅動加載之前加載虛擬機中安裝的所述驅動。14.根據權利要求13所述的一種虛擬機PCI設備透傳系統,其特征在于,還包括:調整組件:其用于建立所述映射關系之前,調整虛擬機內存布局,使所述待映射內存在虛擬中的物理內存GPA和宿主機的物理內存HPA保持一致。
【專利摘要】本發明實施例提供了一種虛擬機PCI設備透傳方法和系統。本發明實施例通過宿主機為虛擬機分配預留內存;將虛擬機的待映射內存和宿主機的預留內存按照1:1建立映射關系;虛擬機中安裝驅動申請虛擬機中固定內存中的空閑內存;加載PCI設備驅動,PCI設備根據所述映射關系發起DMA操作,直接訪問宿主機內存。解決在沒有VT-d/IOMMU的CPU/主板上無法透傳PCI設備到QEMU/KVM虛擬機的問題,使PCI設備直接發起DMA操作,直接訪問宿主機內存。這可以大大降低PCI設備透傳的成本,并為硬件選型提供更多選擇。
【IPC分類】G06F9/455, G06F13/10
【公開號】CN105159742
【申請號】CN201510391244
【發明人】吳光椿
【申請人】北京星網銳捷網絡技術有限公司
【公開日】2015年12月16日
【申請日】2015年7月6日