Продуктивність EXT4 стала дуже поганою в системі з великою кількістю невеликих файлів


10

У мене є невеликий вбудований пристрій, який має лише 128 Мб оперативної пам’яті

До цього пристрою додається жорсткий диск 2 Тб USB2

Я був дуже задоволений роботою пристрою до недавнього часу, коли або кількість файлів переступило поріг, ємність диска переступила поріг (я не впевнений, який)

на диску є багато невеликих файлів, що обумовлено характером написання файлів додатків, організованих дуже врівноважено - жоден каталог листових вузлів не містить понад 200 файлів, а файлів трохи більше 800 000.

Я сподіваюся отримати підказку на щось, щоб розслідувати. Продуктивність диска значно впала, пристрій досить непомітно блискав, і тоді раптом продуктивність падала, як скеля.

Моє припущення полягає в тому, що організаційна структура, яку я вибрала на диску для своїх файлів, якось зашкодила здатності кешів inode залишатись zippy.

в якості експерименту я демонтував диск (промивання кеш-файлів, перевірено безкоштовно). Потім з командного рядка я перейшов глибоко в структуру каталогу. Всього в цьому каталозі (та його дітях) було лише близько 3200 файлів, що містяться під ним, і в цей момент "безкоштовно" показало> 117 Мб вільної пам'яті

в цей момент я набрав команду "знайти", а потім "безкоштовно"

'find' показало близько 3000 файлів, але використання пам'яті перейшло від ~ 117MB до ~ 2MB

Я розумію баланси кешу і вільної пам'яті, і те, як ядро ​​вважає порожню сторінку поганою сторінкою, проте 115 Мб кешованого вмісту з каталогу з 3000 файлів вказує на серйозний розрив у моєму розумінні. Я сподіваюся, що хтось допоможе мені зрозуміти, що відбувається

чи можу я припустити, що збалансоване дерево - це шлях для того, щоб мати багато файлів?

Відповіді:


9

Дуже хороший опис проблеми.

Виходячи з того, що ви сказали, я думаю, що ви бачите, що використання плит зростає. Хороший експеримент буде запустити cat /proc/meminfoі cat /proc/slabinfoчерез другу затримку 3 , а ви йдете вглиб ієрархії ФС і відкрити 3000 файлів. По суті, це те, що ядро ​​буде переміщати структуру fs і сканує окремі файли та їхні вставки, і всі вони зберігаються в пам'яті. Якщо ви перевірите, /proc/slabinfoви побачите об'єкт, ext4_inode_cacheякий називається, який говорить вам, скільки пам'яті займе кожен вхід. Помножте це на кількість об'єктів (obj_size * no_obj), і ви отримаєте об'єм пам'яті, що використовується об'єктом. Чим глибше ви ввійдете в ієрархію fs, тим більше пам'яті буде витрачено, поки система не потрапить на високий водяний знак зони пам'яті. Після цього ядро ​​почне регенерацію.

Якщо ти заглянеш у пам’ять та слабінфо, ти отримаєш потрібну інформацію. Якщо ви хочете, щоб я подивився, вставте його;)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.