
私はネットワーク ファイル システムにたくさんのファイルを書き込んでいます。これはディレクトリ構造に書き込まれており、ディレクトリ構造内の各リーフ ディレクトリには少数 (約 1,000 個) のファイルがあります。関連するファイルを含むディレクトリ構造の部分は非常にフラットです。
ls または mkdir foo を実行すると、対応する操作に長い時間がかかります (約 10 分)。
なぜこのようなことが起こるのでしょうか? ls や mkdir などの操作をより効率的に実行するにはどうすればよいですか?
答え1
ネットワーク ファイルシステムを使用しているため、速度はディスクではなくネットワークによって制限される可能性があります。
を実行するとls
、基本的な操作はすべてのファイルを読み込み、並べ替えてから印刷することです。つまり、ls
数千のファイル エントリを読み取る必要があります。キャッシュは役立ちますが、それでも遅いプロセスです。
同様に、ディレクトリを実行するときは、mkdir
そのディレクトリがまだ存在していないことを確認する必要があります。
解決策としては、ディレクトリあたりのファイル数を減らして、構造を狭くて深いむしろその後浅く広い。