1

Linux システムでは、約 100.000 個のファイル (いくつかの統計データが含まれています) を含むディレクトリがあります。ワイルドカードを使用してそれらにアクセスする必要がありますが、パフォーマンスの問題が発生しています。特定のファイルにアクセスするときは、非常に高速です。

time ls 19991
19991

real    0m0.004s
user    0m0.000s
sys     0m0.000s

ワイルドカードを使用すると、(ご想像のとおり) 遅くなります。

time ls 19991*
19991

real    0m0.043s
user    0m0.020s
sys     0m0.020s

しかし:ファイルに同時にアクセスしようとすると、すべてのアクセスが遅くなります:

 i=1; while [ $i -le 10 ]; do (time ls 19991* &) ; let i=i+1; done 
19991
19991

real    0m0.248s
user    0m0.010s
sys     0m0.020s
19991

real    0m0.279s
user    0m0.000s
sys     0m0.040s
19991
19991
19991

real    0m0.306s
user    0m0.050s
sys     0m0.000s

real    0m0.236s
user    0m0.010s
sys     0m0.030s

real    0m0.257s
user    0m0.010s
sys     0m0.040s

real    0m0.263s
user    0m0.020s
sys     0m0.020s
19991
19991

real    0m0.196s
user    0m0.030s
sys     0m0.010s

real    0m0.175s
user    0m0.020s
sys     0m0.020s
19991

real    0m0.095s
user    0m0.040s
sys     0m0.000s
19991

real    0m0.158s
user    0m0.020s
sys     0m0.040s

アクセスがカーネルによってシリアル化されたとしても、最初の "ls" に約 40 ミリ秒、2 番目に 80 ミリ秒、3 番目に 120 ミリ秒かかると予想されます。しかし今では、最速の "ls" でさえ 95 ミリ秒かかり、そのほとんどは約 200 ミリ秒です。

これは、ローカル ファイル システム (ext3) を使用している場合と、ネットワーク マウント ディレクトリ (nfs) を使用している場合に発生します。したがって、特定のファイルシステムとは何の関係もないと思います。

この速度低下の原因や修正方法はありますか?

4

1 に答える 1