Bagikan melalui


No-Wake Timer

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

Timer hanya dapat kedaluwarsa saat prosesor dalam status aktif dan berjalan. Jika timer mencapai waktu kedaluwarsanya ketika prosesor dalam keadaan berdaya rendah, dan timer perlu segera kedaluwarsa, timer harus membangunkan prosesor. Namun, ketika timer tanpa pemicu bangun mencapai waktu berakhirnya dan prosesor dalam keadaan berdaya rendah, timer ini menunggu kedaluwarsa sampai prosesor bangun karena alasan lain 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 akan membangunkan prosesor.

Driver dapat menggunakan timer tidak membangunkan untuk memulai operasi yang tidak kritis dan 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 daya rendah, tidak ada informasi status yang dihasilkan, dan tidak perlu membangunkan prosesor.

Untuk membuat "no-wake timer", driver WDM memanggil rutinitas ExAllocateTimer. Dalam panggilan ini, sang pengemudi mengatur bendera bit EX_TIMER_NO_WAKE dalam parameter Atribut.

Untuk mengatur "timer tanpa aktivitas bangun" agar kedaluwarsa pada waktu yang telah ditentukan, driver memanggil rutinitas ExSetTimer. Dalam panggilan ini, driver dapat menentukan berapa lama timer tanpa 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 mengatur 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 digabung.

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 menggabungkan dua atau lebih interupsi timer ke dalam satu interupsi. Jika waktu kedaluwarsa beberapa timer cukup dekat satu sama lain sehingga jendela toleransi mereka tumpang tindih, gangguan timer tunggal di wilayah tumpang tindih dapat memenuhi persyaratan waktu semua timer ini.

Manfaat utama timer coalescing adalah dengan memperpanjang waktu prosesor dapat tetap dalam keadaan berdaya rendah antara kedaluwarsa pengatur waktu. Oleh karena itu, driver menggunakan "timer coalescing" dan "no-wake timer" untuk tujuan serupa.

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 dalam status daya rendah, sedangkan toleransi yang ditentukan untuk kedaluwarsa timer yang dapat dikoaleskasi berlaku terlepas dari apakah prosesor berada dalam status daya rendah. Untuk timer yang dapat dikoaleskasi, 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.