我有一個Windows控制檯應用程序,它使用並行IO卡進行高速數據傳輸。 (通用標準HPDI32ALT)爲什麼設備驅動程序會導致頁面錯誤?
我的進程在用戶模式下運行,但是我確定設備的API後面有一些內核模式驅動程序活動(PCI DMA傳輸,讀取設備狀態寄存器等)。工作模式大致是這樣的:
- 在啓動時:我請求一個指向IO緩衝區的指針。
- 在我的主循環:
- 上API在設備的緩衝區等待室(低水印)
- 塊填充傳輸數據的IO緩衝器
- 由指針傳遞到IO開始傳輸到設備緩衝液(在此期間,API使用DMA PCI總線上移動數據到卡)上的API
- 塊等待IO完成
但是,當我在sys內部工具進程資源管理器中查看進程時,發現大量頁面錯誤(每秒大約6k次),應用程序似乎在正確的數據速率和長時間的持續吞吐量下正常工作。 。我正在向該卡移動〜30MB/s。
我有足夠的內存,併合理確信頁面錯誤不是磁盤IO相關。
有什麼想法可能導致頁面錯誤?對於這個在接收模式下使用相同的IO卡的應用程序,我也有一個接收端。接收模式使用API不會導致大量的頁面錯誤。
將IO緩衝區移動到內核模式的行爲是否會導致頁面錯誤?
手冊上說,使用IO緩衝器允許它分配一個內存塊是在用於DMA性能原因物理存儲器中連續。 – JeffV