處理以及許多其它物。
[0060] 圖4是展示根據(jù)本發(fā)明的技術的用于預提取和預備份信令的實例設備的框圖。圖 4是參考GPU 12來描述的,但本發(fā)明的技術適用于和輸入/輸出裝置一起使用。實例輸入 /輸出裝置包含數(shù)字信號處理器、視頻編碼器/解碼器、顯示控制器、音頻處理器、相機處理 器、圖像處理器、網(wǎng)絡裝置或以大體上線性方式單步調試存儲器的任何其它類型的處理核 心。
[0061] 本發(fā)明提議用于IO裝置(例如,GPU)的請求調頁的技術。特別地說,本發(fā)明的技 術增添預提取和預備份通知事件信令以減少與請求調頁相關聯(lián)的時延。所述信令用于通過 通知0S/CPU對未映射存儲器的即將來臨的存取來避免大批頁面錯誤。
[0062] 本發(fā)明的技術包含使用預備份和/或預提取信令以預期及可能地防止在IO裝置 的請求調頁虛擬存儲器系統(tǒng)中的頁面錯誤和TLB失敗兩者。預備份信號可用于通知OS或 CPU未映射頁面(即,虛擬存儲器的當前沒有備份在物理存儲器中的頁面)將由IO裝置存 取。響應于此信號,CPU和/或OS可將預期的頁面?zhèn)浞莸轿锢泶鎯ζ髦幸栽噲D在由IO裝 置存取此些頁面之前將它們備份。在一些用例中,此預備份信號可避免大多數(shù)頁面錯誤和 它們的所得時延缺陷。
[0063] 參考圖4, GPU 12可向CPU 6發(fā)送主機CPU預備份信號50以請求將額外頁面?zhèn)浞?到物理存儲器中。GPU 12可響應于對當前備份的頁面的使用已超出緩沖器使用的某一預定 閾值的確定來發(fā)送預備份信號50。本質上,通過跟蹤對當前備份的頁面的使用,GPU 12預 期在不久的將來將需要當前未備份的頁面。下文將參考圖5來論述使用跟蹤及閾值的額外 細節(jié)。
[0064] 響應于預備份信號50, CPU 6可將頁面表56中的額外頁面?zhèn)浞莸轿锢泶鎯ζ髦?(CPU IOMMU頁面表備份61)。即,頁面表56中的虛擬存儲器的額外頁面映射到物理存儲器 位置(例如,圖1的系統(tǒng)存儲器10)。頁面表56存儲虛擬存儲器地址與物理存儲器之間的 映射。當完成備份時,CPU 6可向GPU 12用信號發(fā)送備份完成信號54以通知GPU。備份 完成信號54可通知GPU 12不必暫停任何操作,因為歸因于預備份操作而避免了頁面錯誤。 在其它情況下,當不能夠及時執(zhí)行預備份以防止頁面錯誤時,備份完成信號54可用于通知 GPU 12可重新開始任何暫停的操作。
[0065] 關于相關的話題,甚至含有備份在物理存儲器中的頁面的緩沖器也可遭受由 IOMMU提供的虛擬化存儲器系統(tǒng)中的性能影響。具體來說,IOMMU通常含有小型高速緩沖存 儲器(TLB)以保存翻譯頁面表的數(shù)個部分。此舉將避免針對每一次翻譯從存儲器(例如, DRAM)提取翻譯頁面表項(PTE)。TLB高速緩沖存儲器上的重大失?。?,TLB失敗)可導 致顯著的性能損耗,因為IO裝置的數(shù)據(jù)操作在向存儲器的PTE提取之后停止。因而,本發(fā) 明提出用于通知IOMMU不久將存取當前未存儲在TLB中的頁面表項(PTE)的預提取信號。 響應于預提取信號,IOMMU可存取預期頁面的PTE以試圖在由IO裝置存取此些頁面之前將 它們的PTE存儲在TLB中。在一些用例中,此預提取信號可避免大多數(shù)TLB失敗和它們的 所得時延缺陷。
[0066] 參考圖4, GPU 12可向IOMMU 40發(fā)送TLB PTE預提取信號52以請求將PTE載入 到TLB 58中。GPU 12可響應于對具有TLB PTE的映射頁面的使用已超出某一預定閾值的 確定來發(fā)送預提取信號52。本質上,通過跟蹤對具有TLB PTE的頁面的使用,GPU 12預期在 不久的將來在IOMMU 40的TLB 58中將需要其它頁面的PTE。響應于預提取信號52, IOMMU 40可從存儲器(例如,系統(tǒng)存儲器10或從DRAM)提取并存儲關于額外映射頁面的PTE。下 文將參考圖6來論述頁面PTE的使用跟蹤和閾值的額外細節(jié)。
[0067] 在IO裝置(例如,GPU 12)中存在用以產(chǎn)生預備份或預提取信令的眾多可能的方 法和技術。圖5是展示根據(jù)本發(fā)明的一個實例的預備份信號觸發(fā)的一個實例的概念圖。在 圖5的實例中,GPU 12跟蹤對存儲器存取緩沖器60的使用。所述使用可為到緩沖器60的 讀寫兩者。緩沖器60可存儲虛擬存儲器的一或多個映射頁面。在許多情況下,緩沖器中的 總數(shù)個頁面的一部分可備份在物理存儲器中。舉例來說,緩沖器60中的映射頁面的第一部 分(例如,第一映射頁面68)可備份到物理存儲器中,而映射頁面的第二部分(例如,第二 映射頁面70)可仍未備份在物理存儲器中。緩沖器開始62指示存儲在緩沖器62中的映射 頁面的相連地址項中的第一存儲器地址。
[0068] GPU 12經(jīng)配置以跟蹤緩沖器存取的當前位置(當前緩沖器位置64)對比某閾值 (緩沖器水印66)。緩沖器水印66指示存儲在緩沖器60中的頁面的特定虛擬存儲器地址。 在一個實例中,當當前緩沖器位置64越過緩沖器水印66時,可觸發(fā)主機CPU預備份信號 50。即,一旦GPU 12存取具有高于緩沖器水印66的地址的虛擬存儲器位置,便觸發(fā)預備份 信號50。響應于預備份信號50, CPU 6將隨后將第二映射頁面70備份到物理存儲器中。
[0069] 用于預備份信令的上述技術可特別適用于其中以高度線性方式存取緩沖器60的 應用中。以高度線性方式存取的緩沖器的實例包含命令流緩沖器、頂點緩沖器、指令流緩沖 器、紋理緩沖器、元數(shù)據(jù)流緩沖器、計算緩沖器和中間階段流緩沖器。命令緩沖器含有驅動 器(生產(chǎn)者)與GPU(消費者)之間的命令流。所述命令流可為作業(yè)或子作業(yè)的流(例如, 寄存器寫)。頂點緩沖器含有GPU用于繪圖的幾何信息,例如位置、色彩、紋理坐標和其它 屬性數(shù)據(jù)。指令流緩沖器含有GPU著色器/計算單元運行的指令或程序,例如頂點、像素或 計算著色器。紋理緩沖器含有紋理圖像數(shù)據(jù)。中間階段流緩沖器處置作業(yè)的數(shù)據(jù)流。時常 地,GPU將具有有限的內部存儲器以處置作業(yè)的數(shù)據(jù)流,在此情況下,GPU將把數(shù)據(jù)流串流 或轉儲到中間階段緩沖器(或其它專用圖形或系統(tǒng)存儲器)且隨后的GPU階段將從那存儲 器返回消耗。并且將值得提及兩種其它緩沖器類型。元數(shù)據(jù)流緩沖器含有由GPU明確產(chǎn)生 的中間狀態(tài)數(shù)據(jù)。此明確產(chǎn)生的中間狀態(tài)數(shù)據(jù)的實例將為消耗頂點數(shù)據(jù)且輸出可見性流以 供隨后階段使用的延期再現(xiàn)器。計算緩沖器用于存儲由GPU計算的通用數(shù)據(jù)?,F(xiàn)代GPU經(jīng) 設計成支持不具有圖形特定性的通用計算任務。在此情況下,例如計算緩沖器的緩沖器可 表示任意數(shù)據(jù)結構(例如,列表的陣列或陣列的列表)。應注意,緩沖器水印觸發(fā)技術可適 用于去往IO裝置的多個限界緩沖器。
[0070] 圖6是展示根據(jù)本發(fā)明的一個實例的預提取信號觸發(fā)的一個實例的概念圖。在圖 6的實例中,GPU 12跟蹤對存儲器存取頁面72的使用。所述使用可為到緩沖器60的讀寫 兩者。頁面72可包含虛擬存儲器的一或多個映射頁面。在許多情況下,總數(shù)個頁面72的 僅一部分可具有存儲在IOMMU 40 (見圖4)的TLB 58中的對應PTE。舉例來說,映射頁面 72的第一部分可具有存儲在IOMMU 40中的對應PTE,而映射頁面72的第二部分可不具有 存儲在IOMMU 40中的任何PTE。
[0071] GPU 12經(jīng)配置以跟蹤對頁面72中的存儲器地址的使用對比某閾值(例如,頁面水 印76)。頁面水印76指示存儲在頁面76中的頁面的特定虛擬存儲器地址。在一個實例中, GPU 12可經(jīng)配置以跟蹤命令流的虛擬存儲器的當前位置(流位置74)。當流位置74越過頁 面水印76時,可觸發(fā)主機TLB PTE預提取信號52。即,一旦GPU 12存取具有高于頁面水印 76的地址的虛擬存儲器位置,便觸發(fā)預提取信號52。響應于預備份信號50, IOMMU 40將隨 后提取關于頁面72中的隨后頁面的PTE。指令"IF(STREAM&(PAGESIZE-1)>WATERMARK)" 在每次流接近下一頁面的4KB邊界(即,頁面大小PAGESIZE)時引起預提取信號。此指令 將確實完成此。舉例來說,每次流接近(由水印WATERMARK定義)下一頁面邊界時,它將發(fā) 送預提取信號。在一個實例中,可響應于GPU 12存取接近頁面邊界的虛擬存儲器位置來觸 發(fā)預提取信令。在其中頁面72中含有多個頁面的實例中,可將頁面水印76定位于具有在 IOMMU 40的TLB 58中的PTE的最后一頁面的頁面邊界前面。
[0072] 用于預提取信令的上述技術也可特別適用于其中以高度線性或順序方式存取頁 面72的應用程序。和預備份信令一樣,以高度線性方式存取的頁面的實例可包含命令流緩 沖器、頂點緩沖器、指令流緩沖器、紋理緩沖器和中間階段流緩沖器中的頁面。
[0073] CPU 6可經(jīng)配置以在GPU 12向存儲緩沖器發(fā)起包含讀寫交易兩者的存儲器交易 之前含蓄地或明確地提供預提取和預備份觸發(fā)到GPU 12。可通過執(zhí)行CPU 6的應用程序或 通過裝置驅動器(例如,圖1的GPU驅動器7)用信號向GPU 6通知預提取和預備份觸發(fā)。
[0074] 當新緩沖器以GPU 12為目的地時(例如,頂點、紋理或命令緩沖器),很可能此緩 沖器將由隨后作業(yè)來存取。在此情況下,緩沖器的綁定可與信令觸發(fā)配對以用于使GPU 12 利用預提取和預備份信號。存在其中GPU驅動器7和/或執(zhí)行于CPU 6上的應用程序兩者 可確定用于隨后作業(yè)的一般存取模式(例如,高度線性緩沖器存取模式或空間上確定性的 存取模式)的其它情境。在這些情況下,可在存儲器存取作業(yè)之前將預提取/預備份執(zhí)行 命令放置到命令流中以供在GPU 12上執(zhí)行。
[0075] 例如GPU 12的IO裝置可含有運行高度并行化作業(yè)的流處理器。執(zhí)行于流處理器 上的指令程序可擴展以包含預提取和預備份觸發(fā)指令。舉例來說,如圖3中示出,執(zhí)行于 GPU上的包含著色器子系統(tǒng)和/或其它管線塊的圖像處理管線30可經(jīng)配置以跟蹤由CPU 6 提供的閾值。此將允許將可在程序開發(fā)或編譯時間確定的任何已知的存取模式表達為預備 份和預提取觸發(fā)。
[0076] 本發(fā)明的技術也可擴展到不再在使用中的虛擬存儲器頁面的未映射。當GPU 12 完成映射頁面的使用時,相同類型的信令可用于命令CPU 6釋放(例如,不映射)不再需要 的虛擬存儲器頁面。
[0077] 上文所描述的緩沖器和頁面水印技術也可用于其中緩沖器和/或頁面存取不為 高度線性的其它情形。特別地說,許多GPU應用程序在空間上為確定性的。即,當在GPU上 發(fā)起應用程序時,知道在屏幕上將按什么空間次序來繪制像素。常在空間上為確定性的GPU 應用程序的實例包含光柵化。雖然GPU中的光柵化并不總是在空間上為確定性的,但存在 GI3U中的光柵化在空