テストステ論

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

dm-lcの紹介 (8) Q&A

目次

この記事では, dm-lcに対する誤解を解消するため, Q&A方式で説明を行います.

(Q1) dm-lcは, キャッシュをシーケンシャルに使うことによってスループットを最大化させる仕組みではないのか?
(A1) いいえ, 違います.
技術に対して妄想を抱くのはやめましょう. 私は現実主義者であり, dm-lcは現実的なソフトウェアです. dm-lcからキャッシュデバイスへのライトは, ランダムライトになることがデフォルトです. 理想的な状況ではシーケンシャルライトになりますが, そのような理想的な状況は, 現実的なワークロードではあり得ません. これは, 基本的にランダムライトになってしまうファイルシステムであっても, 大きなファイルをライトすればシーケンシャルライトになるというのと同じことです.
dm-lcは, 現実的なワークロードに最適化されています. 未来のハードウェアを使うことによって, その理想的な状況を常に作り出すことは, 私の机上の考察によると"可能"です. しかし私はあくまでも, 現在(2013年)において一般的に入手しうるハードウェアを想定して実装しています. 2020年や2030年のことは考えていません. なので, シーケンシャル書きをしてSSDスループットを最大限活用することは考えていないというのが正解です.*1
しかしもし, ログ構造化かと聞かれたらYESです. dm-lcの大きな工夫の1つは, メタデータも一緒にキャッシュデバイスに書くことによって, 電源障害などの場合にもデータロストを回避出来る点にあります. また, 単にログ書きするのではなく, 一度DRAMバッファにライトデータを書いてから, あとでまとめてキャッシュデバイスに書き出すという工夫をしています. これによって, 極めて低いランダムライトレイテンシが実現可能です.
この, DRAM-SSD-HDDという多層のキャッシュ制御はとても複雑です. dm-lcはこのような極めて困難な制御においても, ライトバリアへの対応を怠っていません. そしてこの点が, dm-lcの大きな工夫の2つ目です. dm-lcは, ライトバリアに関するI/Oを遅延するというアイデアによってライトバリアの処理によってキャッシュ制御がブロックすることを回避しています. 理想的な状況では, ファイルレベルで同期ライトとして発行されたものも, すべて非同期に処理されることになります.


(Q2) dm-lcはDisk-Caching Disk(DCD)のLinux実装なのか?
(A2) はい, そのとおりです. 基本的には.
dm-lcはハードウェア上のアーキテクチャとして, DCDのそれを継承しています. ただし, DCDの論文には, ライトバリアへの対応やロックの実装法が記述されていません. また, データ構造もいささか冗長であり, 非現実的です. dm-lcの仕事は, 現在のLinuxで必要な実装をすべて考慮した上で, DCDをLinuxカーネル上にシンプルかつ軽量に実装したことと言えます.
論文には, 負荷によってマイグレート(ライトバック)するかどうかを制御する手法について書かれています. 私はこの点も実装しています. ただしアルゴリズムは少し違います. 私の実装は, キャッシュデバイスが複数のbacking storeに共有されることを想定しているため, アルゴリズムはアレンジされています. また, ワークキューサブシステムを活用することで, DRAMバッファのライト, マイグレーションをすべて非同期的に実装することを実現しています.


(Q3) dm-lcをupstreamにマージする気はあるのか?
(A3) はい. もちろんです.
dm-lcはupstreamで議論され, より洗練されるべきと考えています. 私より優秀な技術者は, 地球上には存在します. 彼らからどのようなアイデアが出るかに興味があります. また, 実運用を考えた場合, driver/md以下に取り込んでしまい, デフォルトでコンパイルされるようにしておいた方が利用に対して障壁も低くなります. ただし, Pythonで書かれたユーザランドプログラムは別のリポジトリに分離したいと考えています. この点は, nilfsなどと同様の設計方針です. upstreamに提案して議論をして採用されるというプロセスを体験することは, 私という駆け出しの技術者にとっては大変意味のあることです. その可能性を潰すようなことをする人間を私は知りません.

*1:例えば, ランダムライトが100MB/sスループット出るだけでも, 多くの場合では十分です. 極端に大規模なストレージシステムではなく, HDD30台くらいでRAID6組んでるのでwriteが超遅いというユースケースを想定します

広告を非表示にする