Поделиться через


RSS с одной очередью приема оборудования

Драйверы минипорта могут поддерживать RSS для сетевых адаптеров, которые поддерживают вычисление хэша RSS и одну очередь дескриптора получения.

На следующем рисунке показана обработка RSS с одной очередью дескриптора получения.

Схема, иллюстрирующая обработку RSS с одной очередью дескриптора приема.

На рисунке пунктирные стрелки представляют собой альтернативный путь для обработки получения. RSS не может управлять ЦП, получающим начальный вызов ISR.

В отличие от обработки получения, отличной от RSS, обработка получения на основе RSS распределяется по нескольким ЦП. Кроме того, обработка для данного подключения может быть привязана к определенному ЦП.

Следующий процесс повторяется для каждого прерывания:

  1. Сетевой адаптер использует DMA для заполнения буферов полученными данными и прерывает работу системы.

    Драйвер мини-порта выделил буферы приема в общей памяти во время инициализации.

  2. Сетевой адаптер может заполнить дополнительные буферы приема в любое время, но не прерывается снова, пока драйвер мини-порта не включит прерывания.

    Полученные буферы, обрабатываемые системой в одном прерывании, могут быть связаны с множеством различных сетевых подключений.

  3. NDIS вызывает функцию MiniportInterrupt драйвера miniportInterrupt (ISR) на системном ЦП.

  4. ISR отключает прерывания и запрашивает NDIS для постановки в очередь отложенного вызова процедуры (DPC) для обработки полученных данных.

  5. NDIS вызывает функцию MiniportInterruptDPC (DPC) на текущем ЦП. В DPC:

    1. Драйвер мини-порта использует хэш-значения, вычисленные сетевым адаптером для каждого полученного буфера, и переназначает каждый полученный буфер очереди получения, связанной с ЦП.
    2. Текущий DPC запрашивает NDIS для постановки DPC в очередь для каждого из остальных ЦП, связанных с непустой очередью получения.
    3. Если текущий DPC работает на ЦП, связанном с непустой очередью, текущий DPC обрабатывает связанные буферы приема и указывает полученные данные в стеке драйверов.

    Назначение очередей и постановка в очередь дополнительных ЦП требуют дополнительных затрат на обработку. Для повышения производительности системы эти издержки должны быть компенсированы за счет более эффективного использования доступных ЦП.

  6. DPC на заданном ЦП:

    1. Обрабатывает буферы получения, связанные с очередью получения, и указывает данные в стеке драйверов. Дополнительные сведения см. в разделе Указание данных получения RSS.
    2. Включает прерывания, если это последнее завершение DPC. Это прерывание завершено, и процесс запускается снова. Драйвер должен использовать атомарную операцию для определения последнего завершения DPC. Например, драйвер может использовать функцию NdisInterlockedDecrement для реализации атомарного счетчика.