Created
April 26, 2014 11:35
-
-
Save akiradeveloper/11317774 to your computer and use it in GitHub Desktop.
dm-writeboost doc (ja) v1 半分書きました. 分かりにくい表現があれば, 指摘お願いします.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dm-writeboost | |
============= | |
dm-writeboostターゲットはブロックレベルのログ構造化キャッシングを提供する. | |
dm-writeboostは, 受け取ったランダムライトを巨大なログにまとめ, キャッシュデバイスへのシーケンシャルライトを行う. | |
Mechanism | |
========= | |
Basic Mechanism | |
--------------- | |
dm-writeboostは, | |
RAMバッファ, | |
キャッシュデバイス(例: SSD), | |
backingデバイス(例: HDD) | |
の三層をコントロールする. | |
ライトデータはまず, RAMバッファに格納され, それが一杯になると, メタデータを書き足してログを作成し, | |
キャッシュデバイスへとシーケンシャルライトする. | |
その後, キャッシュデバイス上のダーティデータは, backingデバイスへとマイグレーション(or ライトバック)される. | |
Persistent Logging | |
------------------ | |
dm-writeboostは, writeboost typeによってその機能を拡張することが出来る. | |
type 0では, Basic Mechanismのみが提供される. | |
そして, type 1では, Persistent Loggingが提供される. | |
この機能拡張は, ライトをRAMバッファ以外に, 永続的なメディアにも書くことにより, | |
永続化処理(例: フラッシュ処理)におけるペナルティを軽減させる狙いを持つ. | |
この機能はファイルシステムにおけるフルデータジャーナリング相当のものである. | |
Log Replay | |
---------- | |
再起動時, dm-writeboostは, キャッシュデバイス上に書かれたログをリプレイし, メタデータを復元する. | |
ログは時系列順に書かれているため, これをキャッシュデバイスへの書き込みの他にアーカイブしておくことにより, | |
任意の状態を復元することも原理的には可能である. | |
Processings | |
=========== | |
dm-writeboostは, 1つのforeground処理と6つのbackground処理によって構成される. | |
Foreground | |
---------- | |
bioを受け取り, キャッシュhit/missに応じた処理を行う. | |
ライトデータはRAMバッファに格納する. | |
RAMバッファが一杯になった時, ログを作成し, Queueにflush jobとして格納する. | |
Background | |
---------- | |
(1) Writeboost Flusher (wbflusher) | |
flush jobを処理する. | |
flush jobに格納されたログをキャッシュデバイスに対してシーケンシャルライトする. | |
(2) Migrate Daemon | |
キャッシュデバイス上のダーティデータをbackingデバイスにマイグレートする. | |
もし, `allow_migrate`がtrueであれば, 差し迫った状況でなければマイグレートしない. | |
ここで, 差し迫った状況とは, マイグレートしてクリーンなセグメントを作らなければ, | |
ジャーナルをこれ以上書くことが出来ない状況のことである. | |
dm-writeboostはマイグレーションについて2つの手法によって性能最適化を図る. | |
- マイグレーションは複数のセグメントに対してバッチ的に行われる. | |
`nr_max_batched_migration`は, 一回にマイグレートする最大のセグメント数である. | |
- マイグレートされるデータは, マイグレート先のLBAによって昇順にソートされる. | |
(3) Migration Modulator | |
backingデバイスの負荷が高い時にはマイグレーションを抑制すべきである. | |
このデーモンは, backingデバイスの負荷を監視し, | |
高負荷時には`allow_migrate`をfalseにすることでマイグレーションを抑制する. | |
このデーモンは, `enable_migartion_modulator`がtrueの時に有効になり, | |
負荷のスレッショルドは`migrate_threshold`によって指定出来る. | |
(4) Superblock Recorder | |
このデーモンはSuperblockに, どのセグメントIDまでマイグレートしたかなど | |
を一定のタイミング(`update_record_interval`で指定)で書く. | |
Log Replay時に処理を省く効果がある. | |
(5) Sync Daemon | |
RAMバッファ上のデータは, 電断時に消失してしまう. また, キャッシュデバイズがRAMキャッシュを持っている場合, | |
ここにあるデータも, 電断時には保証されない. | |
このデーモンは, 一定のタイミング(`sync_interval`で指定)でこれらのデータを永続化する. | |
(6) Barrier Deadline (type 0のみ有効) | |
Persistent Loggingがない場合, ダーティデータの永続化処理はペナルティが高い. | |
このペナルティを軽減させるため, 永続化命令へのACKを | |
最大で`barrier_deadline_ms`(ms)のみ遅延させる最適化を行っている. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment