知識マップ: Windows I/Oの深層(第4回) ── キャッシュマネージャー:あなたのWriteFileはいつディスクに届くのか

記事「Windows I/Oの深層(第4回) ── キャッシュマネージャー:あなたのWriteFileはいつディスクに届くのか」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

WriteFileの成功はディスクへの永続化を意味せず、Windowsのファイルキャッシュはまずシステムキャッシュビューへコピーし、ディスクへの反映はlazy writerが毎秒後追いします。電源断やOSクラッシュではまだ書かれていないダーティページが失われるため、確実に書きたいデータにはFlushFileBuffers・FILE_FLAG_WRITE_THROUGH・FILE_FLAG_NO_BUFFERINGを使い分ける必要があります。

キャッシュマネージャーとライトビハインドの知識マップキャッシュマネージャー、ライトバックキャッシュ、256KBのシステムキャッシュビュー、先読み、lazy writerによる遅延書き込み、電源断でのダーティページ喪失、FlushFileBuffers・FILE_FLAG_WRITE_THROUGH・FILE_FLAG_NO_BUFFERINGによる確実な書き込み、整列要件、メモリマップトファイルとの一貫性、ファストI/Oの関係を示す図実装を担う利用する利用する利用する利用する利用する自動化する軽減する両立しない原因になり得るに保存される原因になり得る防止する利用するで構成できるで構成できる防止する防止する軽減する前提とする防止する原因になり得る用いるのは非推奨推奨される対応推奨される対応両立しない前提とするより先に行うべきで確認できる前提とする両立しない前提とするキャッシュマネージャーライトバックキャッシュ(遅延書き込み方式)ファイルマッピング(メモリマップトファイル)システムキャッシュビュー(256KBスロット)ファイルオブジェクトlazy writer(遅延書き込みスレッド)未反映データの喪失FILE_ATTRIBUTE_TEMPORARYダーティページ電源断・OSクラッシュ先読み(read-ahead)FILE_FLAG_SEQUENTIAL_SCANFILE_FLAG_RANDOM_ACCESSFlushFileBuffersFILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERINGセクター整列要件ERROR_INVALID_PARAMETER(87)頻繁な書き込みでの確実な永続化FlushViewOfFileファストI/OProcess Monitor(procmon.exe)IRP(I/O要求パケット)同期I/O

概念間の関係(全32件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

キャッシュマネージャー
ファイルデータをメモリ上のシステムキャッシュに保持し、読み書きの多くをディスクI/Oなしで処理させるWindowsカーネルのコンポーネント。ファストI/Oの近道もこのキャッシュを直接利用する。
ライトバックキャッシュ(遅延書き込み方式)
書き込みをまずシステムキャッシュへ反映し、ディスクへの反映を後回しにするWindowsファイルキャッシュの既定方式。WriteFileの成功はディスクへの永続化を意味しない。
システムキャッシュビュー(256KBスロット)
キャッシュマネージャーがファイルの256KB単位の区間をシステムアドレス空間にマップする単位。キャッシュ有効の読み書きはこのビューとのメモリコピーとして行われる。
lazy writer(遅延書き込みスレッド)
キャッシュマネージャーが毎秒起動し、最近フラッシュされていないダーティページの一部をディスクへ書き戻すバックグラウンド処理。
FILE_ATTRIBUTE_TEMPORARY
すぐに削除される前提の一時ファイルであることを示すファイル属性。付与するとlazy writerの通常のフラッシュ対象から外れる。
ダーティページ
キャッシュへ書き込まれたがまだディスクへ反映されていない、変更済みのキャッシュページ。
電源断・OSクラッシュ
システム全体が突然停止する障害。電源喪失やブルースクリーンなど。キャッシュ上のダーティページを失わせる。
先読み(read-ahead)
キャッシュマネージャーがアクセスパターンから次に読まれそうな区間を検出し、要求される前に先回りして読み込む機能。
FlushFileBuffers
指定したファイルハンドルのバッファ済みデータとメタデータをデバイスへ書き切るWin32 API。.NETのFileStream.Flush(true)に相当する。
FILE_FLAG_WRITE_THROUGH
書き込みのたびにキャッシュへ反映しつつ、lazy writerを待たず即座にディスクへも書き込むCreateFileのフラグ。読み取りは引き続きキャッシュの恩恵を受ける。
FILE_FLAG_NO_BUFFERING
システムファイルキャッシュを経由せず、すべての読み書きを毎回ディスク装置へのI/Oにする CreateFile のフラグ。厳しい整列要件が伴う。
セクター整列要件
FILE_FLAG_NO_BUFFERINGで開いたハンドルに課される、読み書きサイズ・オフセット・バッファアドレスをボリュームのセクターサイズ/物理セクター境界に揃える制約。
FlushViewOfFile
メモリマップトファイルのビュー内のダーティページのディスクへの書き込みを開始するAPI。メタデータは書かず、ハードウェアのディスクキャッシュからの物理書き込みも待たない。
ファストI/O
キャッシュに載っているファイルへの同期I/Oのために、IRPを組み立てずキャッシュマネージャーと直接データをやり取りする高速経路。処理できない場合は通常のIRP経路に折り返す。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。