性能差のある機械間の ggate2009年02月11日 13時09分17秒

ggate 自体は安定しているとは書いたが、万全とはいかないようだ。性能差が著しい機械間で使うと問題が起きることがある。

手元で、問題が起きるのは、AMD Turion(tm) 64 X2 Mobile Technology TL-58 (1908.70-MHz 686-class CPU) と Pentium II/Pentium II Xeon/Celeron (400.91-MHz 686-class CPU) とでる Celeron 400MHz を使った時。Celeraon で ggated でサーバとし、AMD が ggatec でクライアントになっている。この組合せだと、高い確率で問題が起きる。そんな時は、ggatec rescue を繰り返すと再接続が出来る。CPU の差は恐らく 10 倍以上違う。ネットワークは両方とも 100 base-TX なので、恐らく問題はないと思う。バスのスピードも十倍以上違うと思われる。

ggated と ggatec 間ではメッセージがやり取りされていて、シーケンス番号が渡されている。この時のシーケンス番号が同期されていれば問題なく、動作するのだが時折ずれてしまうことがある。そうすると、ggate がパケットを同期の為にやり取りするような状況に陥り、デバイスへのアクセスが出来なくなる。

読みだし専用で ggatec を繋ぐと問題は出ない。読み書き用に ggatec を使うと問題が起きる。一番簡単な回避策は、ggatec に -v を渡し、デバッグモードで起動することだった。これをやると、時折問題は起きるが、高い確率ですぐに再同期を終わらされてくれる。デバッグモードで大量の出力を出すために、クライアント側の転送速度が微妙に落ちる。これらを総合すると、ggate 自体は動いているのだが、遅いサーバ側での IO 処理に絡んだ問題が疑われる。

ggated の実装は簡単で、ggatec から来るリクエストをデバイスに送るだけだ。ローカルだと直接叩くコマンドが 、ネットワーク越しにやり取りされているだけだ。

前回