Как количество файлов в одной папке влияет на производительность ввода-вывода в файловой системе ext4?

Как количество файлов в одной папке влияет на производительность ввода-вывода в файловой системе ext4?

я используюКабинет министров Киото(хранилище ключей и значений) для моего проекта. Конкретный тип БД, который я использую, этоDirDBчто создает множество файлов в каталоге для хранения пар ключ-значение. На сервере, на котором я запускаю этот проект, установлена ​​файловая система ext4. Проблема, с которой я столкнулся, заключается в том, что задержка ввода-вывода увеличивается по мере увеличения количества файлов в каталоге. Кроме того, когда в каталоге слишком много файлов (скажем, более 1 миллиона файлов), когда я пытаюсь удалить всю папку, это занимает целую вечность (уже более 5 часов и все еще работает). Может ли кто-нибудь объяснить, почему задержка ввода-вывода увеличивается по мере увеличения количества файлов и почему rm требуется целая вечность для удаления папки?

решение1

Самый простой пример задержек: очевидно, что время вывода списка всего каталога будет зависеть от его размера.

Во-вторых, в зависимости от настроек файловой системы, ext4 использует либо связанные списки, либо хэшированное b-дерево для поиска в каталогах. Вам нужно только посмотреть, как работают эти две структуры данных, чтобы получить некоторое представление о различиях, которые может создать неправильная конфигурация. Коротко говоря, связанные списки довольно медленные и подходят только для небольших каталогов, тогда как хэши намного быстрее и гораздо лучше подходят для больших каталогов.

Обработка связанного списка подразумевает просмотр каждого элемента в списке, поскольку в большинстве случаев только элемент n-1 знает, где находится элемент n, поэтому сначала необходимо прочитать элемент n.

Обработка хэш-дерева включает вычисление числа в памяти и переход непосредственно к деталям на основе этого числа. Хотя это может потребоваться сделать несколько раз для больших каталогов, это намного быстрее, чем обрабатывать каждый узел.

В любом случае, если вы действительно хотите понять детали, вся документация доступна онлайн. Вы можете начать здесь, например:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

Связанный контент