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

この記事へのトラックバック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年ぐらいでしょうか…。
Posted by medtoolz at 2007年03月31日 12:20
最後の例がそこそこ速いように見えていますが、echo じゃなくてディスクに触る処理だと結果は大きく変わるのでは。
Posted by kt at 2007年03月30日 15:52