テストステ論

京大卒の高テス協会会長がテストステロンに関する情報をお届けします

SSDキャッシュの歴史

私は2012年頃からdm-writeboostを開発しているわけだが、私がdm-writeboostを開発しはじめてから新しくSSDキャッシュは開発されていない。少なくともOSSでは。一応、Oh Yongseokという韓国人の学生がdm-writeboostを元にしてdm-srcという研究プロジェクトをやったが(https://ysoh.files.wordpress.com/2009/05/dm-src-ibm.pdf)、それはプロトタイプのレベルでありプロダクションで使うレベルには至らなかった。

私がdm-writeboostを開発しはじめたころはちょうど、RHのdm-cacheがアップストリームに現れた頃であり、その頃にはbcacheはすでに入っていた。今、アップストリームに入っているのはbcacheとdm-cacheの2つだが、bcacheが3.9、dm-cacheが3.10にマージされた。

他すべてのSSDキャッシングがdevice-mapperの上に作られているが、bcacheはblockレイヤにごりごり手を入れて作ってある。故に良いこともあるのだが、コードはむちゃくちゃ複雑になっている。開発者のKent Overstreetは当時グーグルの社員だったが、今はやめてDateraというストレージ会社で働いている。

device-mapperというフレームワーク自体はかなり昔からあったが、もともとあったmd(multi device)の改良を狙っていたため、もともとあったターゲットを移植するということだけが行われていた。SSDキャッシュという概念自体がここ10年で出始めたものなので、当初はSSDキャッシュは存在しなかった。

一番はじめにSSDキャッシュを作ったのは、Eric Van Hensbergenという人とMing Zhaoである。彼らのプロトタイプはdm-cacheという名前がつけられた。

Another dm-cache project with similar goals was announced by Eric Van Hensbergen and Ming Zhao in 2006、as the result of an internship work at IBM.[8] Later、Joe Thornber、Heinz Mauelshagen and Mike Snitzer provided their own implementation of the concept、which resulted in the inclusion of dm-cache into the Linux kernel。dm-cache was merged into the Linux kernel mainline in kernel version 3.9、which was released on April 28、2013。

(https://en.wikipedia.org/wiki/Dm-cache)

Eric(https://www.linkedin.com/in/ericvh)は当時、IBMリサーチで働いており、Ming Zhao(https://www.linkedin.com/in/mzhao)はフロリダ大学の学生であり、インターンに来ていた。dm-cache(https://github.com/mingzhao/dm-cache)はインターンでの成果物ということになる。はっきり言ってコードは対したことないし研究プロトタイプの域を出ないが、こういうものをインターンの課題として作らせるのが本物のインターンであり、日給1000円のインターンとは一体何なのか。Ming Zhaoはそのままアカデミックの道を進み、今はアリゾナ州立大学で准教授をしている。Ericの方はARMで働いているようである。

このプロトタイプに触発されて、当時Facebookで働いていたMohan Srinivasan(https://www.linkedin.com/in/mohan-srinivasan-42835066)らはflashcache(https://github.com/facebookarchive/flashcache)を開発した。これはアルゴリズムはナイーブだが、きちんと作り込まれたソフトウェアであり、Facebookの開発者が作っているということもあり、かなり流行った。しかし今は"This project is not actively maintained。Proceed at your own risk!"ということで全くメンテされていない。Mohanは今年になってグーグルに移ったため、もはやflashcacheは棄てられたと言ってよい。

このflashcacheをさらに改良するため、STECというSSDを作っている会社でEnhanceIO(https://github.com/stec-inc/EnhanceIO)は作られた。このソフトウェアはflashcacheの改良版というだけあり、かなりいいものであったが、HGSTがSTECを買収したタイミングでディスコンとなった(https://www.hgst.com/company/media-room/press-releases/western-digital-completes-acquisition-of-stec-inc)。しかし人気は根強く、なんとかしてコミュニティでEnhanceIOをメンテし続けようという試みがなされはじめてはいるが、ほぼほぼ失敗している。

おそらくEnhanceIOと同時期くらいにbcacheとdm-cacheが登場し、アップストリームにマージされたと記憶している。もともとflashcacheやEnhanceIOがあったにも関わらず後発で開発されたdm-cacheは、おそらく上からの至上命令で作ったためかなり急ごしらえ感のあるソフトウェアであり、マージされた当初はバグだらけであった。DM自体がRHが管理しているものだから、ゴリ押ししてそこで開発しようという魂胆だったが、無難に作ろうとしたためかアルゴリズムが平凡であり、性能は悪い。おまけにライトバックキャッシュですらないということもちらほら聞く。コードを読めば、面白くないものだということはわかるから使ったことすらない。

その後、dm-writeboostが作り始められることになる。

dm-writeboostは、他のソフトウェアが基本的には平凡なN-way set associative cachingをベースにしているに対して、ログ構造化キャッシングというアルゴリズムを元に作りはじめられた研究色の強いソフトウェアである。

もともとのアイデアは、DCD(http://www.ele.uri.edu/research/hpcl/DCD/DCD.html)という、ログ構造化ファイルシステムのブロックキャッシュ版を作ろうというアイデアで研究されたものがあり、これを参考にした。DCD自体は、大昔の研究というだけであり基本的なアイデアしか記されておらず、書いてある通りに作ったら実用性はほぼないというものであるが、その基本的なアイデアをベースにして、効率的なライトバックの仕組みや、スレッショルドつきのリードキャッシングなどを実装したものがdm-writeboostということになる。

dm-writeboostはログ構造化キャッシングというアルゴリズムがうけて、Phoronixなどにも紹介されることになる。(http://www.phoronix.com/scan.php?page=news_item&px=MTQ1Mjg)

その後、アップストリーム入りの提案が何度も撥ねられて希望がなくなった頃、もともとEnhanceIOのパッケージメンテナをしていたDmitry Smirnovの目に止まり、out-of-treeカーネルモジュールとしてメンテナンスしながらDebianを中心にディストリビューションにパッケージングしていくという方向に進むことになる。ただし、アップストリーム入りの提案自体は決して無駄だったわけではなく、RH開発者によるコードレビューも受けれたし、dm-cacheの開発者のJoeにはdm-writeboostを改良してアップストリーム入りを果たせるようにかなり協力してもらった。

このように、SSDキャッシュには、色々な人が「おれの考える最強のSSDキャッシュ」を作ってきた歴史がある。もちろんNetAppやEMCのようなストレージベンダーは彼ら独自のSSDキャッシュを作っているし、IntelのSmart Responce Technologyなども存在する。dm-writeboostはそれらの中の1つにすぎないがログ構造化というユニークなアルゴリズム(注: NetAppの研究論文には彼らがログ構造化リードキャッシングを実装していることが示されていたりするが、ライトキャッシュを実装したものはみたことがない)を武器にして、まぁまぁの存在感を示せるようになってきた。

私はdm-writeboost v2.2.6にはかなりの自信がある。今後dm-writeboostを試すユーザは全員が最高のソフトウェアだと感動するだろうし、全員がプロダクションユーザになる。そうなった時どうなるかというと全くわからないが、今までもそうしてきたように、その時最善だと思う判断をしていくだけである。ユーザが増えれば、アップストリーム化を望む声も出てくるはずなので、そうなったらまた挑戦してみると思う。