Soft Error and PAGE_NOT_ZERO stop
Windows Vista では,未だに USB 回りのトラブルが続いているようですね.
『TechNet Forums - Windows Vista フォーラム - ハードウェア関連 - USBメモリが使用できません』
本件とは直接関係ないとは思いますが,RC-1 時代に登録された USB 絡みのバグでなかなか興味深い記述があったのを憶えています.
『BSOD-Memory_Management during Install/Setup- x86 version of RC1』
登録制のベータサイトなので直接の引用は避けますが,特定の USB Hub コントローラを使用している環境で,BSOD が発生するというバグでした.
この BSOD は,カーネルが自己診断によってエラーを検知したため,自動的に停止したというものということでした.停止に至る流れは以下のようになります.
- メモリマネージャがメモリページを 0 クリアする.(ゼロページの生成)
- メモリマネージャはゼロページを unmap し,demand-zero page fault に備えてアドレスをキャッシュしておく.
- ゼロページキャッシュに追加されるときと取り除かれるときそれぞれで,実際そのページが全て 0 であることがシステムによってチェックされる.
- もしチェック時に全てのビットが 0 でなければ,第 1 パラメータを 8887 に設定し,stopcode 0x1A でシステムは停止する.
RTM 版でもゼロページの有効性の確認が行われているのかどうかは知りませんが,RC-1 時代には実際にこれが原因で停止した事例が何例も報告されたようでした.興味深いのはその原因の内訳です.
- 75% のエラーはシングルビットエラーで,これはメモリエラーに起因するものと考えられている
- 15% のクラッシュは,USB のデータ構造を含んでおり,全てのケースで特定の USB Hub コントローラが存在する
- 10% は原因が不明である
つまり,ある 1 社のドライバまたはハードウェアの問題を解決しても,その 5 倍の規模のメモリエラーは依然として解決されないことになります.OS のベータテストという形でこうやって割合が明らかになると,OS 提供者にとってメモリエラーがいかに大きな障害になっているかが分かります.
メモリエラーについては,以前 Radium Software Development で詳細なエントリが書かれていました.
『Cosmic Ray Induced Soft Error』
Tezzaron によれば, 2004 年の時点では 1,000 から 5,000 FIT/Mbit 程度のエラー発生率が妥当な数値であったとされている。この 1,000 FIT/Mbit とは,実際にどの程度の発生率なのだろうか? 例えば 256Mbit のメモリを搭載した携帯電話ならば,半年に 1 回程度の確率でソフトエラーを引き起こすことになる。これが 1GB のメモリを搭載した PC になると, 5 日に 1 回の確率にまで高まる。更に飛行機の中などになると,約 100 倍の 100,000 FIT/Mbit 程度にまで高まると考えられるから, 512MB のメモリを搭載したノート PC を持ち込んだとして, 2.4 時間に 1 回の確率でソフトエラーを引き起こすという勘定になる。
これを 2 GB のメモリを搭載したノート PC にあてはめると,国際線の飛行機内では 36 分に 1 回エラーが発生することになります.RTM 版でこの手のエラー検出が行われないとしても,それが果たして幸せなことなのかは難しいところです.