« テレビ番組等感想 その 225 | トップページ | Yash 2 その 136 »

2009年9月 7日 (月)

Yash 2 その 135: シェルの実行速度比較 その 2

バグ 18126 の修正のためのコード変更が一通りできたので、簡単なベンチマークを取ってみたところ、パターンマッチング関連の実行速度が大きく低下していることが分かった。

以下、結果と考察。VirtualBox 上の Fedora 11 (x86) でのテストなので、システムコードの実行時間が本来よりかなり長くなっている筈だが、速いか遅いかの比較くらいはできよう。

シェルrealusersys
fnmatch.p.tst を 1000 回
dash0.540.420.09
busybox0.970.450.12
ksh1.500.960.03
mksh1.631.030.09
posh1.641.090.09
zsh2.360.920.35
旧 yash2.911.210.41
bash3.361.690.18
新 yash6.163.740.56
bash の configure
ksh58.2222.2825.30
旧 yash81.0728.9540.60
新 yash81.8928.7840.82
mksh92.4034.2547.48
dash92.4134.3447.13
posh92.9334.3048.56
busybox93.2734.2047.74
zsh93.2534.2548.05
bash93.3734.5448.06
ファイル名展開
dash2.550.940.84
mksh2.730.980.81
posh2.981.130.76
busybox3.041.020.87
zsh14.017.141.31
旧 yash15.629.870.85
新 yash20.9719.051.20
bash21.4714.230.94
ksh24.6715.320.81

比較に使用したシェルは以下の通り

fnmatch.p.tst というのは今度の yash のリリースで追加予定のシェルスクリプトで、パターンマッチングの動作をテストする。このスクリプトは case 文によるパターンマッチングばかりを行うので、パターンマッチングの実行速度を比較するのに持って来いだ。ご覧の通り、元元速くはなかった yash のパターンマッチングが、今回のコード変更により二倍以上遅くなっていることが分かる。一方 dash は目を見張るほど速く、シェルによってパターンマッチングの速度が全然違うことが分かる。因みに、fnmatch.p.tst のテストに合格するのは、これらのシェルの中では新 yash のみである。

二つ目のベンチマークは、bash 4.0 のソース一式に付いてくる configure スクリプトを一回実行するのにかかる時間の測定である。Ksh が断トツの速さで、それに新旧の yash が続く。他のシェルはどれも似たり寄ったりである。三万行余りのスクリプトのうちパターンマッチングを行う箇所は数百程度しかないので、新旧の yash 同士を比べてもあまり差はない。Ksh は速さを追求するために色色と気持ちの悪いことを行うシェルなので (例えば前回の結果にあるようにサブシェルを fork せずに実行したりする)、ksh が一位であることは当然ともいえるが、yash が他のシェルよりやや速い理由は俺自身よく分かっていない。

三つ目は for i in `seq 1000`; do : /usr/bin/*[r-t]*; done を実行するのにかかる時間の測定。この測定ではパス名展開を行うので、パターンマッチングの速度だけではなくファイル検索の速度も問題になる。fnmatch.p.tst で圧倒的な速さを見せた dash がこのテストでも一位になった。その他 posh, mksh, busybox も速い。一方 zsh, bash, yash, ksh は何倍も遅い。Ksh はパターンマッチングは速いがファイル検索は遅いようだ。

|

« テレビ番組等感想 その 225 | トップページ | Yash 2 その 136 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/169172/46145738

この記事へのトラックバック一覧です: Yash 2 その 135: シェルの実行速度比較 その 2:

« テレビ番組等感想 その 225 | トップページ | Yash 2 その 136 »