## 定義 ブロックレベル差分同期とは、ファイル単位ではなくストレージブロック単位で変更を追跡し、変更されたブロックのみを転送することで大容量データの定期同期を効率化する手法である。rsync に代表される従来のチェックサムベースのファイル同期と対比される。(Source: [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]]) ## ファイルレベル同期との比較 | 観点 | ファイルレベル同期(rsync 等) | ブロックレベル差分同期(dsync 等) | |---|---|---| | 変更検出タイミング | 事後(同期時にチェックサム計算) | オンライン(書き込み発生時にリアルタイム追跡) | | チェックサム計算 | 必要(同期のたびに全ブロックを読む) | 不要(追跡結果を直接参照) | | ディスク I/O | 高(変更検出のために全体スキャン) | 低(変更ブロックのみ読み取り) | | キャッシュ汚染 | 大(全体スキャンがページキャッシュを置換) | 小 | | CPU 使用率 | 高(チェックサム計算) | 低 | | 実装層 | ユーザー空間 | カーネル拡張(例: Linux 3.2.35) | ## 実装アプローチ dsync(Knauth & Fetzer, LISA13)の実装では: 1. **カーネル拡張**でブロックへの書き込みをフックし、ダーティビットマップを維持する 2. ユーザー空間のデーモンがビットマップを定期的に読み出し、変更済みブロックを転送する 3. 変更追跡はオンラインで継続するため、次の同期サイクルでは前回以降の差分のみを処理する ## 性能特性 - 同期時間: チェックサムベースより**最大 2 桁(100 倍)短縮**(合成・実ワークロード共) - データサイズが大きいほど相対的な優位性が拡大する(チェックサム計算のコストはデータ量に比例) ## 横断的知見 - (まだ 1 ソース。2 ソース目以降で横断観察を追記予定) ## 未解決の問い - クラッシュリカバリ時の一貫性保証はどのように実装するか(書き込み中クラッシュでビットマップと実データの乖離が生じた場合) - ブロックレベル追跡のオーバーヘッド(書き込みごとにフックが走る)は書き込み集約的なワークロードでどの程度になるか - LVM スナップショットや ZFS の CoW(コピーオンライト)と比較したとき、設計上の優位性・劣位性はどこか - コンテナ・仮想マシンのライブマイグレーション(メモリダーティページ追跡)と同様のパターンを持つか ## 関連 - [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]] — ブロックレベル差分同期を Linux カーネル拡張として実装した研究 - [[ファイルレベル同期]] — ファイルレベル同期との対比概念。rsync 系の従来手法 - [[Thomas Knauth]] / [[Christof Fetzer]] — 考案者(TU Dresden) - 関連 MOC: [[SRE - MOC]] ## 出典 - [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]]