Chronicle: Capture and Analysis of NFS Workloads at Line Rate (Ardalan Kangarlou, Sandip Shete, and John D. Strunk, NetApp, Inc.)
NetAppの論文。
ストレージの話ではなくて、NFSのキャプチャをするに当たって、性能を出すためにどう工夫したのか、という話。性能向けのプログラミング技術の参考になればと思う。一般論として、キャプチャの人はいろいろ頑張るからね。
libtaskでパイプライン処理。当然zero copy、dedup用にチェックサム計算も行う。使ったチェックサムは512Bごとに64bitのやつ。書き出しは圧縮してストレージを節約。
CPUに関してはlibtaskがでかいが、zero copyや独自ドライバの寄与もありそう。libtaskはactor modelで、C++で2バージョン書いた。numaを意識してpinするか、しないかの2パターンね。意識したほうが性能は良い。
libtaskはいろんな処理に応用できるかもしれないね。Golangのgoroutineとchannelで間に合ってる自分のごときレベルの人にはオーバースペックかもしれないが。libtaskと言ってもぐぐって最初に出てくるcoroutineライブラリ とは違って、chronicleのソース に同梱されているモジュールの名前。
ちょっと見たけど…これはライブラリとしてはかなり使いにくい部類なのでは? C++が悪い。中身ではGolangとかErlangと比較しているが、普通のプログラムを作るときにこの程度の差だったら、記述性を考えるとGolangを使いたくなるかもね。まあキャプチャの人はギリギリまで頑張るからなー。