Mengonfigurasi manajemen daya NetAdapterCx

Semua driver klien NetAdapterCx adalah driver Windows Driver Framework (WDF) dengan fungsi manajemen daya yang mirip dengan semua driver WDF. Driver NetAdapterCx memerlukan konfigurasi daya khusus jaringan tambahan seperti yang dijelaskan dalam artikel ini.

Perangkat jaringan yang khas mendukung 3 fitur manajemen daya umum:

Mengatur kemampuan daya adaptor jaringan

Setelah mengonfigurasi fungsionalitas manajemen daya WDF, langkah selanjutnya adalah mengatur kemampuan daya adaptor jaringan. Kemampuan daya dibagi menjadi dua kategori: Kemampuan offload protokol daya rendah dan kemampuan Wake up.

Kemampuan offload protokol daya rendah

Untuk informasi latar belakang tentang bagaimana tumpukan jaringan Windows menggunakan kemampuan ini, lihat Protocol Offloads untuk NDIS Power Management.

Driver klien mengatur kemampuan offload protokol daya rendah mereka dengan memanggil metode berikut yang sesuai untuk perangkat keras mereka:

Kemampuan bangun

Driver klien memanggil salah satu metode berikut untuk mengatur kemampuan bangun yang didukung perangkat keras mereka saat perangkat dalam keadaan daya rendah (Dx):

Konsumsi daya dan latensi resume

Ketika perangkat jaringan berada di Dx masih mengkonsumsi daya untuk melakukan offload dan lengan untuk bangun. Setelah perangkat memulai bangun dari Dx ada penundaan sebelum perangkat dapat mentransfer paket lagi. Semakin dalam keadaan daya internal perangkat menjadi semakin sedikit daya yang dikonsumsinya saat berada di Dx, tetapi semakin lama latensi resume.

Tabel di bawah ini menjelaskan pedoman umum mengenai trade-off antara konsumsi daya dan latensi resume untuk setiap kemampuan bangun.

Penting

Beberapa informasi berkaitan dengan produk yang telah dirilis sebelumnya yang dapat dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak membuat jaminan, tersurat maupun tersirat, sehubungan dengan informasi yang diberikan. Silakan merujuk ke dokumentasi khusus media dan Program Kompatibilitas Perangkat Keras Windows (WHCP) untuk informasi lebih lanjut tentang jenis perangkat tertentu.

Kemampuan Bangun Acara Bangun Konsumsi Daya Latensi Resume
Filter Paket Paket apa pun cocok dengan ReceivePacketFilter yang dikonfigurasi Harus lebih rendah daripada saat di D0, dan perangkat perlu disimpan dalam keadaan yang sesuai sehingga latensi resume sangat kecil <= 10 ms
Bitmap Paket apa pun cocok dengan pola bitmap yang dikonfigurasi Harus lebih rendah daripada ketika dipersenjatai untuk PacketFilter karena memiliki lebih banyak lintang dalam latensi resume <= 300 ms
MagicPacket Paket ajaib Mirip dengan Bitmap <= 300 ms
MediaChange Media yang terhubung atau terputus Mirip dengan Bitmap <= 300 ms

Contoh berikut menggambarkan bagaimana driver klien dapat menginisialisasi kemampuan dayanya. Hal ini dilakukan saat memulai netter namun sebelum menelepon NetAdapterStart. Dalam contoh ini, driver klien menetapkan kemampuan bitmap, perubahan media, dan bangun filter paket.

//
// 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);
}

Klien dapat secara opsional mendaftarkan EVT_NET_DEVICE_PREVIEW_POWER_OFFLOAD dan EVT_NET_DEVICE_PREVIEW_WAKE_SOURCE fungsi callback untuk menerima atau menolak protokol yang masuk offloads dan pola bangun.

Protokol pemrograman power offload dan pola bangun

Selama urutan powering down perangkat driver iterates melalui pola bangun diaktifkan dan protokol daya offloads dan program mereka ke dalam perangkat keras. Pengemudi melakukan ini dalam fungsi callback EvtDeviceArmWakeFromS0 dan EvtDeviceArmWakeFromSx .

Contoh berikut menunjukkan bagaimana driver klien mungkin berulang di atas daftar pola bangun untuk memeriksa bangun pada entri paket ajaib, kemudian berulang di atas daftar offload daya untuk memproses offload protokol 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;
}

Dalam perjalanan kembali ke daya tinggi , pengemudi biasanya menonaktifkan offloads daya protokol yang diprogram sebelumnya dan pola bangun di callback EvtDeviceDisarmWakeFromSx dan EvtDeviceDisarmWakeFromS0 yang sesuai.

Melaporkan alasan bangun

Penting

Adalah wajib bahwa driver klien melaporkan alasan bangun ke NetAdapterCx.

Ketika perangkat keras NIC membangunkan sistem, driver klien harus melapor ke NetAdapterCx yang sumber bangun memicu bangun. Untuk sebagian besar sumber bangun, driver menggunakan struktur NET_ADAPTER_WAKE_REASON_PACKET untuk menggambarkan paket jaringan yang memicu bangun.

Jika NET_WAKE_SOURCE_TYPE adalah:

Skenario manajemen daya untuk sistem Siaga Modern

Penting

Untuk platform Siaga Modern, driver perangkat jaringan harus:

Silakan merujuk ke dokumentasi khusus media dan WHCP untuk persyaratan Siaga Modern lengkap untuk jenis perangkat Anda.

OS bertanggung jawab untuk keputusan kebijakan daya perangkat jaringan. Misalnya, OS mengontrol kapan perangkat harus masuk ke Dx dan jenis peristiwa jaringan apa yang harus wake on perangkat. Tanggung jawab driver perangkat adalah untuk andal menjalankan urutan transisi daya ketika diminta oleh OS, dan kemudian memprogram perangkat keras mereka dengan benar untuk kondisi bangun yang ditetapkan oleh OS.

OS membuat keputusan kebijakan kekuasaan berdasarkan serangkaian faktor yang luas, termasuk kebijakan daya di seluruh sistem dan pilihan pengguna. Berikut ini adalah beberapa kebijakan daya umum yang digunakan untuk perangkat jaringan pada sistem Siaga Modern:

Penting

Kebijakan daya ini dapat berubah dengan pembaruan OS dan informasi di bawah ini diberikan sebagai contoh. Dependensi pada perilaku end-to-end tertentu dari OS harus dihindari.

  • Ketika layar PC menyala dan perangkat jaringan telah idling, OS meminta perangkat untuk pergi ke Dx dan mempersenjatainya untuk PacketFilter dan MediaChange wake.

  • Ketika PC memasuki Modern Standby dan perangkat jaringan telah idling, OS meminta NIC pergi ke Dx dan mempersenjatainya untuk Bitmap, MediaChange dan Magic Packet wake.

  • Ketika PC pergi ke Hibernasi, OS meminta NIC untuk pergi ke Dx dan mempersenjatainya untuk bangun Paket Sihir.