Почему драйвер устройства вызывает сбой страницы? - PullRequest
2 голосов
/ 10 августа 2011

У меня есть консольное приложение Windows, которое использует карту параллельного ввода-вывода для высокоскоростной передачи данных. (Общие стандарты HPDI32ALT )

Мой процесс работает в пользовательском режиме, однако, я уверен, что где-то за API устройства есть некоторая активность драйвера режима ядра (передача PCI DMA, чтение регистров состояния устройства и т. Д.). Рабочая модель примерно такая:

  • при запуске: я запрашиваю указатель на буфер ввода-вывода из API.
  • в моем основном цикле:
    • блок API, ожидающий место в буфере устройства (низкий уровень воды)
    • заполнить буфер ввода-вывода данными передачи
    • начать передачу на устройство, передав ему указатель на буфер ввода-вывода (в течение этого времени API использует DMA на шине PCI для перемещения данных на карту)
    • блок API, ожидающий завершения ввода-вывода

Приложение, кажется, работает правильно с правильной скоростью передачи данных и постоянной пропускной способностью в течение длительных периодов времени, однако, когда я смотрю на процесс в проводнике инструментов sys internals, я вижу большое количество сбоев страниц (~ 6k в секунду ). Я перемещаю ~ 30 МБ / с на карту.

У меня достаточно оперативной памяти, и я уверен, что ошибки страниц не связаны с дисковым вводом-выводом.

Есть мысли о том, что может быть причиной ошибки страницы? У меня также есть сторона приема для этого приложения, которая использует идентичную карту ввода-вывода в режиме приема. Использование API в режиме приема не приводит к большим ошибкам страницы.

Может ли перемещение буфера ввода-вывода в режим ядра вызвать сбои страниц?

1 Ответ

0 голосов
/ 10 августа 2011

Итак, ваше приложение запрашивает у драйвера буфер памяти, и вы копируете данные отправки в этот буфер? Это довольно странная модель, обычно вы позволяете приложению управлять буферами.

Если вы ошибаетесь в 6K страниц / с и передаете только 30 МБ / с, вы почти получаете ошибку страницы для каждой передаваемой страницы. Когда вы получаете буфер данных от драйвера, он всегда заполнен нулями? Мне интересно, если вы получаете требование ноль ошибок для каждого перевода.

-Скотт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...