Willow: A User-Programmable SSD (Sudharsan Seshadri, Mark Gahagan, Sundaram Bhaskaran, Trevor Bunker, Arup De, Yanqin Jin, Yang Liu, and Steven Swanson, University of California, San Diego)
OSDI14の論文。
SSDが登場してから、いろんな処理をオフロードする試みがなされてきた。Atomic Operationやアロケーション、FSの権限チェックなど。だが実際のところこのような機能はSSDのベンダしか追加できないし、デバイス側がコードを信頼しなければならないという問題があった。まあそれは普通の話だよね。
それを解決するのがこのWillow。will allowでwillowらしい。これでサードパーティのプログラマが処理を追加できるようにした。4つ問題があって、そのうちの3つに重点している。残りの1つは既存研究がいくつかある。
RPCと呼んでいるが、NVMeとかInfiniBandみたいにリクエストキューとコンプリートキューを使って行き来するパターン。現状だとこれが最も性能が出るやり方なんだろうと思う。まあ当然だがFPGAでDMAを使っていたりする。プロセッサ(SPU=Storage Processor Units)はクロックも125MHzと単体性能はそれほど高くはないが、並列に動く。何台のSPUが載っているのかはちょっと分からないな…読み飛ばしたか…とにかく、モノはMIPSライクな命令セットで、MIPS版のgccでコードをコンパイルして使っているみたい。なるほど。
作ったアプリ6個と言っても、中身は至って普通のチョイスで、Base-IO(ブロックデバイスを提供), Direct-IO(直接アクセス), Atomic Write, KVS, Cache, FSの一部の機能のオフロードといったもの。このチョイスを見て単純に「つまらんな」と思ったよ。真面目な人達なんだろう、たぶん。まあでもKVSがギリギリ楽しめるか…
そのKVSはMemcacheDBというBerkeleyDBとMemcachedがつながったようなものをベースにして作りこんだようだ。まあでも常識の範囲内だな。もっとぶっ飛んだアプリを期待したのだが…。それぞれのアプリのコード量は700-1500行くらいとのこと。まーメモリも小さいから大したことはできないのかもしれないね。
リソースが許せばSQLiteとかgrepとかsedとかawkとかLispの処理系なんかを移植して動かしたいところだよなぁ。