在 64 位 Windows 中執行 DMA
將 64 位定址支援新增至驅動程式,可大幅改善整體系統效能。 對於執行直接記憶體存取 (DMA) 的設備磁碟機而言,這特別重要。 在 64 位 Microsoft Windows 中,執行 DMA 但不支援 64 位定址的設備磁碟機會進行雙緩衝處理,這會導致相對效能降低。
雖然雙緩衝處理通常會對 8 GB 系統上) 單一百分比點 (相對小的影響,但這足以影響需要大量 I/O 的工作,例如資料庫活動。 隨著實體記憶體數量增加,此負面效能影響也會增加。
若要支援 64 位 DMA,驅動程式應該觀察下列指導方針:
使用 PHYSICAL_ADDRESS 結構進行實體位址計算。
將整個 64 位位址視為有效的實體位址。 例如,驅動程式不應該在鎖定的緩衝區上呼叫 MmGetPhysicalAddress 、捨棄高 32 位,並將截斷的位址傳遞至 32 位元件配接器。 這會導致記憶體損毀、I/O 遺失,以及系統失敗。
使用在 Windows 2000 中新增的高效能散佈/收集常式 (GetScatterGatherList 和 PutScatterGatherList) 。
檢查 Mm64BitPhysicalAddress 全域系統變數的值。 如果為 TRUE,則系統支援 64 位實體定址。
將DEVICE_DESCRIPTION結構的Dma64BitAddresses成員設定為TRUE,表示驅動程式支援 64 位 DMA 位址。
32 位 Windows 中的 DMA 常式已就緒 64 位。 如果您的設備磁碟機正確使用這些常式,您的 DMA 程式碼應該在 64 位 Windows 上不修改即可運作。