# ライトバックキャッシングと同期書き込み ## 定義 ライトバックキャッシングは、メインメモリへの転送が終わった時点で書き込みを完了扱いにし、実データはあとで非同期にディスクへ書き戻す(フラッシュする)方式である。トレードオフは信頼性で、DRAMは揮発性のため電源障害でダーティデータが失われたり、ディスクへの不完全な書き込みでファイルシステムメタデータが壊れたりする可能性がある(メタデータ破壊はファイルシステムをロード不能にし、システムバックアップ以外での回復手段がない)。これに対し同期書き込みは、永続ストレージへの完全な書き込みが終わるまで完了しないため、ディスクI/Oレイテンシの影響を直接受ける代わりに、非同期書き込みによるデータ破壊リスクを避けられる。データベースのログライターなど破壊リスクが許容できないアプリケーションで使われる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.3.6, §8.3.7) ## 同期書き込みの2形態 1. **個別の同期書き込み**: ファイルをO_SYNC(またはO_DSYNC/O_RSYNC)でオープンすると、そのファイルへの書き込みは同期的になる。一部のファイルシステムはすべての書き込みを強制同期化するマウントオプションを持つ。 2. **以前の書き込みの同期コミット**: fsync(2)は個別I/Oを同期化する代わりに、コード内チェックポイントまでの非同期書き込みをまとめて同期的にコミットする。書き込みをグループ化でき、取り消しに伴う複数メタデータ更新を避けられるためパフォーマンスが上がる。ファイルハンドルのクローズ時やコミットされていない書き込みバッファの増大時にも暗黙にコミットが発生し、NFS越しの多数ファイル展開時の長い停止として体感されることがある。 (Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.3.7.1, §8.3.7.2) ## 横断的知見 - 本概念に触れたソースは現時点で1件([[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]])のため、複数ソース突き合わせによる知見の蓄積は今後の ingest に委ねる。 ## 未解決の問い - fsync(2)によるグループコミットとO_SYNCの個別同期書き込みのレイテンシ差を定量的に示すベンチマーク結果は本章にはない(章末練習問題ではこれを実測させる課題になっている)。 - ZFSのlogbias(latency/throughput)やsync(standard/always/disabled)プロパティのような、ファイルシステムごとの同期書き込みポリシーの違いが実運用でどの程度パフォーマンスに影響するか、他のファイルシステム(ext4のdata=ordered等)との横断比較は今後の課題。 ## 関連 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] — 本概念の原典解説(§8.3.6, §8.3.7)。 - [[ローカルファイルシステム実装比較]] — ジャーナリング・COWなど、ライトバック/同期書き込みと関連する耐久性メカニズムの実装比較。 ## 出典 - [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 8 ファイルシステム]] §8.3.6, §8.3.7