Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы минипортов могут поддерживать сигнальные прерывания сообщений (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 не требуется атомарная операция.