次の方法で共有


ウェイクなしタイマー

Windows 8.1 以降では、ドライバーでウェイクなしタイマーを使用して、プロセッサが低電力状態から不必要にスリープ解除されないようにすることができます。 ウェイクなしタイマーは、プロセッサを低電力状態に維持することで電力消費を低減し、タブレットなどのモバイル コンピューターがバッテリ動作できる時間を延長します。

プロセッサがアクティブで実行状態のときにのみタイマーを無効にすることができます。 プロセッサが低電力状態でタイマーの有効期間が経過したときに、直ちにタイマーを無効にする必要がある場合は、タイマーからプロセッサをスリープ解除する必要があります。 ただし、ウェイクなしタイマーの有効期間が経過してもプロセッサが低電力状態にある場合、タイマー以外の何らかの理由でプロセッサがスリープ解除されるまで、このタイマーは待機します。 必要に応じて、ウェイクなしタイマーの有効期間が経過した後の最大許容遅延時間をドライバーで指定できます。これにより、タイマーの有効期間が過ぎた後、この最大許容遅延時間が経過しても他の何らかの原因でプロセッサがスリープ解除されない場合は、タイマーからプロセッサをスリープ解除します。

ドライバーでウェイクなしタイマーを使用して、プロセッサがアクティブな状態である場合にのみ実行する必要がある、重要ではない操作を開始できます。 たとえば、ドライバーでウェイクなしタイマーを使用して、メモリ バッファーに蓄積された状態情報を定期的にファイルへフラッシュできます。 この状態情報には、プロセッサがアクティブなときにのみドライバーが実行する処理作業が記述されています。 プロセッサが低電力状態にある場合は状態情報が生成されないので、プロセッサをスリープ解除する必要がありません。

ウェイクなしタイマーを作成するには、WDM ドライバーから ExAllocateTimer ルーチンを呼び出します。 この呼び出しでは、ドライバーから Attributes パラメーターに EX_TIMER_NO_WAKE フラグ ビットが設定されます。

一定の時間が経過するとウェイクなしタイマーが無効になるように設定するには、ドライバーから ExSetTimer ルーチンを呼び出します。 この呼び出しでは、ウェイクなしタイマーの有効期間が経過した後、プロセッサをスリープ解除するまでウェイクなしタイマーが待機する時間をドライバーで指定できます。 この許容遅延時間は、ドライバーから EXT_SET_PARAMETERS 構造体の NoWakeTolerance メンバーに書き込まれます。この構造体は、ExSetTimer ルーチンに入力パラメーターとしてドライバーから渡されます。 ドライバーから NoWakeTolerance メンバーを特別な値 EX_TIMER_UNLIMITED_TOLERANCE に設定すると、タイマーはプロセッサをスリープ解除しなくなります。したがって、何らかの理由でプロセッサがスリープ解除されるまでタイマーを無効にすることはできません。

カーネル モード ドライバー フレームワーク (KMDF) ドライバーまたはユーザー モード ドライバー フレームワーク (UMDF) ドライバーは、WdfTimerCreate メソッドを呼び出して、ウェイクなしタイマーを作成できます。 この呼び出しでは、WDF_TIMER_CONFIG 構造体へのポインターがドライバーからパラメーターとして渡されます。 プロセッサをスリープ解除しないウェイクなしタイマーを作成するには、この構造体の TolerableDelay メンバーにドライバーから定数 TolerableDelayUnlimited を設定します。 この定数は、Windows 8.1 以降および KMDF バージョン 1.13 以降または UMDF 2.0 以降でサポートされています。

結合可能タイマーとの比較

Windows 7 で KeSetCoalescableTimer ルーチンが導入されました。 このルーチンを使用すると、タイマーの有効期限に対する許容時間をドライバーで指定できます。 多くの場合、この情報をオペレーティング システムで使用して、2 つ以上のタイマー割り込みを 1 つの割り込みに結合できます。 複数のタイマーの有効期限が同程度で、その許容時間に重複がある場合は、その重複範囲で発生した 1 つのタイマー割り込みによって、すべてのタイマーの動作要件が成立します。

タイマー結合の主な利点は、各タイマーの有効期限の間でプロセッサが低電力状態を維持できる時間を延長できることです。 したがって、ドライバーでは同様の目的でタイマー結合とウェイクなしタイマーを使用します。

ただし、結合可能タイマーの動作は、ウェイクなしタイマーの動作とは異なります。 特に大きな違いは、ウェイクなしタイマーに指定した許容遅延時間は、プロセッサが低電力状態の場合にのみ適用されることに対し、結合可能タイマーの有効期限に指定した許容時間は、プロセッサが低電力状態にあるかどうかに関係なく適用されることです。 結合可能タイマーでは、ドライバーで有効期限の許容時間を長くすることで、タイマーがプロセッサをスリープ解除する可能性を低くすることができますが、プロセッサがアクティブなときにタイマーの精度が低下する副作用があります。 一方、ウェイクなしタイマーに指定した許容遅延時間は、プロセッサがアクティブなときのタイマーの精度には影響しません。 多くのドライバーでは、電源消費量を低減する方法としてウェイクなしタイマーが優れています。