ggate の現状2008年03月17日 12時57分26秒

FreBSD の ggate は言わば、デバイスを export する NFS だ。NFS は特定の規約に従ったファイルシステムをネットワーク越しに提供する。それに引き替え、ggate はデバイスをネットワーク越しに提供する。

ggated がデーモンとして、サーバー上に駐在しデバイスをクライアントに提供する。そして、ggatec がサーバにリクエストを送る。このデバイスを提供するという性質上、応用範囲が広い。ファイルシステムの選択も UFS に限らず柔軟に出来、さらに GEOM を用いて暗号化をかけたり、リモートとローカルのディスクでミラーリングをしたりと、NFS の用途とは比べものにならないくらい広い。

今回、FreeBSD 7.0-RELEASE で試したが、思ったよりも結果は芳しくなかった。一度動き始めると、すこぶる調子は良かった。しかし、あちらこちらと挙動が不審になる。運が良いと復帰できるが、再起動なども必要になることもあるので、安心して使える程安定していない。特に目に付いたものが二つ。そのため、サーバ、クライアント共に -v を付けて、デバッグモードで起動しないと安心して使えなかった。

一つ目は、メッセージの喪失。TCP を使っているが、時折 ggate レベルのメッセージが再送されているのを見かける。これが起こり始めると、頻繁につっかえて通信速度が大きく落ちる。TCP なのに ggate が再送しなければいけないということは、各メッセージの処理が正しく行なわれていない可能性がある。

二つ目は、メモリとメッセージの処理。メッセージに大きさが記されていて、その大きさの分だけ malloc をしている。その値が何故だか、2GB に及ぶときがある。malloc が失敗して ggated がcore dump した。ggatec のデバッグ情報を見ていても、そんなに大きなメッセージは送っていない。どうも、メッセージのアラインメントだか、メッセージの境界を正しく認識していないのだか、根本的な問題の様に見受けられる。これが起きると、クライアント側はデバイスを正常な状態に戻せず、諦めて再起動するしかない。

次回