RSS с сигнальными прерываниями сообщения

Драйверы минипортов могут поддерживать сигнальные прерывания сообщений (MSIs) для повышения производительности RSS. MSIs позволяют сетевому адаптеру запрашивать прерывание на ЦПУ, который будет обрабатывать полученные данные. Дополнительные сведения о поддержке NDIS для MSI см. в NDIS MSI-X.

На следующем рисунке показан RSS с MSI-X.

схема, демонстрирующая RSS с MSI-X в сетевом стеке.

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

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

  1. Сетевой адаптер:

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

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

    2. Вычисляет хэш-значение.

    3. Ставит буфер в очередь для ЦП и предоставляет назначения очередей драйверу минипорта. Например, сетевой адаптер может выполнять шаги 1–3 и использовать DMA для обработки списка назначений ЦП после получения некоторого количества пакетов. Конкретный механизм оставлен на усмотрение дизайна сетевого адаптера.

    4. Использование MSI-X прерывает работу ЦП, связанного с непустой очередью.

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

  3. NDIS вызывает ISR драйвера минипорта (MiniportInterrupt) на текущем процессоре.

  4. ISR отключает прерывания на текущем ЦП и ставит DPC в очередь на этом же ЦП.

    Прерывания по-прежнему могут возникать на других ЦП, пока DPC работает на текущем ЦП.

  5. NDIS вызывает функцию MiniportInterruptDPC для каждого DPC в очереди. Каждый DPC:

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