NDIS 선택적 일시 중단 개요
NDIS 6.30부터 NDIS 선택적 일시 중단 인터페이스를 사용하면 어댑터를 저전력 상태로 전환하여 NDIS에서 유휴 네트워크 어댑터를 일시 중단할 수 있습니다. 이를 통해 시스템은 어댑터의 CPU 및 전원 오버헤드를 줄일 수 있습니다.
NDIS 선택적 일시 중단은 USB v1.1 및 v2.0 인터페이스를 기반으로 하는 네트워크 어댑터에 특히 유용합니다. 이러한 어댑터는 활성 또는 유휴 상태인지에 관계없이 수신된 패킷에 대해 지속적으로 폴링됩니다. 유휴 USB 어댑터를 일시 중단하면 CPU 오버헤드를 최대 10%까지 줄일 수 있습니다.
NDIS 선택적 일시 중단은 USB 선택적 일시 중단 기술을 기반으로 합니다. 그러나 NDIS 선택적 일시 중단은 버스 독립적으로 설계되었습니다. 이러한 방식으로 선택적 일시 중단에 대한 버스 독립적 I/O 요청 패킷(I/O)은 NDIS에서 발급됩니다. 이렇게 하면 미니포트 드라이버가 특정 버스에서 선택적 일시 중단에 필요한 모든 IRP를 발급할 책임이 있습니다. 예를 들어 USB 네트워크 어댑터용 미니포트 드라이버는 선택적 일시 중단 작업 중에 버스별 USB 유휴 요청 IRP(IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)를 USB 버스 드라이버에 발급합니다.
NDIS 및 미니포트 드라이버는 다음과 같은 방식으로 NDIS 선택적 일시 중단에 참여합니다.
미니포트 드라이버가 NDIS 선택적 일시 중단에 대한 지원을 등록한 경우 NDIS는 네트워크 어댑터의 I/O 작업을 모니터링합니다. I/O 활동에는 수신 패킷 표시, 패킷 전송 완료 및 미니포트 드라이버에서 처리하는 OID 요청이 포함됩니다.
NDIS는 네트워크 어댑터가 지정된 유휴 시간 제한 기간보다 오랫동안 비활성 상태인 경우 유휴 상태로 간주합니다. 이 경우 NDIS는 네트워크 어댑터를 저전력 상태로 전환하기 위해 미니포트 드라이버에 유휴 알림을 실행하여 선택적 일시 중단 작업을 시작합니다.
참고
유휴 시간 제한 기간의 길이는 표준화된 INF 키워드(keyword) *SSIdleTimeout 값으로 지정됩니다. 이 키워드(keyword) 대한 자세한 내용은 NDIS 선택적 일시 중단에 대한 표준화된 INF 키워드를 참조하세요.
NDIS에서 네트워크 어댑터가 유휴 상태인지 확인하는 방법에 대한 자세한 내용은 NDIS에서 유휴 네트워크 어댑터를 검색하는 방법을 참조하세요.
NDIS는 드라이버의 MiniportIdleNotification 처리기 함수를 호출하여 미니포트 드라이버에 유휴 알림을 발급합니다. 이 함수가 호출되면 미니포트 드라이버는 네트워크 어댑터가 저전력 상태로 전환할 수 있는지 여부를 결정합니다. 미니포트 드라이버는 버스별 방식으로 이 결정을 수행합니다.
예를 들어 USB 미니포트 드라이버는 기본 USB 버스 드라이버에 USB 유휴 요청 IRP(IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)를 실행하여 네트워크 어댑터가 저전력 상태로 전환할 수 있는지 여부를 결정합니다. 이렇게 하면 버스 드라이버에 네트워크 어댑터가 유휴 상태임을 알리고 어댑터를 저전력 상태로 전환할 수 있는지 여부를 확인합니다.
참고
미니포트 드라이버는 USB 유휴 요청 IRP에 대한 콜백 및 완료 루틴을 지정해야 합니다.
미니포트 드라이버가 유휴 알림을 처리하는 방법에 대한 자세한 내용은 NDIS 선택적 일시 중단 유휴 알림 처리를 참조하세요.
미니포트 드라이버가 네트워크 어댑터가 저전력 상태로 전환될 수 있음을 확인한 후 NdisMIdleNotificationConfirm을 호출합니다. 이 호출에서 미니포트 드라이버는 네트워크 어댑터가 전환할 수 있는 가장 낮은 전원 상태를 지정합니다.
NdisMIdleNotificationConfirm이 호출되면 NDIS는 미니포트 드라이버에 OID 요청을 발행하여 어댑터를 저전력 상태로 전환할 준비를 합니다. 또한 NDIS는 어댑터를 저전력 상태로 설정하기 위해 기본 버스 드라이버에 IRP를 발급합니다.
네트워크 어댑터가 일시 중단된 후 미해결 유휴 알림이 취소될 때까지 저전력 상태로 유지됩니다.
NDIS는 미니포트 드라이버의 MiniportCancelIdleNotification 처리기 함수를 호출하여 미해결 유휴 알림을 취소합니다. 다음 조건 중 하나 이상이 true인 경우 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는 네트워크 어댑터를 일시 중단하기 위해 미니포트 드라이버에 유휴 알림을 보냅니다.