潜在的な障害とは、他のアクションが発生するまで明らかにならない障害のことです。たとえば、コールドスタンバイモードのデバイスで発生したハードウェア障害は、マスターデバイスで障害が発生するまで検出されない可能性があります。マスターデバイスで障害が発生した時点で、システムに 2 つの障害デバイスがあり、動作を継続できない可能性があることが判明します。
一般論として、未検出のままの潜在的障害は、最終的にシステム障害につながります。潜在的な障害を検査しなかった場合は、冗長型システム全体の可用性が損なわれる危険があります。これを回避するには、デバイスドライバで潜在的な障害を検出し、他の障害と同様に報告しなければなりません。
ドライバには、デバイスに対する定期的な健全性チェックを行うメカニズムが必要です。デバイスを第 2 デバイスすなわちフェイルオーバーデバイスにできる、障害耐久 (フォールトトレラント) の状況では、故障した第 2 デバイスを早い段階で検出することが重要です。そうすれば、第 1 デバイスで障害が発生しないうちに修理または交換することができます。
定期的な健全性チェックには、次のものがあります。
ボードに対してクイックアクセスチェック (書き込み、読み取り) を実行し、さらに ddi_check_acc_handle(9F) ルーチンを使用してデバイスをチェックする。
前回のポーリング以後、値がドライバの予期値と決定的に異なっているデバイスについて、レジスタまたはメモリーロケーションをチェックする。
一般に決定的な動作を示すデバイス機能には、ハートビートセマフォ、デバイスタイマー (たとえば、ダウンロードで使用されるローカル lbolt など)、イベントカウンタがあります。デバイスから更新済みの予想可能値を読み取ると、進行が順調であるかどうか、ある程度確かなことがわかります。
ドライバによる発行時に、発信要求 (送信ブロックまたはコマンド) にタイムスタンプを設定する。
定期的な健全性チェックで、期限を過ぎていながら完了していない要求を検索できます。
予定された次回のチェックまでに完了すべき、デバイスに対するアクションを開始する。
このアクションを割り込みにすると、デバイスの回路が割り込みのデリバリにまだ対応できるかどうかを確認するうえで理想的です。