【发布时间】:2019-10-07 18:28:29
【问题描述】:
故事: 我正在为定制的 PCI-E 板开发 KMDF 驱动程序,它有一个连接到 PCI-E 的 PLX9056 芯片。
驱动程序和它的测试软件在启动计算机后可以正常工作,但是在多次重新启动软件和驱动程序后,传输速度从 160Mb/s 逐步减慢到 110MB/s 左右。
(每次我想重新启动软件,固件错误,而不是我的工作 atm 时,我都必须禁用并重新启用驱动程序。)
我的主要问题是,是否有任何内存或连接到 DMA 的任何东西会碎片化,从而使传输变慢?
驱动使用Scatter/Gather DMA,硬件支持,只有32bit。这仅在将数据传输到设备时发生。
问题似乎是驱动程序处理数据/缓冲区的方式。 PLX 提供的 DMA 测试软件每次都能获得 160MB/s 的速率,即使我们的驱动程序已经坏了并且只能管理 110MB/s。因此,问题一定出在我们的驱动程序上。
重新安装驱动并不能解决问题,只有重新启动才能解决问题。
值得一提的是,该软件分配了一个相当大的缓冲区 (1GB),从中通过驱动程序将数据发送到设备。
【问题讨论】: