読者です 読者をやめる 読者になる 読者になる

ハードウェア書き込みキャッシュのバイパス要請

Vista

さて、ハードディスクにはキャッシュメモリ (なういハードディスクは32MBものキャッシュメモリがディスクユニット自体に搭載されているようです) が搭載されています。

にあるように、キャッシュメモリは読み出しだけでなく書き込みの性能も上げてくれます。つまり、OSから「これ、ディスクにちゃんと書き込んでね」と依頼されたときに、ハードディスクは実際の円盤には書き込まずとも、ハードディスクユニット内のキャッシュメモリに書き込んだら「うん。ちゃんと書いたよ!」とお返事を返せるわけです。

こうやってキャッシュメモリ上に格納されたデータは、後でちゃんと円盤に書き込まれて永続化されるわけですが、それまでの間に不意の電源断 (停電、ブレーカ(NFB,MCB,MCCB)が落ちた、電源ケーブルがひっかかって抜けたった) が起ってしまった場合は、キャッシュメモリ上の「ちゃんと書いたよ」といったはずのデータは失われてしまいます。(多分…)

以前『ReadyBoost と FILE_FLAG_NO_BUFFERING - NyaRuRuの日記』で取り上げた FILE_FLAG_WRITE_THROUGH ですが,Windows の場合こういうときに使うのかなと.あとから説明を見直していて何となく分かりました.
つまり FILE_FLAG_WRITE_THROUGH フラグ付きでファイルをオープンしておくと,ドライバへの書き込み要求で「ハードウェア書き込みキャッシュをバイパスせよ」というフラグが立つというわけです.ただ,全てのデバイスがそういう書き込みモードに対応しているわけじゃないみたいですけど.つまりこんな感じでしょうか.

FILE_FLAG_NO_BUFFERING かつ FILE_FLAG_WRITE_THROUGH
Non-Cached I/O を使用しつつ,デバイスへの書き込みではハードウェア書き込みキャッシュのバイパスを希望する
FILE_FLAG_WRITE_THROUGH のみ
Cached I/O を使用しつつ,デバイスへの書き込みでは書き込みキャッシュのバイパスを希望する即座に Flush.ハードウェア書き込みキャッシュのバイパスは特に指示されない?
FILE_FLAG_NO_BUFFERING のみ
Non-Cached I/O を使用しつつ,デバイスへの書き込みには特に何も要求しない
両方ともフラグを指定しない
Cached I/O を使用しつつ,デバイスへの書き込みには特に何も要求しない