Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
RSS с аппаратной очередью улучшает производительность системы, в сравнении с RSS с единственной аппаратной очередью приема. Сетевые адаптеры, поддерживающие работу с аппаратными очередями, распределяют полученные данные по нескольким очередям приема. Очереди получения связаны с центральным процессором. Сетевой адаптер назначает полученные данные ЦПУ на основе хэш-значений и таблицы переадресации.
На следующем рисунке показана очередь получения rsS с сетевым адаптером.
На диаграмме пунктирные стрелки представляют альтернативный путь для обработки приема. RSS не может контролировать ЦП, получающий начальный вызов ISR. Драйверу не нужно ставить данные в очередь, чтобы сразу же запланировать начальные DPC на правильных процессорах.
Следующий процесс повторяется для каждого прерывания:
Сетевой адаптер:
Использует DMA для заполнения буферов полученными данными.
Минипорт-драйвер выделил буферы приема в общей памяти во время инициализации.
Вычисляет хэш-значение.
Ставит буфер в очередь для процессора и назначает очереди минипорт-драйверу.
Например, сетевой адаптер может выполнять шаги 1–3 и DMA в списке назначений ЦП после получения некоторого количества пакетов. Конкретный механизм определяется дизайном сетевого адаптера.
Прерывает работу системы.
Полученные буферы, которые система обрабатывает в одном прерывании, распределяются между ЦП.
NDIS вызывает функцию минипорта MiniportInterrupt (ISR) на определяемом системой ЦП.
Драйвер минипорта запрашивает NDIS постановку в очередь отложенных вызовов процедур (DPC) для каждого ЦП с непустой очередью.
Обратите внимание, что все отложенные вызовы процедур должны завершиться, прежде чем драйвер включит прерывания. Кроме того, обратите внимание, что ISR может работать на ЦП, который не имеет буферов для обработки.
NDIS вызывает функцию MiniportInterruptDPC для каждой очереди DPC. DPC на данном процессоре:
Создает дескрипторы для всех полученных буферов в его очереди и передает данные вверх по стеку драйверов.
Дополнительные сведения см. в разделе Получение данных RSS.
Включает прерывания, если это последний DPC, который должен завершить выполнение. Это прерывание завершено, и процесс начинается снова. Драйвер должен использовать атомарную операцию, чтобы определить последний завершённый DPC. Например, драйвер может использовать функцию NdisInterlockedDecrement для реализации атомарного счетчика.