gpt4 book ai didi

windows - 为什么设备驱动程序会导致页面错误?

转载 作者:可可西里 更新时间:2023-11-01 10:50:09 24 4
gpt4 key购买 nike

我有一个 Windows 控制台应用程序,它使用并行 IO 卡进行高速数据传输。 (通用标准HPDI32ALT)

我的进程在用户模式下运行,但是,我确信在设备 API 后面的某个地方有一些内核模式驱动程序事件(PCI DMA 传输、读取设备状态寄存器等)。工作模型大致是这样的:

  • 在启动时:我从 API 请求一个指向 IO 缓冲区的指针。
  • 在我的主循环中:
    • 阻止 API 等待设备缓冲区中的空间(低水位线)
    • 用传输数据填充IO缓冲区
    • 通过将指向 IO 缓冲区的指针传递给设备开始传输(在此期间,API 使用 PCI 总线上的 DMA 将数据移动到卡)
    • 阻止 API 等待 IO 完成

该应用程序似乎在长时间内以适当的数据速率和持续的吞吐量正常工作,但是,当我在 sys internals 工具进程资源管理器中查看进程时,我看到大量页面错误(每秒约 6k ).我正在向卡移动 ~30MB/s。

我有足够的 RAM,并且有理由相信页面错误与磁盘 IO 无关。

关于可能导致页面错误的原因有什么想法吗?我也有这个应用程序的接收端,它在接收模式下使用相同的 IO 卡。 API的接收模式使用不会导致大量页面错误。

将 IO 缓冲区移动到内核模式的行为会导致页面错误吗?

最佳答案

所以您的应用程序向驱动程序请求内存缓冲区,然后您将发送数据复制到该缓冲区?这是一个非常奇怪的模型,通常您让应用程序管理缓冲区。

如果您以 6K 页面/秒的速度出错,而您仅以 30MB/秒的速度传输,那么您传输的每个页面几乎都会出现页面错误。当您从驱动程序获取数据缓冲区时,它是否总是填充零?我想知道您是否在每次传输中都实现了需求零故障。

-斯科特

关于windows - 为什么设备驱动程序会导致页面错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7011206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com