輸入/輸出存儲器管理單元(IOMMU)可以提供在支持直接存儲器存取(DMA)的裝置(例如,顯卡、網(wǎng)卡、聲卡等)與主存儲器之間的通信。IOMMU可以將從支持DMA的裝置接收的直接存儲器存取請求中標識的虛擬存儲器地址變換為該主存儲器的物理地址。IOMMU可以被配置為使得在不經(jīng)由中央處理單元(CPU)進行路由的情況下,存儲器存取可提供給支持DMA的裝置。例如,IOMMU可以從支持DMA的裝置處接收標識出虛擬存儲器地址的存儲器存取請求,并且可以在將虛擬存儲器地址映射到物理存儲器地址的頁表中查找虛擬存儲器地址。接著,存儲在物理存儲器地址中的信息可由支持DMA的裝置讀出或?qū)懭搿?/p>
示例實施方案概述
根據(jù)一些可能實施方案,一種方法可以包括通過裝置,接收標識出虛擬地址的直接存儲器存取請求。所述方法可以包括通過所述裝置,確定所述虛擬地址是否在特定虛擬地址范圍內(nèi)。所述方法可以包括通過所述裝置,基于確定所述虛擬地址是否在所述特定虛擬地址范圍內(nèi),選擇性地執(zhí)行第一動作或第二動作。所述第一動作可以包括當所述虛擬地址并不在所述特定虛擬地址范圍內(nèi)時,致使將執(zhí)行第一地址變換算法以將所述虛擬地址變換為與存儲器裝置關(guān)聯(lián)的物理地址。所述第二動作可以包括當所述虛擬地址在所述特定虛擬地址范圍內(nèi)時,致使將執(zhí)行第二地址變換算法以將所述虛擬地址變換為與所述存儲器裝置關(guān)聯(lián)的所述物理地址。所述第二地址變換算法可不同于所述第一地址變換算法。
根據(jù)一些可能實施方案,一種裝置可以包括控制器,并且所述控制器可以從外圍裝置處接收標識出虛擬地址值的存儲器存取請求。所述控制器可以基于存儲在可由所述控制器存取的存儲器中的信息,確定所述虛擬地址值是否包括在特定虛擬地址值范圍中。所述控制器可以基于確定所述虛擬地址值是否包括在所述特定虛擬地址值范圍中,選擇性地執(zhí)行第一動作或第二動作。所述控制器可以在所述虛擬地址值并未包括在所述特定虛擬地址值范圍中時執(zhí)行所述第一動作。所述第一動作可以包括致使將執(zhí)行第一地址變換算法以將所述虛擬地址值變換為標識出存儲器裝置中的存儲器位置的物理地址值。所述控制器可以在所述虛擬地址值包括在所述特定虛擬地址值范圍中時執(zhí)行所述第二動作。所述第二動作可以包括致使將執(zhí)行第二地址變換算法以將所述虛擬地址值變換為所述物理地址值。所述第二地址變換算法可不同于所述第一地址變換算法。
根據(jù)一些可能實施方案,一種系統(tǒng)可以接收標識出虛擬地址值的存儲器存取請求。所述系統(tǒng)可以確定所述虛擬地址值是否包括在特定虛擬地址值范圍中。所述系統(tǒng)可以基于確定所述虛擬地址值是否包括在所述特定虛擬地址值范圍中,選擇性地執(zhí)行第一地址變換算法或第二地址變換算法,以便將所述虛擬地址值變換為與存儲器裝置關(guān)聯(lián)的物理地址值。所述系統(tǒng)可以在所述虛擬地址值并未包括在所述特定虛擬地址值范圍中時執(zhí)行所述第一地址變換算法。所述系統(tǒng)可以在所述虛擬地址值包括在所述特定虛擬地址值范圍中時執(zhí)行所述第二地址變換算法。所述第二地址變換算法可不同于所述第一地址變換算法。所述系統(tǒng)可以基于選擇性地執(zhí)行所述第一地址變換算法或所述第二地址變換算法,向所述存儲器裝置路由所述存儲器存取請求和標識出所述物理地址值的信息。
附圖簡述
圖1是本文所述示例實施方案的概覽的圖示;
圖2是其中可實施本文所述實施方案的示例系統(tǒng)的圖示;
圖3是用于當在虛擬化計算環(huán)境中路由直接存儲器存取請求時分配要使用的存儲器寄存器的示例過程的流程圖;
圖4A和圖4B是與圖3所示示例過程相關(guān)的示例實施方案的圖示;
圖5是用于在虛擬化計算環(huán)境中路由直接存儲器存取請求的示例過程的流程圖;
圖6A-6E是與圖5所示示例過程相關(guān)的示例實施方案的圖示;以及
圖7A和圖7B是與圖5所示示例過程相關(guān)的另一示例實施方案的圖示。
示例實施方案詳述
以下對示例實施方案的詳細描述參考附圖。不同附圖中的相同附圖標記可以標識相同或相似的元件。
具有直接存儲器地址(DMA)能力的外圍裝置可以通過向輸入/輸出存儲器管理單元(IOMMU)提供存儲器存取請求來在虛擬化計算環(huán)境中操作。IOMMU可以將存儲器存取請求中標識的虛擬地址變換為與主存儲器區(qū)塊關(guān)聯(lián)的物理地址。以此方式,IOMMU可以提供在虛擬化計算環(huán)境中操作的外圍裝置與主存儲器之間的通信。然而,由于IOMMU執(zhí)行地址變換算法所需要的計算能力的量以及執(zhí)行各種其它IOMMU過程所需要的計算能力的量,經(jīng)由IOMMU路由存儲器存取請求可能是緩慢和/或昂貴的。
為了加速路由存儲器存取請求,可以從IOMMU處理中排除某些請求。例如,可以從IOMMU處理中排除標識出與用于刷新顯示裝置的像素的幀緩沖器關(guān)聯(lián)的地址的請求。然而,這種排除產(chǎn)生安全問題,并且可能無法提供在虛擬化計算環(huán)境中操作外圍裝置所必需的存儲器地址變換。本文所述實施方案提供一種用于在滿足某些條件時經(jīng)由至主存儲器的快速路線來路由存儲器存取請求和用于在并未滿足這些條件時經(jīng)由緩慢路線來路由存儲器存取請求的機制。兩種路線都提供了存儲器地址變換,并且因此允許外圍裝置在虛擬化計算環(huán)境中操作,同時提高外圍裝置性能。
圖1是本文所述示例實施方案的概覽100的圖示。如圖1所示,支持DMA的裝置(例如,外圍裝置)可以將標識出虛擬地址的DMA請求提供給路由控制器。路由控制器可以包括做出路由決策以確定DMA請求將是經(jīng)由使用IOMMU來處理請求的第一路線還是不使用IOMMU來處理請求的第二路線來路由的裝置。路由控制器可以分析請求,以便確定一或多個條件是否得到滿足。例如,路由控制器可以確定是否啟用經(jīng)由第二路線來進行的路由、虛擬地址是否在要經(jīng)由第二路線進行路由的虛擬地址范圍內(nèi)、是否允許請求存取類型(例如,讀出存取、寫入存取等等),等等。路由控制器可以使用一組分配的寄存器執(zhí)行這個分析。
如進一步在圖1中示出,如果條件并未滿足,那么路由控制器可以經(jīng)由第一路線路由DMA請求。第一路線可以包括IOMMU,和/或可以包括使用第一地址變換算法處理存儲器存取請求,以便將虛擬地址變換為與主存儲器關(guān)聯(lián)的物理地址。在執(zhí)行地址變換后,IOMMU可以將直接存儲器存取請求(包括標識出物理地址的信息)路由到存儲器控制器來路由到主存儲器。
另一方面,如果條件得到滿足,那么路由控制器可以經(jīng)由第二路線路由DMA請求。第二路線可不包括IOMMU,和/或可以包括使用第二地址變換算法處理存儲器存取請求,第二地址變換算法不同于(并且快于)第一地址變換算法。在這種情況下,路由控制器可以使用一組分配的寄存器來從虛擬地址確定物理地址,并且可以使用物理地址將DMA請求路由到存儲器控制器來路由到主存儲器。
第二地址變換算法可能不如第一地址變換算法復雜,并且相較第一地址變換算法,可更快地執(zhí)行。另外或替代地,第二路線可以排除在第一路線上由IOMMU執(zhí)行的一些處理。因此,相較第一路線,第二路線可更快地將DMA請求提供給主存儲器。以此方式,路由控制器可為在虛擬化計算環(huán)境中操作的支持DMA的裝置提供增強性能,同時還通過分析DMA請求來提供增強的安全性。
圖2是其中可實施本文所述實施方案的示例系統(tǒng)200的圖示。如圖2所示,系統(tǒng)200可以包括一或多個外圍裝置210-1至210-N(N≥1)(以下共同稱為“外圍裝置210”,并且單獨稱為“外圍裝置210”)、路由控制器220、IOMMU 230、存儲器控制器240和主存儲器250。系統(tǒng)200的裝置可以經(jīng)由有線連接、無線連接等等連接。
外圍裝置210可以包括能夠不依賴于中央處理單元、經(jīng)由直接存儲器存取來存取主存儲器250的一或多個裝置。例如,外圍裝置210可以包括支持DMA的裝置,諸如圖形處理單元(GPU)、加速處理單元(APU)、網(wǎng)絡接口卡、聲卡、磁盤驅(qū)動器、主板等等。在一些實施方案中,外圍裝置210是具有對另一計算裝置的主存儲器250的遠程DMA存取的計算裝置。作為另一示例,外圍裝置210可以包括具有對另一處理器核的主存儲器250的DMA存取的處理器核。外圍裝置210可以生成DMA請求(例如,基于輸入和/或指令),并且可以將DMA請求提供給路由控制器220。
路由控制器220可以包括能夠接收、處理、路由和/或提供DMA請求的一或多個裝置。例如,路由控制器220可以從外圍裝置210處接收DMA請求,并且可以分析DMA請求以便確定將是經(jīng)由第一路線還是第二路線將DMA請求路由到存儲器控制器240和/或主存儲器250。如圖所示,第一路線可以包括IOMMU 230,并且第二路線可不包括IOMMU 230。另外或替代地,相較第二路線,第一路線可以包括更多對DMA請求的處理。因此,第一路線可以是慢于第二路線的路由。路由控制器220可以基于對DMA請求的分析向IOMMU 230或存儲器控制器240提供DMA請求。在一些實施方案中,路由控制器220從包括在DMA請求中的虛擬地址確定物理地址。另外或替代地,路由控制器220可以將DMA請求提供給另一裝置,以便確定物理地址。雖然被示出為在外圍裝置210外,但是在一些實施方案中,路由控制器220集成在外圍裝置210內(nèi)。另外或替代地,系統(tǒng)200可以包括多個路由控制器220,每者控制與一或多個外圍裝置210關(guān)聯(lián)的路由。
IOMMU 230可以包括能夠接收、處理和/或提供DMA請求的一或多個裝置。例如,IOMMU 230可以從路由控制器220處接收DMA請求,并且可以在將DMA請求提供給存儲器控制器240和/或主存儲器250前處理DMA請求。IOMMU 230可以通過例如將虛擬地址變換為物理地址、驗證是否允許DMA請求中請求的存取和/或存取類型等等,處理DMA請求。在一些實施方案中,IOMMU 230使用第一算法處理經(jīng)由第一路線來路由的DMA請求(例如,執(zhí)行地址變換),這不同于在經(jīng)由第二路線路由DMA請求時由路由控制器220和/或另一裝置使用的第二算法。在一些實施方案中,IOMMU 230經(jīng)由外圍部件互連(PCI)總線、經(jīng)由PCI-express總線等等電子地耦接到外圍裝置210。
存儲器控制器240可以包括能夠管理去往和來自主存儲器250的信息流和/或能夠從主存儲器250讀出和/或向主存儲器250寫入的一或多個裝置。例如,存儲器控制器240可從外圍裝置210經(jīng)由第一路線接收來自IOMMU 230的存儲器存取請求,或者可從外圍裝置210經(jīng)由第二路線接收來自路由控制器220的存儲器存取請求。存儲器存取請求可標識出主存儲器250的物理地址,可標識出與物理地址關(guān)聯(lián)執(zhí)行的操作(例如,讀出操作,寫入操作等等),和/或可標識出要從物理地址讀出和/或向物理地址寫入的信息(例如,數(shù)據(jù),指令等等)。存儲器控制器240可以基于存儲器存取請求從主存儲器250讀出信息或向主存儲器250寫入信息。
主存儲器250可以包括一或多個裝置,這些裝置存儲信息。例如,主存儲器250可以包括隨機存取存儲器(RAM)、只讀存儲器(ROM)等等。主存儲器250可以存儲由物理存儲器地址標識的信息。
系統(tǒng)200可以執(zhí)行本文所述一或多個過程。系統(tǒng)200可響應于執(zhí)行計算機可讀介質(zhì)(諸如主存儲器250)存儲的指令(例如,軟件指令)的處理器,執(zhí)行這些過程。計算機可讀介質(zhì)在本文中被定義為非暫時性存儲器裝置。存儲器裝置包括單個物理存儲裝置內(nèi)的存儲器空間或跨多個物理存儲裝置的存儲器空間。
在圖2中示出的裝置的數(shù)量作為示例提供。在實踐中,系統(tǒng)200可以包括除了圖2所示那些外的額外裝置、更少裝置、不同裝置或不同地布置的裝置。另外,系統(tǒng)200的一或多個裝置可以執(zhí)行被描述為由系統(tǒng)200的另外一或多個裝置執(zhí)行的一或多個功能。
圖3是用于當在虛擬化計算環(huán)境中路由直接存儲器存取請求時分配要使用的存儲器寄存器的示例過程300的流程圖。在一些實施方案中,圖3的一或多個處理方框是由路由控制器220執(zhí)行。在一些實施方案中,圖3的一或多個處理方框由獨立于或包括路由控制器220的另一裝置或裝置組(諸如外圍裝置210、IOMMU 230、存儲器控制器240和/或主存儲器250)執(zhí)行。
如圖3所示,過程300可以包括分配基址寄存器和長度寄存器,它們限定要用于做出與存儲器存取請求關(guān)聯(lián)的路由決策的虛擬地址范圍(方框310)。例如,路由控制器220可以分配基址寄存器和長度寄存器?;芳拇嫫骺梢源鎯俗R出與虛擬地址范圍關(guān)聯(lián)的基址的信息(例如,標識出虛擬地址范圍一端的基本虛擬地址),并且長度寄存器可以存儲標識出該范圍的長度的信息(例如,包括在范圍中的虛擬地址的數(shù)量)。基址和地址數(shù)量可共同地限定要由路由控制器220使用來做出與存儲器存取請求關(guān)聯(lián)的路由決策的虛擬地址范圍。
作為示例(使用簡單的地址值),假設基址寄存器標識基址1,001。另外,假設長度寄存器標識500個虛擬地址數(shù)量?;谶@兩個值,路由控制器220可以確定從1,001到1,500的500個虛擬地址范圍,包括端值。當路由控制器220接收標識出并未落在這個范圍內(nèi)的虛擬地址的存儲器存取請求時,路由控制器220可以經(jīng)由第一路線路由存儲器存取請求,第一路線包括IOMMU 230。另一方面,當路由控制器220接收標識出落在這個范圍內(nèi)的虛擬地址的存儲器存取請求時,路由控制器220可以經(jīng)由第二路線路由存儲器存取請求,第二路線并不包括IOMMU 230。
在一些實施方案中,虛擬地址范圍映射到表示主存儲器250中存儲的幀緩沖器的物理地址范圍。幀緩沖器可以存儲要在提供在顯示裝置上的像素的顏色值,并且可由外圍裝置210(例如,GPU)存取,以便周期性地刷新像素(例如,通過獲得像素的顏色值并且將該值提供給顯示裝置,顯示裝置可以基于該顏色值顯示像素)。
如進一步在圖3中示出,過程300可以包括分配要用于將虛擬地址變換為物理地址的浮動寄存器(方框320)。例如,路由控制器220可以分配浮動寄存器。浮動寄存器可以存儲標識出浮動值的信息。浮動值可由路由控制器220用來將存儲器存取請求中標識的虛擬地址變換為與主存儲器250關(guān)聯(lián)的物理地址。
在一些實施方案中,路由控制器220可以修改基址值、長度值和/或浮動值。例如,路由控制器220可以接收虛擬地址范圍和/或這個范圍的一部分與錯誤(例如,存儲器錯誤)關(guān)聯(lián)的指示。在這種情況下,路由控制器230可以修改基址和/或長度(例如,如果錯誤是與虛擬存儲器關(guān)聯(lián))。另外或替代地,路由控制器230可以修改浮動值(例如,如果錯誤是與物理存儲器關(guān)聯(lián))。路由控制器220可將這種改變通知另一裝置(例如,外圍裝置210、IOMMU 230等等)。
包括基址寄存器、長度寄存器和浮動寄存器的一組(例如,三元組)寄存器可以共同操作,以有助于路由控制器220做出與存儲器存取請求關(guān)聯(lián)的路由決策。在一些實施方案中,路由控制器220分配多組寄存器(例如,零組寄存器、四組寄存器、八組寄存器等等)。在這種情況下,可啟用或禁用多個組的整個群組(例如,使用與IOMMU 230關(guān)聯(lián)的路由控制字段)以啟用或禁用路由決策(例如,針對特定外圍裝置210、針對一組外圍裝置210、針對所有外圍裝置210等等)。
另外或替代地,如本文中結(jié)合方框330所述,可以使用啟用字段啟用或停用一組特定寄存器,以便在做出路由決策時啟用或停用對一組特定寄存器的使用(例如,針對一或多個外圍裝置210)。另外或替代地,如本文中結(jié)合方框340所述,路由控制器220可以使用存取控制字段設置對一組特定寄存器和/或一組特定外圍裝置210的存取控制。
路由控制器220可以存儲基址寄存器、長度寄存器和浮動寄存器(例如,一組寄存器)之間的關(guān)系的指示。例如,路由控制器220可以在相鄰存儲器地址處(例如,在存儲器映射的輸入/輸出(MMIO)地址頁面中)存儲一組寄存器中的每個寄存器。
如進一步在圖3中示出,過程300可以包括分配啟用字段以啟用或禁用經(jīng)由不同路線路由存儲器存取請求(方框330)。例如,路由控制器220可以分配啟用字段。在一些實施方案中,啟用字段包括在浮動寄存器中。路由控制器220可以使用啟用字段確定是否做出對存儲器存取請求的路由決策(例如,選擇多個路線中的一個路線),或者經(jīng)由單個路線轉(zhuǎn)發(fā)存儲器存取請求。例如,當啟用字段指示路由禁用時,路由控制器220可以經(jīng)由第一路線轉(zhuǎn)發(fā)存儲器存取請求,第一路線包括IOMMU 230。另一方面,當啟用字段指示路由被啟用時,路由控制器220就可分析存儲器存取請求,以便確定是通過第一路線還是不包括IOMMU 230的第二路線來路由存儲器存取請求。
在一些實施方案中,路由控制器220控制用于多個外圍裝置210的路由。在這種情況下,路由控制器220可以分配一組啟用字段,指示哪些外圍裝置210是與路由決策關(guān)聯(lián)。例如,路由控制器220可以做出對從第一組外圍裝置210接收的存儲器存取請求的路由決策,并且可不做出對從第二組外圍裝置210接收的存儲器存取請求的路由決策(例如,可以將從第二組外圍裝置210接收的請求轉(zhuǎn)發(fā)到IOMMU 230)。路由控制器220可以基于一組啟用字段中存儲的信息,確定是否做出對從特定外圍裝置210接收的存儲器存取請求的路由決策。
如進一步在圖3中示出,過程300可以包括分配存取控制字段以允許或拒絕請求存取類型(方框340)。例如,路由控制器220可以分配存取控制字段。在一些實施方案中,存取控制字段包括在浮動寄存器中。路由控制器220可以使用存取控制字段確定將是允許還是拒絕由存儲器存取請求標識的請求存取類型(例如,讀出存取、寫入存取、沒有存取等等)。
在一些實施方案中,路由控制器220控制用于多個外圍裝置210的路由。在這種情況下,路由控制器220可以分配指示是允許還是拒絕與一組外圍裝置210關(guān)聯(lián)的請求存取類型的一組存取控制字段。例如,路由控制器220可以將第一存取類型(例如,讀出存取)應用到從第一組外圍裝置210接收的存儲器存取請求,并且可以將第二存取類型(例如,讀出/寫入存取)應用到從第二組外圍裝置210接收的存儲器存取請求。路由控制器220可以基于一組存取控制字段中存儲的信息,確定存取類型是否將應用到從特定外圍裝置210接收的存儲器存取請求。
如進一步在圖3中示出,過程300可以包括驗證分配的寄存器(方框350)。例如,路由控制器220可以驗證基址寄存器、長度寄存器和/或浮動寄存器。在一些實施方案中,路由控制器220通過確保在經(jīng)由第一路線(例如,包括IOMMU 230和/或利用頁表執(zhí)行地址變換)進行路由時和在經(jīng)由第二路線(例如,并不包括IOMMU 230和/或利用存儲器重定位算法執(zhí)行地址變換)進行路由時特定虛擬地址會變換到相同物理地址,驗證分配的寄存器。
在一些實施方案中,路由控制器220重復過程300,以便設置多個虛擬地址范圍。不同范圍可與不同基址值、不同長度值、不同浮動值等等關(guān)聯(lián)。在一些實施方案中,路由控制器220針對不同范圍使用相同浮動值(例如,存儲在相同浮動寄存器中)。另外或替代地,路由控制器220可以針對不同范圍使用相同啟用字段和/或存取控制字段,或者可以針對不同范圍使用不同啟用字段和/或存取控制字段。以才此方式,路由控制器220可以設置用于存儲器存取請求(例如,與虛擬化計算環(huán)境中的圖形處理關(guān)聯(lián)的存儲器存取請求)的更快路由的非連續(xù)物理存儲器范圍。
當路由控制器220分配多個虛擬地址范圍時,路由控制器220可以通過確保由寄存器標識的多個虛擬地址范圍并不重疊,驗證分配的寄存器。例如,路由控制器220可以使用多個基址寄存器和相應的多個長度寄存器限定多個虛擬地址范圍。路由控制器220可以通過確定特定虛擬地址是否包括在多于一個范圍中,確保多個范圍并不重疊。如果路由控制器220確定多個范圍重疊,那么路由控制器220可以提供錯誤通知和/或可以重新分配一或多個寄存器,使得范圍并不重疊。
雖然圖3示出過程300的示例方框,但是在一些實施方案中,過程300包括除了圖3所繪那些外的額外方框、更少方框、不同方框或不同地布置的方框。另外或替代地,過程300的方框中的兩個或更多個可以并行執(zhí)行。
圖4A和圖4B是與圖3所示示例過程300相關(guān)的示例實施方案400的圖示。圖4A和圖4B示出用于當在虛擬化計算環(huán)境中路由直接存儲器存取請求時分配要使用的存儲器寄存器的示例。
如圖4A所示,假設路由控制器220分配基址寄存器405。如圖所示,假設基址寄存器405包括64位寄存器(例如,具有位0至63)。另外,假設保留位0至11和52至63。在一些實施方案中,保留位用于調(diào)試目的。最后,假設位12至51(例如,總共40位)用于標識具有值200的基址。
如進一步在圖4A中示出,假設路由控制器220分配長度寄存器410。如圖所示,假設長度寄存器410包括64位寄存器(例如,具有位0至63)。另外,假設保留位0至11和52至63。最后,假設位12至51(例如,總共40位)用于標識具有值500的長度。
如進一步在圖4A中示出,假設基址寄存器405和長度寄存器410中存儲的值限定虛擬地址空間415中的將經(jīng)由不包括IOMMU 230的路線進行路由的虛擬地址范圍。如由附圖標記420所示,基址標識該虛擬地址范圍的起點,其以虛擬地址200開始。如由附圖標記425所示,長度標識該范圍中包括的虛擬地址的數(shù)量。在這種情況下,在從200到699的虛擬地址范圍中包括500個虛擬地址,如由附圖標記430所示。
在一些實施方案中,虛擬地址空間415表示與主存儲器250中存儲的幀緩沖器對應的虛擬地址范圍。幀緩沖器可以存儲顯示裝置上的像素的顏色值,并且可以由GPU存取以周期性地刷新像素。通過經(jīng)由不包括IOMMU 230的較快路線路由與幀緩沖器關(guān)聯(lián)的存儲器存取請求,路由控制器220可以確保顯示刷新要比在存儲器存取請求經(jīng)由包括IOMMU 230的較慢路線進行路由時更快執(zhí)行。
如圖4B所示,假設路由控制器220分配浮動寄存器435。如圖所示,假設浮動寄存器435包括64位寄存器(例如,具有位0至63)。另外,假設保留位2至11和52至63。如由附圖標記440所示,假設位12至51(例如,總共40位)用于標識具有值400的浮動值。如由附圖標記445所示,假設位0用作啟用位,其指示了路由控制器220是否做出對存儲器存取請求的路由決策。如由附圖標記450所示,假設位1用作存取控制位,其標識了存儲器存取請求(例如,讀出存取、寫入存取、讀寫入存取等等)的允許的存取類型。
如上指示,圖4A和圖4B僅作為示例來提供。其它實例是可能的,并且可不同于關(guān)于圖4A和圖4B所述那樣。
圖5是用于在虛擬化計算環(huán)境中路由直接存儲器存取請求的示例過程500的流程圖。在一些實施方案中,圖5的一或多個處理方框是由路由控制器220執(zhí)行。在一些實施方案中,圖5的一或多個處理方框由獨立于或包括路由控制器220的另一裝置或裝置組(諸如外圍裝置210、IOMMU 230、存儲器控制器240和/或主存儲器250)執(zhí)行。
如圖5所示,過程500可以包括從外圍裝置處接收標識出虛擬地址的存儲器存取請求(方框510)。例如,路由控制器220可以從外圍裝置210處接收存儲器存取請求。在一些實施方案中,存儲器存取請求包括直接存儲器存取請求。另外或替代地,存儲器存取請求可標識出虛擬地址,諸如與外圍裝置210關(guān)聯(lián)的訪客物理地址。
在一些實施方案中,存儲器存取請求會標識出與存儲器存取請求關(guān)聯(lián)的存取類型。例如,存儲器存取請求可以包括從主存儲器250讀出信息的請求、向主存儲器250寫入信息的請求等等。另外或替代地,存儲器存取請求可標識出要從主存儲器250讀出和/或向主存儲器250寫入的信息。
如進一步在圖5中示出,過程500可以包括確定路由是否啟用(方框520)。例如,路由控制器220可以通過讀出啟用位(例如,包括在浮動寄存器中),確定路由是否啟用。啟用位的值可以提供關(guān)于路由是啟用(例如,當啟用位包括第一值、諸如1時)還是禁用(例如,當啟用位包括第二值、諸如0時)的指示。
如果路由并未啟用(方框520—否),那么過程500可以包括經(jīng)由至主存儲器的第一路線路由存儲器存取請求(方框530)。例如,如果路由控制器220確定路由并未啟用(例如,如果啟用位指示路由并未啟用),那么路由控制器220可以經(jīng)由至存儲器控制器240和/或主存儲器250的第一路線路由存儲器存取請求。
在一些實施方案中,至存儲器控制器240和/或主存儲器250的第一路線包括IOMMU 230,并且至存儲器控制器240和/或主存儲器250的第二路線并不包括IOMMU 230。另外或替代地,相較第二路線,第一路線可以包括更多對存儲器存取請求的處理(例如,通過IOMMU 230)。另外或替代地,第一路線可以具有相對于第二路線較高的至存儲器控制器240和/或主存儲器250的時延(例如,較高平均時延)。
另外或替代地,經(jīng)由第一路線來路由的存儲器存取請求可以經(jīng)由不同于與經(jīng)由第二路線來路由的存儲器存取請求關(guān)聯(lián)使用的算法的算法進行地址變換。例如,第一路線上的地址變換可以利用一或多個頁表將虛擬地址變換為物理地址。在一些實施方案中,第一路線利用多個頁表執(zhí)行地址變換。相反,第二路線上的地址變換可不利用任何頁表。而是,第二路線上的地址變換可以利用通過將某值加入另一個值(例如,虛擬地址值、基于虛擬地址值來確定的偏移值、以及基址值等等)或從另一個值中減去該值來確定物理地址的存儲器重定位算法。以此方式,第二路線上的地址變換可以快于第一路線上的地址變換(例如,因為存儲器重定位可以快于使用頁表)。
如果路由啟用(方框520—是),那么過程500可以包括通過將虛擬地址與基址比較,計算偏移值(方框540)。例如,如果路由控制器220確定路由啟用(例如,如果啟用位指示路由啟用),那么路由控制器220可以通過將存儲器存取請求中標識的虛擬地址與基址比較,計算偏移值。
在一些實施方案中,路由控制器220計算偏移值作為虛擬地址和基址之間的差異。例如,路由控制器220可以從虛擬地址(例如,表示虛擬地址的值)中減去基址(例如,表示基址的值),以便計算偏移值。作為示例,假設基址值為1,000并且虛擬地址值為1,300,那么路由控制器220可以計算偏移值300(1,300-1,000=300)。
如進一步在圖5中示出,過程500可以包括確定虛擬地址是否在與路由存儲器存取請求關(guān)聯(lián)的虛擬地址范圍內(nèi)(方框550)。例如,路由控制器220可以確定虛擬地址是否在如本文結(jié)合圖3所述那樣確定的范圍內(nèi)。在一些實施方案中,路由控制器220基于偏移值確定虛擬地址是否在范圍內(nèi)。例如,路由控制器220可以將偏移值與第一閾限值(例如,0)和/或第二閾限值(例如,長度寄存器中標識的長度值)比較,以便確定虛擬地址是否在范圍內(nèi)。
在一些實施方案中,路由控制器220確定一組分配的寄存器以應用到存儲器存取請求。例如,可以分配多組寄存器,并且路由控制器220可以選擇一組寄存器以應用到存儲器存取請求。另外或替代地,路由控制器220可以將多于一組寄存器應用到存儲器存取請求,直到存儲器存取請求中標識的虛擬地址被確定為在與一組特定寄存器關(guān)聯(lián)的虛擬地址范圍內(nèi)。在這種情況下,路由控制器220可以將這組特定寄存器應用到存儲器存取請求。如果虛擬地址并不在任何范圍內(nèi),那么路由控制器220可以經(jīng)由第一路線路由存儲器存取請求。
在一些實施方案中,第一虛擬地址范圍會與第二虛擬地址范圍重疊。在這種情況下,路由控制器220可以選擇范圍中的一者,并且可以將與所選擇的范圍關(guān)聯(lián)的一組寄存器應用到存儲器存取請求。
如果虛擬地址并不在范圍內(nèi)(方框550—否),那么過程500可以包括經(jīng)由至主存儲器的第一路線路由存儲器存取請求(方框530)。例如,如果路由控制器220確定虛擬地址并不在范圍內(nèi),那么路由控制器220可以經(jīng)由至存儲器控制器240和/或主存儲器250的第一路線路由存儲器存取請求,如本文結(jié)合方框530所述。
在一些實施方案中,當偏移值滿足第一閾限值或第二閾限值時,路由控制器220確定虛擬地址并不在范圍內(nèi)。第一閾限值可等于零,并且第二閾限值可對應于長度值。例如,當偏移值小于零時,路由控制器220可以確定虛擬地址并不在范圍內(nèi)。例如,假設路由控制器220接收標識出虛擬地址900的存儲器存取請求。另外,假設基址值為1,000。在這個示例中,偏移值等于-100(900-1,000=-100)。由于-100小于零,這個偏移值指示虛擬地址900在范圍外(例如,因為該范圍從1,000開始)。
另外或替代地,當偏移值大于或等于長度值時,路由控制器220可以確定虛擬地址并不在范圍內(nèi)。例如,假設偏移值等于300,并且假設長度值等于200。由于偏移值大于長度值,路由控制器220確定虛擬地址并不在范圍內(nèi),并且經(jīng)由所述第一路線路由存儲器存取請求。在這個示例中,基址值1,000標識該范圍的起始地址1,000,并且長度值200標識該范圍的結(jié)束值1,199(例如,在1,000與1,199之間存在200個值)。產(chǎn)生偏移值300(1,300-1,000)的虛擬地址1,300在這個范圍外。類似地,生成等于長度值的偏移值200的虛擬地址1,200將會在范圍外。
因此,當偏移值小于零時,或者當偏移值大于或等于長度值時,路由控制器220可以確定虛擬地址并不在范圍內(nèi)。通過使用偏移值確定虛擬地址是否在范圍內(nèi),相較直接將虛擬地址與范圍的結(jié)束值比較,路由控制器220可以減少確定虛擬地址是否在范圍內(nèi)所需要的計算資源的量。
如果虛擬地址在范圍內(nèi)(方框550—是),那么過程500可以包括確定是否允許請求存取類型(方框560)。例如,如果路由控制器220確定虛擬地址在范圍內(nèi),那么路由控制器220可以確定是否允許存儲器存取請求中標識的存取類型。
在一些實施方案中,當偏移值滿足第一閾限值和第二閾限值時,路由控制器220確定虛擬地址在范圍內(nèi)。第一閾限值可等于零,并且第二閾限值可對應于長度值。例如,當偏移值大于或等于零時,或者當偏移值小于長度值時,路由控制器220可以確定虛擬地址在范圍內(nèi)。例如,假設路由控制器220接收標識出虛擬地址1,300的存儲器存取請求。另外,假設基址值為1,000。在這個示例中,偏移值等于300(1,300-1,000=300)。由于300大于零,這個偏移值指示虛擬地址1,300可為在范圍內(nèi)(例如,取決于長度值)。
繼續(xù)其中偏移值等于300的以上示例,假設長度值等于500。由于偏移值小于長度值,路由控制器220確定虛擬地址在范圍內(nèi)。在這個示例中,基址值1,000標識該范圍的起始地址1,000,并且長度值500標識該范圍的結(jié)束值1,499(例如,在1,000與1,499之間存在500個值)。產(chǎn)生偏移值300(1,300-1,000)的虛擬地址1,300在這個范圍內(nèi)。
在一些實施方案中,路由控制器220可以通過讀出存取控制位(例如,包括在浮動寄存器中),確定是否允許請求存取類型。存取控制位的值可以提供是允許還是拒絕特定存取類型(例如,讀出存取、寫入存取等等)的指示。
如果請求存取類型不被允許(方框560—否),那么過程500可以包括經(jīng)由至主存儲器的第一路線路由存儲器存取請求(方框530)。例如,如果路由控制器220確定請求存取類型不被允許(例如,基于讀出存取控制位),那么路由控制器220可以經(jīng)由至存儲器控制器240和/或主存儲器250的第一路線路由存儲器存取請求,如本文結(jié)合方框530所述。另外或替代地,當請求存取類型不被允許時,路由控制器220可以提供對錯誤的指示。
作為示例,假設標識出特定虛擬地址的存儲器存取請求包括對寫入主存儲器250的請求。另外,假設存取控制位指示特定虛擬地址或與特定虛擬地址關(guān)聯(lián)的物理地址是只讀的。在這種情況下,路由控制器220經(jīng)由向主存儲器250的第一路線(例如,包括IOMMU 230)路由存儲器存取請求。IOMMU 230可以拒絕存取,可以提供錯誤等等。
如果請求存取類型是允許的(方框560—是),那么過程500可以包括通過將偏移值和浮動值組合,確定與虛擬地址對應的物理地址(方框570)。例如,如果路由控制器220確定請求存取類型是允許的(例如,基于讀出存取控制位),那么路由控制器220可以將偏移值和浮動寄存器中標識的浮動值組合,以便確定對應于虛擬地址的物理地址。
作為示例,存儲器存取請求可以包括讀出請求,并且存取控制位可以指示讀出請求是允許的。另外或替代地,存儲器存取請求可以包括寫入請求,并且存取控制位可以指示寫入請求是允許的。在這些情況下,路由控制器220可以基于虛擬地址和浮動寄存器中標識的浮動值,計算對應于虛擬地址的物理地址。
在一些實施方案中,路由控制器220通過將偏移值和浮動值組合(例如,加入、減去等等),確定物理地址。例如,假設路由控制器220已經(jīng)確定偏移值300,如本文其它地方所述。另外,假設路由控制器220標識浮動寄存器中的浮動值400。路由控制器220可以將這些值加入以確定物理地址值700(300+400=700)。
如進一步在圖5中示出,過程500可以包括經(jīng)由至主存儲器的第二路線路由存儲器存取請求(包括物理地址)(方框580)。例如,路由控制器220可以將存儲器存取請求向與主存儲器250關(guān)聯(lián)的確定物理地址進行路由。在一些實施方案中,路由控制器220經(jīng)由至主存儲器250的第二路線路由存儲器存取請求。
如本文其它地方所述,至存儲器控制器240和/或主存儲器250的第二路線可不包括IOMMU 230。另外或替代地,相較第一路線,第二路線可能需要更少對存儲器存取請求的處理。另外或替代地,第二路線可以具有相對于第二路線較低的至存儲器控制器240和/或主存儲器250的時延(例如,較低平均時延)。另外或替代地,經(jīng)由第二路線來路由的存儲器存取請求可以經(jīng)由不同于與經(jīng)由第一路線來路由的存儲器存取請求關(guān)聯(lián)使用的算法的算法進行地址變換。.另外或替代地,第二路線可以使用一或多種預測算法(例如,緩沖、前瞻等等),相對于第一路線來提高性能。另外或替代地,第一路線可以基于存儲器存取請求來致使將執(zhí)行一組操作,并且第二路線可以基于存儲器存取請求來致使將執(zhí)行該組操作中的子集。
將存儲器存取請求路由到主存儲器250可以致使信息從對應于存儲器存取請求中標識的虛擬地址的物理地址讀出和/或向?qū)诖鎯ζ鞔嫒≌埱笾袠俗R的虛擬地址的物理地址寫入。在一些實施方案中,路由控制器220和/或存儲器控制器240在多個外圍裝置210和/或一個外圍裝置210與中央處理單元之間提供高速緩存一致性。例如,存儲器控制器240可向第一裝置的高速緩存控制器提供第二裝置寫入主存儲器250的特定物理地址的指示。高速緩存控制器可以修改與第一裝置關(guān)聯(lián)的高速緩存,以便確保高速緩存一致性。例如,高速緩存控制器可以將與特定物理地址關(guān)聯(lián)的經(jīng)高速緩存的寫入操作標記為無效,或者可以刷新與特定物理地址關(guān)聯(lián)的經(jīng)高速緩存的讀出操作。
以此方式,路由控制器220可提供一種加速與特定存儲器資源(諸如幀緩沖器)關(guān)聯(lián)的存儲器存取請求的方式。另外,路由控制器220可以允許外圍裝置(諸如圖形處理單元)在虛擬化計算環(huán)境中操作,同時以接近非虛擬化計算環(huán)境的水平的水平執(zhí)行。
雖然圖5示出過程500的示例方框,但是在一些實施方案中,過程500包括除了圖5所繪那些外的額外方框、更少方框、不同方框或不同地布置的方框。另外或替代地,過程500的方框中的兩個或更多個可以并行執(zhí)行。
圖6A-6E是與圖5所示示例過程500相關(guān)的示例實施方案600的圖示。圖6A-6E示出經(jīng)由包括IOMMU 230的第一路徑路由存儲器存取請求的各種路由決策的示例。
如圖6A所示,并且如由附圖標記605所示,假設GPU 210將存儲器存取請求提供給路由控制器220。如圖所示,假設存儲器存取請求標識虛擬地址100,標識寫入存取類型,并且標識要寫入與虛擬地址100對應的物理存儲器地址的一些信息。假設路由控制器220接收請求,并且確定浮動寄存器435中存儲的啟用位的值。如由附圖標記610所示,假設啟用位存儲值0,其指示了經(jīng)由至主存儲器250的第二路線(例如,不包括IOMMU 230的路線)路由存儲器存取請求禁用。因此,如由附圖標記615所示,路由控制器220經(jīng)由包括IOMMU 230的第一路線將存儲器存取向存儲器控制器240進行路由。
出于圖6B的目的,假設路由控制器220從GPU 210處接收相同存儲器存取請求。然而,在這種情況下,假設路由控制器220確定經(jīng)由第二路線來進行的路由啟用(例如,確定啟用位存儲值1)。如由附圖標記620所示,假設路由控制器220確定基址寄存器405中存儲的基址值200。如由附圖標記625所示,路由控制器220從虛擬地址值100中減去基址值200,以便生成偏移值-100(100–200=-100)。如由附圖標記630所示,路由控制器220確定偏移值為小于零,并且因此虛擬地址100在與經(jīng)由第二路線來進行的路由關(guān)聯(lián)的虛擬地址范圍外。因此,如由附圖標記635所示,路由控制器220經(jīng)由包括IOMMU 230的第一路線將存儲器存取向存儲器控制器240進行路由。
如圖6C所示,并且如由附圖標記640所示,假設GPU 210將不同存儲器存取請求提供給路由控制器220。如圖所示,假設存儲器存取請求標識虛擬地址800,標識寫入存取類型,并且標識要寫入與虛擬地址800對應的物理存儲器地址的一些信息。出于圖6C的目的,假設經(jīng)由第二路徑來進行的路由啟用,并且基址值為等于200(例如,如圖6B所示)。
如由附圖標記645所示,假設路由控制器220從虛擬地址值800中減去基址值200,以便生成偏移值600(800–200=600)。由于偏移值為大于零,路由控制器220確定將偏移值與長度寄存器410中存儲的長度值比較。如由附圖標記650所示,假設路由控制器220確定長度寄存器410中存儲的長度值500。如由附圖標記655所示,路由控制器220將偏移值與長度值比較,確定偏移值大于長度值,并且因此確定虛擬地址800并不在要經(jīng)由第二路徑路由的虛擬地址范圍內(nèi)。因此,如由附圖標記660所示,路由控制器220經(jīng)由包括IOMMU 230的第一路線將存儲器存取向存儲器控制器240進行路由。
如圖6D所示,并且如由附圖標記665所示,假設GPU 210將不同存儲器存取請求提供給路由控制器220。如圖所示,假設存儲器存取請求標識虛擬地址600,標識寫入存取類型,并且標識要寫入與虛擬地址600對應的物理存儲器地址的一些信息。出于圖6D的目的,假設經(jīng)由第二路徑來進行的路由啟用,基址值為等于200,并且長度值為等于500。
如由附圖標記670所示,路由控制器220從虛擬地址值600中減去基址值200,以便計算偏移值400(600–200=400)。如由附圖標記675所示,路由控制器220確定偏移值400小于長度值500?;谶@一確定,路由控制器220確定虛擬地址600在與經(jīng)由第二路線來進行的路由關(guān)聯(lián)的虛擬地址范圍內(nèi)。
假設圖6E繼續(xù)圖6D所示示例,并且由路由控制器220接收的存儲器存取請求中標識的虛擬地址600在與經(jīng)由第二路線來進行的路由關(guān)聯(lián)的虛擬地址范圍內(nèi)。如圖6E所示,并且如由附圖標記680所示,假設路由控制器220確定浮動寄存器435中存儲的存取控制位存儲值1,其指示了只讀存取控制啟用。假設存儲器存取請求標識寫入操作。因此,并且如由附圖標記685所示,路由控制器220經(jīng)由包括IOMMU 230的第一路線將存儲器存取向存儲器控制器240進行路由。然而,如果存儲器存取請求標識讀出操作,那么路由控制器220將會確定對應于虛擬地址600的物理地址,并且將會經(jīng)由至存儲器控制器240的第二路線(例如,不包括IOMMU 230的路線)路由存儲器存取請求。
如上指示,圖6A-6E僅作為示例來提供。其它實例是可能的,并且可不同于關(guān)于圖6A-6E所述那樣。
圖7A和圖7B是與圖5所示示例過程500相關(guān)的另一示例實施方案700的圖示。圖7A和圖7B示出經(jīng)由不包括IOMMU 230的第二路徑路由存儲器存取請求的路由決策的示例。
如圖7A所示,并且如由附圖標記705所示,假設GPU 210將存儲器存取請求提供給路由控制器220。如圖所示,假設存儲器存取請求標識虛擬地址699,標識寫入存取類型,并且標識要寫入與虛擬地址699對應的物理存儲器地址的一些信息。如由附圖標記710所示,假設啟用經(jīng)由第二路線來進行的路由,并且還啟用了寫入存取。如由附圖標記715所示,路由控制器220從虛擬地址值699中減去基址值200,以便計算偏移值499(699–200=499)。如由附圖標記720所示,路由控制器220確定偏移值499為大于零,并且小于長度值500?;谶@一確定,路由控制器220確定虛擬地址699在與經(jīng)由第二路線來進行的路由關(guān)聯(lián)的虛擬地址范圍內(nèi)。
如圖7B所示,并且如由附圖標記725所示,假設路由控制器220確定浮動寄存器435中存儲的浮動值400。如由附圖標記730所示,路由控制器220將浮動值400加入偏移值499,以便生成物理地址值899(499+400=899)。如由附圖標記735所示,路由控制器220經(jīng)由不包括IOMMU 230的第二路線將存儲器存取請求(包括標識出物理地址899的信息)向存儲器控制器240進行路由。
如上指示,圖7A和圖7B僅作為示例來提供。其它實例是可能的,并且可不同于關(guān)于圖7A和圖7B所述那樣。
前述公開內(nèi)容提供說明和描述,但是并不旨在窮舉或?qū)嵤┓桨赶逓樗_的精確形式。根據(jù)上述公開內(nèi)容,修改和變化是可能的,或者可以從實施方案實踐中獲得。
如本文所使用,裝置或部件旨在廣泛地解釋為硬件、固件或硬件與軟件的組合。
一些實施方案在本文中結(jié)合閾值進行描述。如本文所使用,滿足閾值可指大于閾值、多于閾值、高于閾值、大于或等于閾值、小于閾值、少于閾值、低于閾值、小于或等于閾值、等于閾值等等的值。
將會清楚,在如圖所示實施方案中,如本文所述的系統(tǒng)和/或方法可以許多不同形式軟件、固件和硬件實施。用于實施這些系統(tǒng)和/或方法的實際軟件代碼或?qū)S每刂朴布⒉幌拗茖嵤┓桨?。因此,系統(tǒng)和/或方法的操作和行為在不參考特定軟件代碼的情況下進行描述,應當理解,軟件和硬件可設計成基于本文中的描述實施系統(tǒng)和/或方法。
即使各特征的特定組合在權(quán)利要求中陳述和/或在本說明書中公開,這些組合也不旨在限制可能實施方案公開內(nèi)容。實際上,這些特征中的許多特征可以未在權(quán)利要求中具體陳述和/或在本說明書中公開的方式組合。雖然以下所列出的每個從屬權(quán)利要求可直接取決于僅僅一個權(quán)利要求,但是可能實施方案公開內(nèi)容包括與權(quán)利要求組中的每個其它權(quán)利要求組合的每個從屬權(quán)利要求。
本文中使用的元件、動作或指令不應被解釋為關(guān)鍵或必要的,除非明確描述如此。此外,如本文所使用,冠詞“一個”和“一種”旨在包括一或多個項目,并且可與“一或多個”可互換地使用。類似地,“組”旨在包括一或多個項目,并且可與“一或多個”可互換地使用。在僅預期一個項目的情況下,使用術(shù)語“一個”或類似語言。另外,如本文所使用,術(shù)語“具有”旨在是開放性的術(shù)語。另外,短語“基于”旨在表示“至少部分基于”,除非另外明確說明。