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


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 не требуется атомарная операция.