История
Я разрабатываю драйвер KMDF для пользовательской платы PCI-E, в которой имеется микросхема PLX9056, подключаемая к PCI-E.
Драйвер и его тестовое программное обеспечение отлично работают после загрузки компьютера, но после перезапуска программного обеспечения и драйвера несколько раз скорость передачи постепенно снижается с 160 Мбит / с до примерно 110 МБ / с.
(Я должен отключать и повторно включать драйвер каждый раз, когда я хочу перезапустить программное обеспечение, ошибка микропрограммы, а не свою работу.)
Мой главный вопрос: есть ли какая-либо память или что-либо, связанное с DMA, которое может быть фрагментировано и, следовательно, замедлять передачу?
Драйвер использует Scatter / Gather DMA, аппаратно поддерживается, только 32-битный. Это происходит только при передаче данных на устройства.
Кажется, проблема в том, как драйвер обрабатывает данные / буферы. Программное обеспечение для тестирования DMA, предоставляемое PLX, всегда получает скорость 160 МБ / с каждый раз, даже когда наш драйвер уже сломался, и управляет только 110 МБ / с. Поэтому проблема должна быть в нашем драйвере.
Переустановка драйвера не решает проблему, только перезагрузка.
Стоит отметить, что программное обеспечение выделяет довольно большой буфер (1 ГБ), из которого он отправляет данные на устройство через драйвер.