テストステ論

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

dm-lcの紹介 (1) 概要

目次

私は今年の正月休みを利用してdm-lc (Sorry, クローズド)の開発を始めました. 一つの本格的なソフトウェアを始めるには, まとまった時間が必要です. ソフトウェアは大凡完成していて, 綿密な計測をして, pdfのドキュメントを書こうと思っているフェイズです. 計測にはSamsung 840 Pro (256GB)を購入しました. ブログにspell-outしていくことで, 何を書くべきかを見定めるというのがブログに書く意図です. 何回かに分けて, 少しずつ説明していこうかと思います.

dm-lcのlcはLog-structured Cachingの略です. 本当は, エルシィかわいいよエルシィをマスコットキャラクターにしたかったのですが, 版権の問題で無理でした. 泥棒はいけません. Log-structuredといえば, ファイルシステムの世界では随分ともてはやされてしますが, キャッシュの世界ではそれほど有名ではありません. では世界初なのでしょうか?実は違います. 元ネタは, DCD (Disk-Caching Disk)というものが20年前に発表されており*1, 私はその完全なLinux向け実装を作ったという形です. もちろん, 論文に書かれていないような実装も行いました*2が, それらはすべて私がたった一人で, この狭い部屋で生み出したものです. それらのアイデアは他の誰のものでもなく, 私のものです. そしてもちろんコードも私のものです. もう一度言いますが, 盗むなこの泥棒がということです. 詳しい技術についてはおいおい話していこうと思います.

dm-lcの基本的な思想は, SSDをキャッシュとして, HDD backing storeの性能を上げるということです. しかしそのようなソフトウェアはたくさんあります. 一体, それらに対してどこがユニークなのでしょうか?私にしてみればそれらの糞ソフトウェアどもはどれも似たりよったり. 私のソフトウェアは違います. 私のソフトウェアは, 以下のような特徴があります.

  • ライトしかキャッシュしません. これによるメリットを最大限に活かすことが, すべてではないにしろ多くの場面において有効だと信じたからです. みなさんのストレージは, ライトとリードのどちらがボトルネックか分かりますか?なぜ, ログ構造化ファイルシステムがこれほどまでに研究され, たくさんの実装が存在するか理由は分かりますか?
  • dm-lcが利用しているRAMバッファに書いてからACK (Immediate Completion)を返すため, ライトレイテンシがとても低いです. 具体的には4us程度です.
  • SSDに対してシーケンシャルに書き込んでいきます*3. これは以下の利点があります.
    • SSDスループットを完全に活かせます. 私が過去に計測したものでは, dm-lcは, 250kiopsのランダムライト性能を発揮出来ます.
    • SSDの寿命が長くなります. SSDで使われているフラッシュメモリには, 書き込み回数に上限があります. ランダムライトをすることによりチップごとに書き込み回数の偏りが生まれます. これによって寿命が縮まります. これを緩和する機能がウェアレベリングですが, 完璧ではありません. 理想的には, SSDはシーケンシャルライトでのみ使われるべきです. dm-lcはそれを実現します.
  • 計算機がクラッシュしたとしても, アプリケーションにとってデータロストになることはありません. dm-lcは, 高い性能と低オーバーヘッドを実現するため, メタデータDRAM上に持ち続けます. では, 電断時にそれらは消えてしまうのでしょうか?DRAMからは消えるのですが, 適切にSSDにも書きだすことによって, クラッシュリカバリが可能です. 安心してください. データは, SSDから蘇ります. そのアルゴリズムは非常にシンプルであり, 私が実装する以上, バグる余地がありません.
  • dm-lcは, device-mapperというフレームワークを利用して実装されており, 完全なるローダブルモジュールです. bcacheやenhanceioのようにソースコードにパッチを当てて再コンパイルが必要というものではなく, 今稼働しているサーバに対して直接組み込むことが出来ます. また, 条件つきですが, すでに利用されているディスクに対してほぼ無停止でキャッシュを導入することが可能です.

以上が, dm-lcのオーバービューです.

どうでしょうか. 興味を持っていただけたら幸いです. dm-lcについては, これからも少しずつ書いていきます. よろしくお願いします.

*1:その頃, HDDのランダムライト性能に対する問題意識がアカデミックな世界では強かったのか, DCDの前にはLFSと, ログ構造化が盛んに研究された時代でした. 研究者が, 優れたプログラマでもあった時代でした. 今は違うと言っています.

*2:また, 論文の実装には欠陥があると私は考えています. その点は少しマニアックですから, この記事では書きません.

*3:ただし, 理想的なワークロードに限ります. 現実的なワークロードでは, 途中で同期ライトが入ったりするので, シーケンシャルにはなりません. また, dm-lcはそのような現実的な場合に最適化して実装されています