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