u9fs vs NFS
v9fsに書いたように、Linuxはカーネル2.6.14あたりから、9P2000をしゃべるファイルシステムv9fsをサポートしている。v9fsを使えば、リモートのPlan9サーバをmountできる。さらにLinux側をサーバにしたい場合は、u9fsを使うことができる。
元ネタはFreenix 2005の論文「Grave Robbers from Outer Space Using 9P2000 Under Linux」。著者はこの日記でもちょくちょく出てくるが、v9fsの作者でもあるRon MinnichとEric Van Hensvergenだ。
この論文ではbonnie++とPostMarkベンチマークを使って、9PとNFSの性能評価をしており、bonnie++はほぼ一緒、PostMarkは9Pに軍配という結果を示している。2005年の論文の割にはハードウェアが古いので(カーネルが古いのは仕方ないが)、Xeon 8コア、メモリ4GB、10GbE環境という環境で実験してみた。OSはubuntu 9.04/kernel 2.6.30である。なおディスク律速になるので、10GbEでもGbEでも性能には大差なかった。
一応実験結果を載せるが、9P、NFS共に説明がつかない部分があるので、結果を鵜呑みにしないこと。時間ができたら再評価してみたい。
u9fs設定
u9fs自体はPlan 9のディストリビューションに含まれているので(/sys/src/cmd/unix/u9fs)、Linuxマシンにコピーしてmake && make installする。
xinetd経由でu9fsが起動するよう設定する。まずは認証なし(-a none)で*1。サーバ側で作ったファイルのオーナは-u rootに関係なくnobody/nogroupになる。おそらくxinetd or inetd経由で起動された場合はこの設定は参照されない?
$ grep u9fs /etc/services u9fs 564/tcp $ cat /etc/xinetd.d/u9fs service u9fs { disable = no socket_type = stream protocol = tcp wait = no user = root root = root server = /usr/local/sbin/u9fs server_args = -a none -u root -l /var/log/u9fs.log port = 564 flags = REUSE }
u9fsが動いているサーバアドレスが192.168.0.1とすると、クライアントは次のようにmountする。dfltuid/dfltgidの権限で読み書きされる。maxdataはメッセージの最大ペイロードサイズ。
$ sudo mount -t 9p -o proto=tcp,dfltuid=1000,dfltgid=1000,maxdata=32768 192.168.0.1 /opt.glenda
bonnie++
シーケンシャルread/writeの性能を測る。キャッシュの影響を無視するために、物理メモリの2倍のファイルを読み書きする。今回使ったマシンは4GBのメモリを搭載しているので、8GBの読み書きになるので、それなりの実行時間がかかる。
writeはいい線行っているけど、readが遅いんだな。あと、9Pのバッファ設定が効いてないようだ。
PostMarkベンチマーク
Webサーバやメールサーバのワークロードを想定し、小さなファイルを大量に操作するベンチマークである。transaction数をデフォルトの10倍の50000に設定した。
create/read/append/deleteのops/secは、9Pが200に対して、NFSが10。さらにスループットは9Pが1.3MB/secに対して、NFSが65KB/sec。NFSの性能がなぜこんなに悪いのか理由がわからない。おかしなチューニングになっているのかもしれない。
bonnie++のエラー
u9fsを使った場合、bonnie++のファイル生成系のベンチマークに失敗する。何かバグがありそうだ。今回はread/writeのベンチマークだけが知りたかったので、オプションに"-n 0"を付けて回避した。
$ bonnie++ -d /opt.psptest00/opt Writing with putc()...done Writing intelligently...done Rewriting...done Reading with getc()...done Reading intelligently...done start 'em...done...done...done... Create files in sequential order...done. Stat files in sequential order...Expected 16384 files but only got 118 Cleaning up test directory after error.
*1:認証方式はnoneの他に、rhostsとp9anyが選択できる。