重启几次后 KMDF DMA 传输变慢

KMDF DMA transfer slows down after a few restarts

故事: 我正在为定制的 PCI-E 板开发 KMDF 驱动程序,它有一个连接到 PCI-E 的 PLX9056 芯片。

驱动及其测试软件在开机后运行正常,但多次重启软件和驱动后,传输速度从160Mb/s降到110左右MB/s 循序渐进

(每次我想重启软件,固件错误,我都必须禁用并重新启用驱动程序,而不是我的工作atm。)

我的主要问题是,是否有任何内存或任何连接到 DMA 的东西会变得碎片化,从而使传输变慢?

驱动使用Scatter/Gather DMA,硬件支持,仅32位。这仅在将数据 传输到 设备时发生。

问题似乎出在驱动程序处理 data/buffers 的方式上。 PLX 提供的 DMA 测试软件每次总是获得 160MB/s 的速率,即使我们的驱动程序已经崩溃并且只能管理 110MB/s。所以,问题肯定出在我们的驱动上。

重装驱动并不能解决问题,只有重启才能解决。

值得一提的是,该软件分配了一个相当大的缓冲区(1GB),它通过驱动程序将数据从该缓冲区发送到设备。

问题已解决。

内存碎片导致驱动程序在 OS 已经 运行 一段时间后无法分配大的连续内存块。

已通过使用允许我分配大量连续内存页面的大页面支持修复。 https://docs.microsoft.com/en-us/windows/win32/memory/large-page-support