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