다음을 통해 공유


NetAdapterCx 전원 관리 구성

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

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

  • 네트워킹 디바이스는 OS의 지시에 따라 Dx(저전력) 상태로 들어갈 수 있습니다.

    • 클라이언트 드라이버는 선택적 WDF 이벤트 콜백을 등록하여 전원 전환에 대한 알림을 받습니다. 이 작업은 함수 드라이버의 PnP 및 전원 관리 지원을 설명한에 기술되어 있습니다.

    • 시스템이 작동 중(S0) 상태로 유지되는 동안 네트워크 디바이스가 Dx 상태에 진입할 수 있는 경우 클라이언트 드라이버는 유휴 전원을 지원해야 합니다. 유휴 전원 다운 지원은 을 참조하세요. 모든 WDF 디바이스에서 사용할 수 디바이스 유휴 및 절전 모드 해제 동작의 표준 사용자 제어 외에도 NetAdapterCx는 전원 관리 표준화된 INF 키워드에 정의된 대로 *IdleRestriction 통해 추가 네트워크별 유휴 제어를 허용합니다.

  • 네트워킹 디바이스가 Dx 상태인 경우 미리 구성된 절전 모드 해제 조건이 발생한 경우 절전 모드 해제 신호를 트리거할 수 있습니다.

    • WDF 디바이스가 시스템 전체의 저전력 상태에서 시스템을 절전 모드 해제하는 방법에 대한 자세한 내용은 지원 시스템 절전 모드 해제참조하세요.

    • NetAdapterCx는 클라이언트 드라이버가 하드웨어에 대해 웨이크 업을 지원하는 네트워크 이벤트를 선언할 수 있도록 하는 API(응용 프로그램 인터페이스)를 제공합니다. 네트워크 어댑터전원 기능 설정을 참조하세요.

  • 네트워킹 디바이스가 Dx 상태인 경우에도 호스트 시스템을 깨우지 않고도 네트워크에서 호스트 시스템의 현재 상태를 유지하기 위해 일반적으로 사용되는 일부 네트워크 요청에 응답할 수 있습니다. 네트워크 어댑터전원 기능 설정을 참조하세요.

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

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

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

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

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

깨우기 기능

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

전원 소비 및 대기 시 복구 지연

네트워킹 디바이스가 Dx 상태에 있을 때, 절전 기능을 수행하고 깨어나기 준비를 유지하기 위해 여전히 전력을 소비합니다. 디바이스가 Dx에서 절전 모드 해제를 시작한 후 디바이스가 패킷을 다시 전송하기 전에 지연이 있습니다. 내부 전원 상태가 깊을수록 디바이스는 Dx에 있는 동안 사용하는 전력이 줄어들지만 다시 시작 대기 시간이 길어집니다.

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

중요하다

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

웨이크 기능 웨이크 이벤트 전력 소비 대기 시간 다시 시작
PacketFilter 구성된 ReceivePacketFilter와 일치하는 모든 패킷 D0보다 낮아야 하며, 다시 시작 대기 시간이 매우 작도록 디바이스를 적절한 상태로 유지해야 합니다. <= 10ms
비트맵 구성된 비트맵 패턴과 일치하는 모든 패킷 재개 대기 시간이 더 여유롭기 때문에 PacketFilter를 위한 무장 시보다 낮아야 합니다. <= 300ms
MagicPacket 매직 패킷 비트맵과 유사 <= 300ms
MediaChange 미디어 연결 또는 연결 끊김 비트맵과 유사 <= 300ms

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

//
// 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_OFFLOADEVT_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++)
    {
        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 = NetPowerOffloadListGetElement(&powerOffloadList, i);
        NET_POWER_OFFLOAD_TYPE const powerOffloadType = NetPowerOffloadGetType(powerOffload);

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

    return STATUS_SUCCESS;
}

고출력 모드로 돌아가는 과정에서 드라이버는 일반적으로 해당 EvtDeviceDisarmWakeFromSxEvtDeviceDisarmWakeFromS0 콜백에서 이전에 프로그래밍된 프로토콜 전원 오프로드 및 절전 모드 해제 패턴을 사용하지 않도록 설정합니다. NetDeviceGetPowerOffloadListNetDeviceGetWakeSourceList 를 사용하여 콜백에서 프로토콜 전원 오프로드 및 절전 모드 해제 패턴을 검색할 수 있습니다.

절전 모드 해제 이유를 보고합니다

중요하다

클라이언트 드라이버는 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 상태로 전환하고 비트맵, 미디어 변경 및 매직 패킷 웨이크를 준비하도록 요청합니다.

  • PC가 최대 절전 모드로 전환되면, OS는 NIC에 Dx 상태로 전환하여 Magic Packet을 통해 절전 모드 해제를 준비하도록 요청합니다.

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