几次重新启动后,KMDF DMA传输速度变慢

时间:2019-05-21 11:07:28

标签: windows driver dma kmdf

故事: 我正在开发用于定制PCI-E板的KMDF驱动程序,该驱动器具有连接到PCI-E的PLX9056芯片。

驱动程序及其测试软件在启动计算机后可以正常运行,但是在多次重新启动软件和驱动程序之后,传输速度会逐步从160Mb / s降至110 MB / s。 / em>

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

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

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

问题似乎是驱动程序处理数据/缓冲区的方式。 PLX提供的DMA测试软件每次都始终获得160MB / s的速率,即使我们的驱动程序已经损坏并且仅管理110MB / s。因此,问题必须出在我们的驱动程序中。

重新安装驱动程序不能解决问题,只有重新启动可以解决问题。

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

1 个答案:

答案 0 :(得分:1)

解决了这个问题。

内存碎片导致驱动程序在操作系统运行一段时间后无法分配较大的连续内存块。

使用大页面支持修复了该问题,该支持使我可以分配巨大的连续内存页面。 https://docs.microsoft.com/en-us/windows/win32/memory/large-page-support