NDIS 選擇性暫停概觀
從 NDIS 6.30 開始,NDIS 選擇性暫停介面可讓 NDIS 將介面卡轉換為低電源狀態來暫停閒置網路介面卡。 這可讓系統減少介面卡的 CPU 和電源負荷。
NDIS 選擇性暫停特別適用于以 USB v1.1 和 v2.0 介面為基礎的網路介面卡。 不論這些介面卡是否為作用中或閒置,都會持續輪詢接收的封包。 藉由暫停閒置的 USB 介面卡,CPU 額外負荷可以減少 10%。
NDIS 選擇性暫停是以 USB 選擇性暫停 技術為基礎。 不過,NDIS 選擇性暫停的設計目的是要與匯流排無關。 如此一來,NDIS 會發出與匯流排無關的 I/O 要求封包 (IRP) 。 這可讓迷你埠驅動程式負責在特定匯流排上發出選擇性暫停所需的任何 IRP。 例如,USB 網路介面卡的迷你埠驅動程式會在選擇性暫停作業期間發出匯流排特定的 USB 閒置要求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) USB 匯流排驅動程式。
NDIS 和迷你埠驅動程式會以下列方式參與 NDIS 選擇性暫停:
如果迷你埠驅動程式已註冊其對 NDIS 選擇性暫停的支援,NDIS 會監視網路介面卡的 I/O 活動。 I/O 活動包括接收封包指示、傳送封包完成,以及迷你埠驅動程式處理的 OID 要求。
如果網路介面卡處於非作用中狀態超過指定的閒置逾時期間,NDIS 會將網路介面卡視為閒置。 發生這種情況時,NDIS 會發出閒置通知給迷你埠驅動程式,以將網路介面卡轉換為低電源狀態,以啟動選擇性暫停作業。
注意
閒置逾時期間的長度是由 *SSIdleTimeout 標準化 INF 關鍵字的值所指定。 如需此關鍵字的詳細資訊,請參閱 NDIS 選擇性暫停的標準化 INF 關鍵字。
如需 NDIS 如何判斷網路介面卡閒置的詳細資訊,請參閱 NDIS 如何偵測閒置網路介面卡。
NDIS 會藉由呼叫驅動程式的 MiniportIdleNotification 處理常式函式,對迷你埠驅動程式發出閒置通知。 呼叫此函式時,迷你埠驅動程式會判斷網路介面卡是否可以轉換為低電源狀態。 迷你埠驅動程式會以匯流排特定的方式執行這項判斷。
例如,USB 迷你埠驅動程式會發出 USB 閒置要求 IRP (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 到基礎 USB 匯流排驅動程式,來判斷網路介面卡是否可以轉換到低電源狀態。 這會通知匯流排驅動程式網路介面卡處於閒置狀態,並確認介面卡是否可以轉換為低電源狀態。
注意
迷你埠驅動程式必須指定 USB 閒置要求 IRP 的回呼和完成常式。
如需迷你埠驅動程式如何處理閒置通知的詳細資訊,請參閱 處理 NDIS 選擇性暫停閒置通知。
在迷你埠驅動程式確認網路介面卡可以轉換為低電源狀態之後,它會呼叫 NdisMIdleNotificationConfirm。 在此呼叫中,迷你埠驅動程式會指定網路介面卡可以轉換到的最低電源狀態。
呼叫 NdisMIdleNotificationConfirm 時,NDIS 會發出 OID 要求給迷你埠驅動程式,以準備介面卡以轉換至低電源狀態。 NDIS 也會對基礎匯流排驅動程式發出 IRP,以將介面卡設定為低電源狀態。
在網路介面卡暫停之後,它會維持低電源狀態,直到取消未處理的閒置通知為止。
NDIS 會藉由呼叫迷你埠驅動程式的 MiniportCancelIdleNotification 處理常式函式來取消未處理的閒置通知。 如果下列一或多個條件成立,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 會繼續監視網路介面卡的 I/O 活動。 如果介面卡在另一個閒置逾時期間後變成非作用中,NDIS 會發出閒置通知給迷你埠驅動程式,以暫停網路介面卡。