共用方式為


配置通知

重要

某些資訊與發行前版本產品有關,在發行前可能會大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

有時候,某些作業必須在即將進行分頁收回或升階作業的配置上執行。 例如,配置在裝置存取下時可能會壓縮。 收回該配置時(也就是不再在裝置存取下),內核模式驅動程式 (KMD) 必須先將它解壓縮,才能實際收回。 DXGK_OPERATION_NOTIFY_ALLOC分頁作業是針對此目的所設計。 從 Windows 11 版本 24H2 (WDDM 3.2) 開始,即可使用此作業。

如何要求配置通知

當系統呼叫 DxgkDdiCreateAllocation 以建立配置時,KMD 可以在 DXGK_ALLOCATIONINFOFLAGS2設定旗標,指示 Dxgkrnl 執行DXGK_OPERATION_NOTIFY_ALLOC分頁作業。 目前的通知旗標如下:

  • NotifyEviction
  • NotifyIoMmuUnmap

DDI 變更

已新增DXGK_OPERATION_NOTIFY_ALLOC分頁作業

新增至DXGK_ALLOCATIONINFOFLAGS2的旗標

下列旗標會新增至 DXGK_ALLOCATIONINFOFLAGS2

  • NotifyEviction

    KMD 會在其 DxgkDdiCreateAllocation 實作中設定 NotifyEviction 旗標。 此旗標表示 Dxgkrnl 在收回配置之前,應該向驅動程式發出DXGK_OPERATION_NOTIFY_ALLOC NotifyEviction 作業。

    指定旗標且設定即將收回時:

    • Dxgkrnl 會將配置對應至分頁程式的 GPU 虛擬位址 (VA) 空間。
    • Dxgkrnl 會使用DXGK_OPERATION_NOTIFY_ALLOC作業和 NotifyEviction 旗標呼叫 DxgkDdiBuildPagingBuffer
    • 驅動程式會在分頁 DMA 緩衝區中建置命令。
    • 系統會提交分頁 DMA 緩衝區,以在系統內容中執行。
    • Dxgkrnl 會從分頁進程 GPU VA 空間取消對應配置。

    如果配置大小大於分頁進程 GPU VA 空間的大小,則可以執行這些步驟多次。

    Dxgkrnl 只有在配置從光圈區段或隱含系統記憶體區段收回時,才會將通知傳送給驅動程式。

  • NotifyIoMmuUnmap

    KMD 會在其 DxgkDdiCreateAllocation 函式中設定 NotifyIoMmuUnmap 旗標。 此旗標表示 Dxgkrnl 在取消對應 IOMMU 的配置之前,應該發出DXGK_OPERATION_NOTIFY_ALLOC NotifyIoMmuUnmap 作業。 驅動程式有機會清除內部快取。 驅動程式應該確保從分頁作業傳回之後,不會存取配置 GPU VA。

    指定旗標且設定即將在收回期間從 IOMMU 取消對應時:

    • Dxgkrnl 會使用DXGK_OPERATION_NOTIFY_ALLOC作業和 NotifyIoMmuUnmap 旗標呼叫 DxgkDdiBuildPagingBuffer
    • 驅動程式會在分頁 DMA 緩衝區中建置命令。
    • 系統會提交分頁 DMA 緩衝區,以在系統內容中執行。
    • Dxgkrnl 會等候所有分頁作業完成。
    • 配置會從 IOMMU 取消對應。

    只有在裝置支援 GpuVaIoMmu 或 GpuVaIoMmuGlobal 虛擬尋址模型時,才會傳送通知。

分頁處理 GPU VA 空間大小

若要取得分頁程式 GPU VA 空間的大小, DXGKQAITYPE_PAGINGPROCESSGPUVASIZE 會新增至 DXGK_QUERYADAPTERINFOTYPE 列舉。

DXGK_OPERATION_NOTIFY_ALLOC NotifyEviction 作業需要對應的配置對應到分頁進程 GPU VA 空間。 Dxgkrnl 只有在有本機記憶體區段或啟用硬體排程時,才會配置分頁 (系統) 進程的 GPU VA 空間。 GPU VA 空間的大小是最大的本機記憶體區段的四分之一,或硬體排程記錄緩衝區的大小,無論哪一個更大。 產生的 GPU VA 大小可能很小,以對應完整配置。 在此情況下,驅動程式必須指定分頁進程 GPU VA 空間的大小。

Dxgkrnl 使用DXGKARG_QUERYADAPTERINFO結構呼叫 DxgkDdiQueryAdapterInfo,以取得分頁程式 GPU VA 空間的大小:

  • 類型 是設定 DXGKQAITYPE_PAGINGPROCESSGPUVASIZE
  • pInputData 指向 UINT 值,指定 LDA 組態中的實體配接器索引。 Dxgkrnl 會將非 LDA 組態設為零。
  • InputDataDataSizesizeof(UINT)
  • pOutputData 指向 UINT 值,驅動程式會傳回以 MB 為單位的分頁進程 GPU VA 空間大小。
  • OutputDataSizesizeof(UINT)

如果驅動程式呼叫失敗,或傳回 pOutputData 值為零,OS 會決定分頁程式 GPU VA 大小。

如果適配卡有大型本機記憶體區段,驅動程式應該傳回零,讓OS選擇分頁進程 GPU VA 空間的大小。 VA 空間越大,分頁進程 GPU 分頁表所需的記憶體越多。 分頁表一律是常駐的,因此驅動程式不應該為 VA 空間指定不必要的大大小。

分頁作業(填滿、傳輸、通知配置)會在配置大小超過分頁進程 GPU VA 空間大小時以區塊方式完成。