Передача KMDF DMA замедляется после нескольких перезапусков - PullRequest
0 голосов
/ 21 мая 2019

История Я разрабатываю драйвер KMDF для пользовательской платы PCI-E, в которой имеется микросхема PLX9056, подключаемая к PCI-E.

Драйвер и его тестовое программное обеспечение отлично работают после загрузки компьютера, но после перезапуска программного обеспечения и драйвера несколько раз скорость передачи постепенно снижается с 160 Мбит / с до примерно 110 МБ / с.

(Я должен отключать и повторно включать драйвер каждый раз, когда я хочу перезапустить программное обеспечение, ошибка микропрограммы, а не свою работу.)

Мой главный вопрос: есть ли какая-либо память или что-либо, связанное с DMA, которое может быть фрагментировано и, следовательно, замедлять передачу?

Драйвер использует Scatter / Gather DMA, аппаратно поддерживается, только 32-битный. Это происходит только при передаче данных на устройства.

Кажется, проблема в том, как драйвер обрабатывает данные / буферы. Программное обеспечение для тестирования DMA, предоставляемое PLX, всегда получает скорость 160 МБ / с каждый раз, даже когда наш драйвер уже сломался, и управляет только 110 МБ / с. Поэтому проблема должна быть в нашем драйвере.

Переустановка драйвера не решает проблему, только перезагрузка.

Стоит отметить, что программное обеспечение выделяет довольно большой буфер (1 ГБ), из которого он отправляет данные на устройство через драйвер.

...