Fri, 08 Jun 2007

sh, awk, python - forkは遅いけど

awkが遅いなんて言ったら 斉藤さん が全力で弁護してくれますよ.たぶん.

from Dan-san: http://blog.livedoor.jp/dankogai/archives/50847769.html

builtin read:

% time sh builtin.sh
    The name of this job.             :sh builtin.sh
    CPU seconds spent in user mode.   :0.12s
    CPU seconds spent in kernel mode. :0.07s
    Elapsed time in seconds.          :0.19s
    The  CPU percentage.              :98%

exec awk:

% time sh awk.sh
    The name of this job.             :sh awk.sh
    CPU seconds spent in user mode.   :0.50s
    CPU seconds spent in kernel mode. :1.40s
    Elapsed time in seconds.          :1.89s
    The  CPU percentage.              :100%

Python:

% cat builtin.py
#!/usr/bin/python
s = "aaa,bbb,ccc"

null = open("/dev/null", "w")
for i in range(1000):
    print >>null, s.split(",")[1]

% time python builtin.py
    The name of this job.             :python builtin.py
    CPU seconds spent in user mode.   :0.01s
    CPU seconds spent in kernel mode. :0.00s
    Elapsed time in seconds.          :0.01s
    The  CPU percentage.              :94%

Pythonが速い.

...いやまてE5310(Quad Core Xeon)ほぼ独り占めの環境だった.凄腕ハカー雇うより機材投資のほうがペイできるよ(身も蓋もない).

それはおいといて,以下GLANTANK(XScale-IOP8032x 400MHz)でやるほうが現実的か.

builtin read:

% time sh builtin.sh
    The name of this job.             :sh builtin.sh
    CPU seconds spent in user mode.   :1.92s
    CPU seconds spent in kernel mode. :5.40s
    Elapsed time in seconds.          :7.99s
    The  CPU percentage.              :91%

exec awk:

% time sh awk.sh
    The name of this job.             :sh awk.sh
    CPU seconds spent in user mode.   :10.32s
    CPU seconds spent in kernel mode. :19.73s
    Elapsed time in seconds.          :30.05s
    The  CPU percentage.              :99%

Python:

% time python builtin.py
    The name of this job.             :python builtin.py
    CPU seconds spent in user mode.   :0.22s
    CPU seconds spent in kernel mode. :0.09s
    Elapsed time in seconds.          :0.31s
    The  CPU percentage.              :99%

bashは遅いかねえ.ただwgetとか鬼みたいなツールを繋げるには shell script使うほうがやっぱり楽ちんだし.

結局,人間がパタパタ手作業やるのに比べたらこんなベンチマークが いかにばかばかしいかってことは火を見るよりも明らかではあるけどあえて釣られ.