テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(writeboost report) リードキャッシングの仕組み

ライトブーストのリードキャッシングは, その他のキャッシュとは仕組みが変わってると思う. ゴールが全く違うからだ.

ライトブーストはライトもリードも同様に, ログ構造化してキャッシュに書く. この時, ライトとリードの違いは, ダーティかどうかしかない. そのため, 最終的にはライトと同等のパスに入る. (ダーティではないなど, 条件が緩和されているので軽量なライトパスに入る)

このために, 概念的には, リードデータを再度ライト発行するようなプロセスを作っている. 実装上は, 8MBほどリードデータを貯めこんで, シーケンシャルを見つけてキャンセルしたりした後, 発行する.

ここでポイントは, そのリードデータは, 上位レイヤから見てstaleである可能性があるということだ. これは, 通常, 上位レイヤから発行されるライトが常に最新であることとは異なる. このため, 「本当に最新と信じられるものしかライトしない」という戦略をとる. この戦略は, かなり保守的であるが, 現実的には十分である. なぜならば, 8MB程度リードを溜める間に, データがいきなりstaleになることなど実際にはほとんどないからである.

ドミトリの言うように, そして私もわかっているように, リードキャッシングをenableすることは, 現実的にはあまり意味がない. (ライトとリードが相殺してしまうというのが, 1つの理由に対する直感的な表現である) しかし, ライトキャッシングをdisableしてリードキャッシングのみ行うというのであれば, 場合によっては意味があると思う. なので昨日私は, write-through modeの実装を行った. これは, 最終的にHDDにライトを送るライトパスを実装するだけであるが, 先に述べたリードキャッシングのstale dataに対するケアが必要なので, 少しだけ嵌った.

現在のmaster最新は2.0.5であるが, 2.0.6を来週中頃にでもリリースする予定である. このリリースはフィックスをいくつか含む. -rcをテストのために公開している状況である. write-throughについては, その先のリリースで提供しようと思っている.