小さなファイルがたくさんあるシステムでは、EXT4のパフォーマンスが本当に悪くなった


10

RAMが128MBしかない小さな組み込みデバイスがあります

このデバイスに接続されているのは2TB USB2ハードディスクです

最近まで、デバイスのパフォーマンスに非常に満足しており、ファイルの数がディスクの容量のしきい値を超えたときに、しきい値を超えました(どちらかわかりません)。

書き込みの性質上、ディスク上には多数の小さなファイルがあります。アプリケーションファイルは非常にバランスのとれた方法で編成されています。リーフノードディレクトリには200を超えるファイルはなく、800,000を超えるファイルしかありません。

私は調査するためにリードを得たいと思っています。ディスクのパフォーマンスが大幅に低下しました。デバイスは順調に動いていたため、突然のパフォーマンスはすべて岩のように低下​​しました。

私の仮定では、ディスク上でファイル用に選択した組織構造が、iノードキャッシュの機能を損なうために何らかの形で害を及ぼしていると思います。

実験として、ディスクのマウントを解除しました(キャッシュのフラッシュ、無料で確認済み)。次に、コマンドプロンプトからディレクトリ構造の深いところに移動しました。すべてがこのディレクトリ(およびその子)にはその下に含まれるファイルが約3200しかないことを伝え、この時点で 'free'は117MBを超える空きメモリを示しました

この時点で、コマンド「find」に続けて「free」を入力しました

「検索」は約3000ファイルを示しましたが、メモリ使用量は約117MBから約2MBになりました

キャッシュと空きメモリのバランス、およびカーネルが空のページを不良ページと見なす方法を理解しています。ただし、3000ファイルのディレクトリから115MBのキャッシュされたコンテンツは、私の理解に重大なギャップがあることを示しています。誰かが起こっていることを理解するのに役立つことを願っています

バランスの取れたツリーが多くのファイルを持つための方法だと思いますか?

回答:


9

非常に良い問題の説明。

おっしゃったとおり、スラブの使用率が高くなっているようです。良い実験は実行するだろうcat /proc/meminfocat /proc/slabinfoあなたはFSの階層の奥深くに行くと3000個のファイルを発見しながら、3秒の遅延の上に。本質的に起こっていることは、カーネルがfs構造をトラバースし、個々のファイルとそのiノードをスキャンし、それらすべてがメモリに格納されることです。チェック/proc/slabinfoすると、ext4_inode_cache各iノードがどれだけのメモリを消費するかを示す、というオブジェクトが表示されます。これにオブジェクトの数(obj_size * no_obj)を掛けると、オブジェクトが使用しているメモリの量がわかります。fs階層に深く入ると、システムがメモリゾーンの最高水準点に達するまで、より多くのメモリが消費されます。その時点で、カーネルは再利用を開始します。

meminfoとslabinfoに突っ込むと、探している詳細が表示されます。あなたが私に見てほしかったら、それをペーストビンしてください;)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.