共用方式為


在 64 位 Windows 中執行 DMA

將64位尋址支援新增至驅動程式可以大幅改善整體系統效能。 對於執行直接記憶體存取 (DMA) 的設備驅動器來說,這特別重要。 在64位Microsoft Windows 中,執行 DMA 但不支援64位尋址的設備驅動器會進行雙緩衝處理,這會導致相對效能較低。

雖然雙緩衝通常對 8 GB 系統上的影響相對較小(單一百分點),但這足以影響 I/O 密集的工作,例如資料庫活動。 隨著物理記憶體數量增加,這種負面效能影響也會增加。

若要支援 64 位 DMA,驅動程式應該遵守下列指導方針:

  1. 使用 PHYSICAL_ADDRESS 結構進行實體地址計算。

  2. 將整個64位位址視為有效的實體位址。 例如,驅動程式不應該在鎖定的緩衝區上呼叫 MmGetPhysicalAddress、捨棄高 32 位,並將截斷的地址傳遞至 32 位元件配接器。 這會導致記憶體損毀、I/O 遺失,以及系統失敗。

  3. 使用 Windows 2000 中新增的高效能散佈/收集例程 (GetScatterGatherListPutScatterGatherList)。

  4. 檢查 mm64BitPhysicalAddress 全域系統變數的值。 如果 TRUE,則系統支援 64 位實體尋址。

  5. Dma64BitAddressesDEVICE_DESCRIPTION 結構的成員設定為 TRUE,表示驅動程式支援 64 位 DMA 位址。

32 位 Windows 中的 DMA 例程已準備好支援 64 位。 如果您的裝置驅動程序正確使用這些例程,您的 DMA 程式代碼應該在 64 位 Windows 上不修改即可運作。