Обзор выборочной приостановки NDIS
Начиная с версии NDIS 6.30, интерфейс выборочной приостановки NDIS позволяет NDIS приостанавливать неактивный сетевой адаптер путем перехода адаптера в состояние с низким энергопотреблением. Это позволяет системе снизить нагрузку на ЦП и электроэнергию адаптера.
Выборочная приостановка NDIS особенно полезна для сетевых адаптеров, основанных на интерфейсе USB версии 1.1 и 2.0. Эти адаптеры постоянно опрашиваются на наличие полученных пакетов независимо от того, активны они или простаивают. Приостанавливая неактивные USB-адаптеры, затраты на ЦП можно сократить на целых 10 %.
Выборочная приостановка NDIS основана на технологии выборочной приостановки USB . Тем не менее выборочная приостановка NDIS предназначена для независимой от шины. Таким образом, независимые от шины пакеты запросов ввода-вывода (IRP) для выборочной приостановки выдаются NDIS. Это делает водителя минипорта ответственным за выдачу любых IRP, необходимых для выборочной приостановки на конкретной шине. Например, драйверы минипорта для сетевых адаптеров USB выдают драйверу USB-шины IRP-запрос простоя (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) для драйвера шины USB во время выборочной операции приостановки.
NDIS и водитель минипорта участвуют в выборочной приостановке NDIS следующим образом:
Если драйвер минипорта зарегистрировал поддержку выборочной приостановки NDIS, NDIS отслеживает активность ввода-вывода сетевого адаптера. Действие ввода-вывода включает в себя указания на получение пакетов, завершение отправки пакетов и запросы OID, обрабатываемые драйвером мини-порта.
NDIS считает, что сетевой адаптер неактивен, если он был неактивен дольше указанного периода простоя. В этом случае NDIS начинает выборочную операцию приостановки, отправляя драйверу мини-порта уведомление о бездействии, чтобы перевести сетевой адаптер в состояние с низким энергопотреблением.
Примечание
Продолжительность периода простоя определяется значением стандартизованного INF-ключевое слово *SSIdleTimeout. Дополнительные сведения об этом ключевое слово см. в разделе Стандартизированные ключевые слова INF для выборочной приостановки NDIS.
Дополнительные сведения о том, как NDIS определяет, что сетевой адаптер неактивен, см. в разделе Как NDIS обнаруживает бездействующие сетевые адаптеры.
NDIS отправляет уведомление о бездействии драйверу мини-порта, вызывая функцию обработчика MiniportIdleNotification драйвера. При вызове этой функции драйвер мини-порта определяет, может ли сетевой адаптер перейти в состояние с низким энергопотреблением. Водитель минипорта выполняет это определение в определенной автобусе манере.
Например, драйвер usb miniport определяет, может ли сетевой адаптер перейти в состояние с низким энергопотреблением, отправляя IRP-запрос бездействия USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) базовому драйверу шины USB. Это сообщает драйверу шины о том, что сетевой адаптер неактивен, и подтверждает, можно ли перевести адаптер в состояние с низким энергопотреблением.
Примечание
Драйвер мини-порта должен указать процедуру обратного вызова и завершения для IRP запроса простоя USB.
Дополнительные сведения о том, как драйвер минипорта обрабатывает уведомление о простое, см. в разделе Обработка уведомления о выборочной приостановке простоя NDIS.
После того как драйвер мини-порта подтвердит, что сетевой адаптер может перейти в состояние с низким энергопотреблением, он вызывает NdisMIdleNotificationConfirm. В этом вызове драйвер мини-порта указывает наименьшее состояние питания, к которому может перейти сетевой адаптер.
При вызове NdisMIdleNotificationConfirm NDIS отправляет запросы OID драйверу мини-порта, чтобы подготовить адаптер к переходу в состояние с низким энергопотреблением. NDIS также выдает irps базовому драйверу шины, чтобы установить адаптер в маломощное состояние.
После приостановки сетевого адаптера он остается в состоянии низкого энергопотребления до тех пор, пока не будет отменено уведомление о неактивном режиме.
NDIS отменяет незавершенные уведомления о простое, вызывая функцию обработчика MiniportCancelIdleNotification драйвера miniport. NDIS вызывает эту функцию обработчика, если выполняется одно или несколько из следующих условий:
NDIS обнаруживает отправку запросов пакетов или запросов OID, которые выдаются драйверу мини-порта из чрезмерного протокола или фильтров.
Сетевой адаптер сигнализирует о событии пробуждения. Это может произойти, когда адаптер получает пакет или обнаруживает изменение состояния подключения к мультимедиа.
После приостановки работы сетевого адаптера драйвер мини-порта также может завершить уведомление о бездействии, чтобы вернуть адаптер в состояние полного питания. Причины этого зависят от конструкции и требований драйвера и адаптера.
Дополнительные сведения о том, как NDIS отменяет уведомление о простое, см. в разделе Отмена уведомления о выборочной приостановке простоя NDIS.
Дополнительные сведения о том, как драйвер мини-порта завершает уведомление о простое, см. в разделе Завершение уведомления о выборочной приостановке простоя NDIS.
При вызове функции обработчика MiniportCancelIdleNotification драйвер мини-порта определяет, может ли сетевой адаптер вернуться в состояние полной мощности. Водитель также отменяет все ранее выданные ему ранее для уведомления о бездействии irp для шины.
Определение того, что сетевой адаптер может перейти в состояние полного питания, зависит от шины. Например, при вызове MiniportCancelIdleNotification мини-порт USB должен отменить ранее выданный запрос простоя USB IRP. Как только USB-драйвер отменит IRP, он вызывает процедуру завершения IRP, чтобы подтвердить, что IRP отменена и сетевой адаптер может вернуться в состояние полного питания. В контексте процедуры завершения драйвер минипорта вызывает NdisMIdleNotificationComplete.
Когда мини-порт определяет, что сетевой адаптер может вернуться в состояние полной мощности, он вызывает NdisMIdleNotificationComplete. Этот вызов уведомляет NDIS о том, что уведомление о бездействии завершено. Затем NDIS переходит к завершению выборочной операции приостановки путем перехода сетевого адаптера в состояние полной мощности.
При вызове NdisMIdleNotificationComplete NDIS отправляет запросы OID драйверу мини-порта, чтобы подготовить адаптер к переходу в состояние полного питания. NDIS также выдает irP базовому драйверу шины, чтобы установить для адаптера состояние полного питания.
Когда сетевой адаптер возвращается в состояние полного питания, операция выборочной приостановки завершается. NDIS возобновляет мониторинг активности ввода-вывода сетевого адаптера. Если адаптер становится неактивным после другого периода простоя, NDIS отправляет драйверу мини-порта уведомление о бездействии, чтобы приостановить работу сетевого адаптера.