typerの日記: ひとつのディレクトリに百万個のファイル:結果失敗
百万個はちょっとつらかったみたい。
何時までたっても終らないから終了させちゃった。途中でcronでcvsupが走ったりしたし。1万個単位ででも途中経過を買いておけば良かったな。
あと、perlのループにforeach使ってたけど、やっぱ百万個の配列はメモリを食らうのでそれもいけなかったと反省。
とりあえずの結果。
% time perl .makefile
終了
31.129u 4727.540s 1:26:44.71 91.4% 15+1385k 271+13225io 1pf+0w
% time ls > /dev/null
1.403u 0.240s 0:01.69 97.0% 31+49098k 0+0io 2pf+0w
% time du -h
657M .
0.819u 10.162s 0:13.78 79.6% 10+53457k 5191+0io 0pf+0w
% ls | wc
332986 332986 2996874
33万個ちょっと。ん~、以外に厳しいね。実際は一様ではないでしょうが総平均すると14.3msec./fileという事に。十万個の時は0.25msec./fileだから57倍。文字通り指数関数的に増えてるのかな。
それではと、今度は読み出ししてみた。ファイルは番号を+10しつつ00000018から00010008まで。
% time perl .readfile > /dev/null
1.195312 real, 0.054688 user, 0.242188 sys
0.097u 0.260s 0:01.25 28.0% 15+1270k 1000+0io 0pf+0w
00100017から00110017まで。
% time perl .readfile > /dev/null
1.484375 real, 0.109375 user, 0.187500 sys
0.155u 0.205s 0:01.54 22.7% 17+1497k 1000+0io 0pf+0w
ざっぱな所ですが0.3msec/fileって所でしょうか。こっちは早い。
では、ファイルが少ない場合は?と調べようと消してるのだが、遅い。作成削除で色々とファイル数に依存する処理があるのでしょうね。
ひとつのディレクトリに百万個のファイル:結果失敗 More ログイン