NetAdapterCx 전원 관리 구성

모든 NetAdapterCx 클라이언트 드라이버는 모든 WDF 드라이버와 유사한 전원 관리 기능을 갖춘 WDF(Windows 드라이버 프레임워크) 드라이버입니다. NetAdapterCx 드라이버에는 이 문서에 설명된 대로 추가 네트워킹 관련 전원 구성이 필요합니다.

일반적인 네트워킹 디바이스는 다음과 같은 세 가지 일반적인 전원 관리 기능을 지원합니다.

네트워크 어댑터의 전원 기능 설정

WDF 전원 관리 기능을 구성한 후 다음 단계는 네트워크 어댑터의 전원 기능을 설정하는 것입니다. 전원 기능은 저전력 프로토콜 오프로드 기능 과 절전 모드 해제 기능의 두 가지 범주로 나뉩 니다.

저전력 프로토콜 오프로드 기능

Windows 네트워크 스택에서 이 기능을 사용하는 방법에 대한 배경 정보는 NDIS 전원 관리를 위한 프로토콜 오프로드를 참조하세요.

클라이언트 드라이버는 하드웨어에 적합한 다음 메서드를 호출하여 저전력 프로토콜 오프로드 기능을 설정합니다.

절전 모드 해제 기능

클라이언트 드라이버는 다음 방법 중 어느 것을 호출하여 디바이스가 저전력 상태(Dx)에 있을 때 하드웨어에서 지원하는 절전 모드 해제 기능을 설정합니다.

전력 소비 및 대기 시간 다시 시작

네트워킹 디바이스가 Dx에 있는 경우 절전 모드 해제를 위해 오프로드 및 암을 수행하는 데 여전히 전원이 소모됩니다. 디바이스가 Dx에서 절전 모드 해제를 시작한 후 디바이스가 패킷을 다시 전송하기까지 지연이 있습니다. 내부 전원 상태가 깊어질수록 디바이스는 Dx에 있는 동안 소비하는 전력이 줄어들지만 다시 시작 대기 시간이 길어집니다.

다음 표에서는 각 절전 모드 해제 기능에 대한 전력 소비와 다시 시작 대기 시간 간의 절전 모드 해제에 대한 일반적인 지침을 설명합니다.

중요

일부 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 제공된 정보와 관련하여 명시적이거나 묵시적 보증을 하지 않습니다. 특정 디바이스 유형에 대한 자세한 내용은 미디어 관련 설명서 및 WHCP(Windows 하드웨어 호환성 프로그램)를 참조하세요.

절전 모드 해제 기능 Wake 이벤트 전력 소비 대기 시간 다시 시작
PacketFilter 구성된 ReceivePacketFilter와 일치하는 패킷 D0의 경우보다 낮아야 하며 다시 시작 대기 시간이 매우 작도록 디바이스를 적절한 상태로 유지해야 합니다. <= 10ms
Bitmap 모든 패킷이 구성된 비트맵 패턴과 일치 다시 시작 대기 시간에 더 많은 위도가 있으므로 PacketFilter에 대해 무장할 때보다 낮아야 합니다. <= 300ms
MagicPacket 매직 패킷 비트맵과 유사 <= 300ms
MediaChange 미디어 연결 또는 연결 끊김 비트맵과 유사 <= 300ms

다음 예제에서는 클라이언트 드라이버가 전원 기능을 초기화하는 방법을 보여 줍니다. NetAdapterStart를 호출하기 전에 Net 어댑터를 시작하는 동안 이 작업을 수행합니다. 이 예제에서 클라이언트 드라이버는 비트맵, 미디어 변경 및 패킷 필터 절전 모드 해제 기능을 설정합니다.

//
// Set bitmap wake capabilities
//
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES bitmapCapabilities;
NET_ADAPTER_WAKE_BITMAP_CAPABILITIES_INIT(&bitmapCapabilities);

bitmapCapabilities.BitmapPattern = TRUE;
bitmapCapabilities.MaximumPatternCount = deviceContext->PowerFiltersSupported;
bitmapCapabilities.MaximumPatternSize = 256;

NetAdapterWakeSetBitmapCapabilities(Adapter, &bitmapCapabilities);

//
// Set media change wake capabilities
//
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES mediaChangeCapabilities;
NET_ADAPTER_WAKE_MEDIA_CHANGE_CAPABILITIES_INIT(&mediaChangeCapabilities);

mediaChangeCapabilities.MediaConnect = TRUE;
mediaChangeCapabilities.MediaDisconnect = TRUE;

NetAdapterWakeSetMediaChangeCapabilities(Adapter, &mediaChangeCapabilities);

//
// Set packet filter wake capabilities
//
if(deviceContext->SelectiveSuspendSupported)
{
    NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES packetFilterCapabilities;
    NET_ADAPTER_WAKE_PACKET_FILTER_CAPABILITIES_INIT(&packetFilterCapabilities);

    packetFilterCapabilities.PacketFilterMatch = TRUE;

    NetAdapterWakeSetPacketFilterCapabilities(Adapter, &packetFilterCapabilities);
}

클라이언트는 필요에 따라 EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD 등록하고 콜백 함수 를 EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE 들어오는 프로토콜 오프로드 및 절전 모드 해제 패턴을 수락하거나 거부할 수 있습니다.

프로그래밍 프로토콜 전원 오프로드 및 절전 모드 해제 패턴

디바이스의 전원이 꺼진 시퀀스 동안 드라이버는 활성화된 절전 모드 해제 패턴 및 프로토콜 전원 오프로드를 반복하여 하드웨어에 프로그래밍합니다. 드라이버는 EvtDeviceArmWakeFromS0EvtDeviceArmWakeFromSx 콜백 함수에서 이 작업을 수행합니다.

다음 예제에서는 클라이언트 드라이버가 절전 모드 해제 패턴 목록을 반복하여 절전 모드 해제 패킷 항목에 대해 검사 다음 전원 오프로드 목록을 반복하여 IPv4 ARP 프로토콜 오프로드를 처리하는 방법을 보여 줍니다.

NTSTATUS
EvtDeviceArmWakeFromSx(
    WDFDEVICE     Device
)
{
    NETADAPTER adapter = GetDeviceContext(Device)->Adapter;

    //
    // Process wake source list
    //
    NET_WAKE_SOURCE_LIST wakeSourceList;
    NET_WAKE_SOURCE_LIST_INIT(&wakeSourceList);

    NetDeviceGetWakeSourceList(Device, &wakeSourceList);

    for(UINT32 i = 0; i < NetWakeSourceListGetCount(&wakeSourceList; i++); i++)
    {
        NETWAKESOURCE wakeSource = NetWakeSourceListGetElement(&wakeSourceList, i);
        NET_WAKE_SOURCE_TYPE const wakeSourceType = NetWakeSourceGetType(wakeSource);

        if(wakeSourceType == NetWakeSourceTypeMagicPacket)
        {
            // Enable magic packet wake for the adapter
            ..
            //
        }
    }

    //
    // Process power offload list
    //
    NET_POWER_OFFLOAD_LIST powerOffloadList;
    NET_POWER_OFFLOAD_LIST_INIT(&powerOffloadList);

    NetDeviceGetPowerOffloadList(Device, &powerOffloadList);

    for(UINT32 i = 0; i < NetPowerOffloadListGetCount(&powerOffloadList); i++)
    {
        NETPOWEROFFLOAD powerOffload = NetPowerOffloadGetElement(&powerOffloadList, i);
        NET_POWER_OFFLOAD_TYPE const powerOffloadType = NetPowerOffloadGetType(powerOffload);

        if(powerOffloadType == NetPowerOffloadTypeArp)
        {
            // Enable ARP protocol offload for the adapter
            ..
            //
        }
    }

    return STATUS_SUCCESS;
}

고성능으로 돌아가는 길에 드라이버는 일반적으로 해당 EvtDeviceDisarmWakeFromSxEvtDeviceDisarmWakeFromS0 콜백에서 이전에 프로그래밍된 프로토콜 전원 오프로드 및 절전 모드 해제 패턴을 사용하지 않도록 설정합니다.

절전 모드 해제 이유 보고

중요

클라이언트 드라이버는 NetAdapterCx에 절전 모드 해제 이유를 보고해야 합니다.

NIC 하드웨어가 시스템을 절전 모드 해제하면 클라이언트 드라이버는 절전 모드 해제 원본이 절전 모드 해제를 트리거한 NetAdapterCx에 보고해야 합니다. 대부분의 절삭 모드 해제 원본의 경우 드라이버는 NET_ADAPTER_WAKE_REASON_PACKET 구조를 사용하여 절삭 해제를 트리거한 네트워크 패킷을 설명합니다.

NET_WAKE_SOURCE_TYPE 인 경우:

최신 대기 시스템에 대한 전원 관리 시나리오

중요

최신 대기 플랫폼의 경우 네트워킹 디바이스 드라이버는 다음을 수행해야 합니다.

디바이스 유형에 대한 전체 최신 대기 요구 사항은 미디어별 설명서 및 WHCP를 참조하세요.

OS는 네트워킹 디바이스의 전원 정책 결정을 담당합니다. 예를 들어 OS는 디바이스가 Dx로 이동해야 하는 시기와 디바이스가 절전 모드에서 해제해야 하는 네트워크 이벤트 유형을 제어합니다. 디바이스 드라이버의 책임은 OS에서 요청할 때 전원 전환 시퀀스를 안정적으로 실행한 다음 OS에서 설정한 절전 모드 해제 조건에 맞게 하드웨어를 올바르게 프로그래밍하는 것입니다.

OS는 시스템 차원의 전원 정책 및 사용자 선택을 비롯한 광범위한 요인에 따라 전원 정책을 결정합니다. 다음은 최신 대기 시스템의 네트워킹 디바이스에 사용되는 몇 가지 일반적인 전원 정책입니다.

중요

이러한 전원 정책은 OS 업데이트로 변경될 수 있으며 다음 정보가 예제로 제공됩니다. OS의 특정 엔드투엔드 동작에 대한 종속성은 피해야 합니다.

  • PC 화면이 켜지고 네트워킹 디바이스가 유휴 상태이면 OS는 디바이스에 Dx로 이동하여 PacketFilter 및 MediaChange 절전 모드 해제를 위해 디바이스를 무기화하도록 요청합니다.

  • PC가 최신 대기 상태로 들어가고 네트워킹 디바이스가 유휴 상태이면 OS는 NIC에 Dx로 이동하여 비트맵, MediaChange 및 매직 패킷 절전 모드 해제를 위해 이를 무기화하도록 요청합니다.

  • PC가 최대 절전 모드로 전환되면 OS는 NIC에 Dx로 이동하여 매직 패킷 절전 모드 해제를 위해 이를 무기화하도록 요청합니다.

참고: NetAdapterCx 클라이언트 드라이버는 전원 관리 탭의 표시 유형을 제어합니다. 자세한 내용은 디바이스 유휴 및 절전 모드 해제 동작의 사용자 제어를 참조하세요.