我有一个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