[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:68921] Re: 1ディレクトリにファイルが多数ある場合のオーバヘッド


At Mon, 24 Apr 2000 19:44:16 +0900,
NOKUBI Takatsugu <knok _at_ daionet.gr.jp> wrote:
> >> $ time ls 00000000.txt
> >> $ time ls 00050000.txt
> >> $ time ls 00099999.txt
> >> 
> >> のように速度を確認してみたのですが、いずれも
> 
>   単独のファイルを見る分にはそれなりに早いようですね。

そうですね。

> >> そのような話自体が間違っているのか、他に悪影響するような
> >> ことがあるのでしょうか?(通常の ls で見るのは確かにつらいですが…)
> 
>   readdir() あたりが厳しいみたいです。某所で管理している INN 1.7.2 な 
> news server のとあるディレクトリをみると、

readdir() が重いわけではありません。
単純に readdir() して directory entry を取得する
だけならば、Ext2 でもかなり高速に動作するはずです。
試しに readdir() だけして filename だけ表示する
プログラムを作って 30000 個の小さなファイルがある
ディレクトリで動かしてみました。

$ time ls -l /tmp/test/
0.980u 3.430s 0:04.41 100.0%    0+0k 0+0io 0pf+0w

$ time readdir /tmp/test/ > /dev/null
0.100u 0.000s 0:00.09 111.1%    0+0k 0+0io 0pf+0w

> $ time ls -l /var/spool/news/control/cancel/|wc -l
>   23450
> 
> real    0m12.254s
> user    0m2.290s
> sys     0m9.800s

strace すると分かると思いますが、重くなる最大の原因は
lstat() によって inode 先の file 情報を取得する
動作が入るためでしょう。

各 inode を取得するためには、シークが多数はいる
わけですが、ディスクのようなランダムアクセスが
遅いデバイスにとって、多数のシークと回転レイテンシが
発生することは、相当なオーバーヘッドをもたらして
いるはずです。

--
後藤 正徳

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: