Timer No-Wake

Dimulai dengan Windows 8.1, driver dapat menggunakan timer tanpa bangun untuk menghindari membangunkan prosesor yang tidak perlu dari status daya rendah. Dengan menjaga prosesor dalam keadaan daya rendah, timer tanpa bangun mengurangi konsumsi daya dan memperpanjang waktu tablet atau komputer seluler lainnya dapat berjalan pada pengisian daya baterai.

Timer hanya dapat kedaluwarsa saat prosesor dalam keadaan aktif dan berjalan. Jika timer mencapai waktu kedaluwarsanya saat prosesor dalam status daya rendah, dan timer perlu segera kedaluwarsa, timer harus membangunkan prosesor. Namun, ketika timer tanpa bangun mencapai waktu kedaluwarsanya dan prosesor dalam keadaan daya rendah, timer ini menunggu kedaluwarsa sampai prosesor bangun karena beberapa alasan selain timer. Sebagai opsi, driver dapat menentukan toleransi penundaan maksimum untuk timer tanpa bangun sehingga jika prosesor tidak bangun (karena alasan lain) dalam toleransi penundaan maksimum setelah waktu kedaluwarsa timer, timer membangunkan prosesor.

Driver dapat menggunakan timer tanpa bangun untuk memulai operasi nonkritis yang perlu dilakukan hanya ketika prosesor dalam keadaan aktif. Misalnya, driver mungkin menggunakan timer tanpa bangun untuk secara berkala menghapus informasi status akumulasi dari buffer memori ke file. Informasi status ini menjelaskan pekerjaan pemrosesan yang dilakukan driver hanya ketika prosesor aktif. Ketika prosesor dalam status berdaya rendah, tidak ada informasi status yang dihasilkan, dan tidak perlu membangunkan prosesor.

Untuk membuat timer tanpa bangun, driver WDM memanggil rutinitas ExAllocateTimer . Dalam panggilan ini, driver mengatur bendera EX_TIMER_NO_WAKE bit dalam parameter Atribut .

Untuk mengatur timer tanpa bangun kedaluwarsa pada waktu yang tepat, driver memanggil rutinitas ExSetTimer . Dalam panggilan ini, driver dapat menentukan berapa lama timer tidak bangun harus menunggu setelah mencapai waktu kedaluwarsa sebelum timer membangunkan prosesor. Driver menulis waktu penundaan yang dapat ditoleransi ini kepada anggota NoWakeTolerance dalam struktur EXT_SET_PARAMETERS yang diteruskan driver sebagai parameter input ke rutinitas ExSetTimer . Jika driver menetapkan anggota NoWakeTolerance ke nilai khusus EX_TIMER_UNLIMITED_TOLERANCE, timer tidak pernah membangunkan prosesor dan, dengan demikian, tidak dapat kedaluwarsa sampai prosesor bangun karena alasan lain.

Driver Kernel-Mode Driver Framework (KMDF) atau driver User-Mode Driver Framework (UMDF) dapat memanggil metode WdfTimerCreate untuk membuat timer tanpa bangun. Dalam panggilan ini, driver meneruskan pointer ke struktur WDF_TIMER_CONFIG sebagai parameter. Untuk membuat timer tanpa bangun yang tidak pernah membangunkan prosesor, driver mengatur anggota TolerableDelay dari struktur ini ke konstanta TolerableDelayUnlimited . Konstanta ini didukung dimulai dengan Windows 8.1 dan KMDF versi 1.13 atau UMDF 2.0.

Perbandingan dengan timer yang dapat dikoales

Rutinitas KeSetCoalescableTimer diperkenalkan di Windows 7. Rutinitas ini memungkinkan driver untuk menentukan berapa banyak toleransi yang diizinkan dalam waktu kedaluwarsa timer. Sering kali, sistem operasi dapat menggunakan informasi ini untuk mengumpulkan dua atau lebih interupsi timer menjadi satu gangguan. Jika waktu kedaluwarsa beberapa timer cukup dekat satu sama lain sehingga jendela toleransi mereka tumpang tindih, satu timer mengganggu di wilayah tumpang tindih dapat memenuhi persyaratan waktu semua timer ini.

Manfaat utama dari koalescing timer adalah bahwa ia memperpanjang waktu prosesor dapat tetap dalam keadaan berdaya rendah antara kedaluwarsa timer. Dengan demikian, driver menggunakan timer coalescing dan timer tanpa bangun untuk tujuan yang sama.

Namun, timer yang dapat digabungkan berperilaku berbeda dari timer tanpa bangun. Secara khusus, penundaan yang dapat ditoleransi yang ditentukan untuk timer tanpa bangun hanya berlaku ketika prosesor berada dalam status daya rendah, sedangkan toleransi yang ditentukan untuk kedaluwarsa timer yang dapat dikoalescable berlaku terlepas dari apakah prosesor berada dalam status daya rendah. Untuk timer coalescable, driver dapat meningkatkan jumlah toleransi dalam waktu kedaluwarsa untuk mengurangi kemungkinan timer membangunkan prosesor, tetapi meningkatkan toleransi memiliki efek samping mengurangi akurasi timer ketika prosesor aktif. Sebaliknya, penundaan yang dapat ditoleransi yang ditentukan untuk timer tanpa bangun tidak memengaruhi akurasi timer saat prosesor aktif. Bagi banyak driver, timer tanpa bangun mungkin merupakan cara yang lebih baik untuk mengurangi konsumsi daya.