2007年03月30日 04:30 [Edit]
あわてるな ディスクはそんなに 速くない
誤差の範囲かどうかは、ファイル数による。
無精で短気で傲慢なプログラマ | find には sh!いまどき fork/exec rm のオーバーヘッドがどれほどのものか。 xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに rm が複数回実行されるときの違いにどれほどの差があると言うのか。 誤差の範囲である。
ファイル数が数百ぐらいなら大差はないが、それが数万、数十万ともなると話は違ってくる。なにしろ相手はCPUではなくHDD。こちらはCPUほど高速ではないのだ。
実際、ベンチマークを取ってみると、結構な差があることがわかる。特に-exec
は遅い。そして、shをカジュアルにpipeで使うのはワイルドカードが恐ろしい。
xargsが有用かつfindの-execな対象があまりに多くてコマンド行のバッファが溢れそうなときは使いますけど基本的に使いません
あとperlは挫折してること,根本的に嫌いなので基本的に使いません.
好き嫌いを言えるのは、システム管理がきちんと出来てから。
私は両者の狭間にずっといた--今もいる--のでよくわかるのだけど、自分の好みを前面に出しやすい「プログラマー」と、動いてなんぼの「システム管理者」ではかなりメンタリティが異なる。このあたり、研究と臨床の違いに通じるような気がするのだけどいかがでしょう>それとなくmedtoolzさん。
両者はもっとお互いを知るべきだろう。特にプログラマーはシステム管理者の現場の知恵から学べることが多いはず。
もうちょっと視野を拡げててみてもいいんじゃない、君たち。
Dan the Man with Too Many, Too Slow Storage Devices
% /usr/bin/time -l sh -c "find /usr/src -type f > /dev/null" 0.92 real 0.06 user 0.85 sys 1048 maximum resident set size 32 average shared memory size 135 average unshared data size 129 average unshared stack size 338 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 3 voluntary context switches 161 involuntary context switches
% /usr/bin/time -l sh -c "find /usr/src -type f | xargs /bin/echo > /dev/null" 0.97 real 0.15 user 0.82 sys 1048 maximum resident set size 30 average shared memory size 140 average unshared data size 129 average unshared stack size 1917 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 399 voluntary context switches 542 involuntary context switches
% /usr/bin/time -l sh -c "find /usr/src -type f | perl -nle print > /dev/null" 0.97 real 0.12 user 0.85 sys 1880 maximum resident set size 31 average shared memory size 135 average unshared data size 128 average unshared stack size 526 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 400 voluntary context switches 552 involuntary context switches
% /usr/bin/time -l sh -c "find /usr/src -type f -exec /bin/echo {} \; > /dev/null" 62.16 real 12.40 user 30.95 sys 1040 maximum resident set size 12 average shared memory size 45 average unshared data size 125 average unshared stack size 2356511 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 77757 voluntary context switches 8849 involuntary context switches
% /usr/bin/time -l sh -c "find /usr/src -type f | sed 's/^/echo /' | sh > /dev/null" 1.41 real 0.34 user 0.84 sys 1048 maximum resident set size 43 average shared memory size 115 average unshared data size 127 average unshared stack size 591 page reclaims 0 page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 568 voluntary context switches 753 involuntary context switches
Posted by dankogai at 04:30│Comments(2)│TrackBack(1)
この記事へのトラックバックURL
この記事へのトラックバック
find(1)ネタというのも、定期的にネットを賑やかにする時候ネタになりつつあるようです。
いまさらxargsの便利さを主張してみる
findでファイル検索入門 - builder by ZDNet Japan
というわけで、いまさらfindとperlの相性のよさを再確認してみることにしてみま...
perl - the best friend of find(1)【404 Blog Not Found】at 2008年02月24日 22:56
この記事へのコメント
>研究と臨床
病院の場合はIT業界どころの騒ぎではなく、研究と臨床とは、
全く別分野の仕事になっています。
日本では人間相手に「研究」を行うのはお金がかかりすぎて、
実質不可能です。
ネズミやウサギを使った研究を発表して、ものすごく運が良ければ
海外の誰かが人体で治験をして、それが評判になってから日本で
盛り上がって、厚生省の人たちが適当にシャブシャブつまんだら、
日本で薬が認可されて、というのが研究が臨床につながるまでの
大雑把な流れ。大体1サイクル20年ぐらいでしょうか…。
病院の場合はIT業界どころの騒ぎではなく、研究と臨床とは、
全く別分野の仕事になっています。
日本では人間相手に「研究」を行うのはお金がかかりすぎて、
実質不可能です。
ネズミやウサギを使った研究を発表して、ものすごく運が良ければ
海外の誰かが人体で治験をして、それが評判になってから日本で
盛り上がって、厚生省の人たちが適当にシャブシャブつまんだら、
日本で薬が認可されて、というのが研究が臨床につながるまでの
大雑把な流れ。大体1サイクル20年ぐらいでしょうか…。
Posted by medtoolz at 2007年03月31日 12:20
最後の例がそこそこ速いように見えていますが、echo じゃなくてディスクに触る処理だと結果は大きく変わるのでは。
Posted by kt at 2007年03月30日 15:52