T

fshの代わりにsshを使う

fshがpython-2.4以降にちゃんと対応していないので、fshを使ったシステム構成は後で困ることになるなあ、となんとなく悩んでいたのだが、ふと調べてみると「Speeding up SSH: fsh vs. OpenSSH v4 」という記事を見つけた。そのエントリにリンクされている「Quick-Tip: Reusing OpenSSH connections to the same host 」という記事によれば、OpenSSHのバージョン4以降であればfshのようなコネクションプーリング用のプログラムなしでもコネクションの再利用が出来るらしい。やり方はいたって簡単。$HOME/.ssh/configを編集して下のような行を追加する。

Host *
ControlMaster auto
ControlPath /tmp/%r@%h:%p

意味は、全てのホストでControlMasterを利用するように指定して、接続情報は/tmpに保存する、というものになる。いきなり/tmpだとマルチユーザのシステムではいかがなものかと思われるので、$HOME以下に適当な場所を指定する方がいいとのこと。まあ、その通りだ。autoのかわりにautoaskにすると、毎回接続を試みるたびにセッションを使い回すかどうか質問される。
実際に接続すると、ControlPathで指定した箇所に「リモートユーザ名@ホスト:ポート番号=」という名前のファイルが出来上がる。手元の環境でfsh、ssh共に適当な回数で実行してみたが、こんな結果になった。
まずはfsh:

localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null
real 0m0.607s
user 0m0.039s
sys 0m0.021s

localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null
real 0m0.121s
user 0m0.038s
sys 0m0.020s

localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null

real 0m0.117s
user 0m0.035s
sys 0m0.019s

localhost:~ yagi$ time fsh 192.168.x.xx ls > /dev/null

real 0m0.130s
user 0m0.036s
sys 0m0.021s

初回の接続だけ0.06秒かかったが、あとはおおむね0.01秒くらい。
続いてssh:
何もしないとおよそ0.3秒くらいかかる。ところが、ControlPathで指定したディレクトリにファイルが出来ると一気に

real 0m0.054s
user 0m0.004s
sys 0m0.005s

こんなスコアになってしまった。fshより早いってのはどういうことだ?

Posted by on 9月 1, 2008 in Linux

コメントを残す