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