【问题标题】:KMDF DMA transfer slows down after a few restarts几次重启后 KMDF DMA 传输变慢
【发布时间】: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),从中通过驱动程序将数据发送到设备。

【问题讨论】:

    标签: windows driver dma kmdf


    【解决方案1】:

    解决了这个问题。

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

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

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 1970-01-01
      • 2011-09-06
      • 2021-09-06
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      相关资源
      最近更新 更多