Рейтинг:1

Фрагментированный каталог на ext4?

флаг id

Моя файловая система ext4 теряет производительность при росте.

У меня есть система, хранящая много файлов изображений. Этот сервер изображений на основе Debian хранит файлы изображений, разделенные по папкам года, на наборах дисков объемом 1-2 ТБ с аппаратным RAID-1. Файлы хранятся в структуре папок года и двух уровнях по 256 папок ниже этого.

Нравиться

images/2021/2b/0f/193528211006081503835.tif

Файлы записываются непрерывно в течение года и равномерно распределяются с помощью хэша, поэтому каждая папка листа/изображения содержит около 400 файлов на конец года.

Это дает в общей сложности около 256 x 256 x 400 = 26 214 400 файлов в год.

Итерация этой структуры папок хорошо работает примерно до 20 миллионов файлов. Это занимает, может быть, несколько часов. При увеличении размера даже листинг листовой папки с 300-400 файлами может занять 1-4 секунды, если он не находится в кеше. Я подозреваю, что это как-то связано с фрагментацией в записях каталога.

Доступ к отдельному файлу, когда вы знаете путь, всегда быстрый. И это не проблема с оборудованием/диском, производительность необработанного ввода-вывода хорошая. Кстати, файлы из этой структуры никогда не удаляются.

Дефрагментация с помощью e4defrag ничего не меняет. Я полагаю, что он дефрагментирует только файлы, а не каталоги. fsck.ext4 -D может быть решением, но, поскольку это производственная система, я не хочу размонтировать файловую систему и пытаться.

Что действительно помогает, так это копирование файлов во временную папку, а затем их перемещение обратно с перезаписью оригинала. Нравиться

cp -a изображения/2021/2b/0f/* изображения/2021/2b/tmp
mv -f изображения/2021/2b/tmp/* изображения/2021/2b/0f

После этой операции производительность восстанавливается (даже если не в кеше). Если бы сами файлы были фрагментированы, я понимаю, почему это помогло бы, но это не соответствует e4defrag.Перемещение файлов во временную папку и обратно не помогает.

Может ли кто-нибудь помочь мне понять, что здесь происходит.

djdomi avatar
флаг za
я думаю, вам нужно добавить больше информации о сервере, более того, я думаю, что ваш часовой отчет увеличится в размерах;) также взгляните на https://serverfault.com/questions/796665/what-are-the-performance-implications- for-millions-of-files-in-a-modern-file-sys также может быть дубликатом вашего вопроса, а также https://serverfault.com/questions/506465/is-there-a-hard-limit-to- количество-файлов-в-каталоге-может-есть
флаг id
@djdomi Лучше описал систему, спасибо. Пожалуйста, объясните, что вы имеете в виду под взрывом журнала, я не уверен, что вы имеете в виду. Что касается цитируемых статей, ни одна папка не будет содержать более 500 файлов, так что это не должно быть проблемой. Я думал о XFS (никогда не использовал его), но прочитал как плюсы, так и минусы, возможно, стоит подумать.
djdomi avatar
флаг za
я имею в виду, что вы столкнетесь с максимальным количеством файлов ext4, если я правильно считаю, см. здесь https://serverfault.com/questions/104986/what-is-the-maximum-number-of-files- файловая система может содержать
флаг id
@djdomi, спасибо за разъяснение. Каждый набор дисков представляет собой собственную файловую систему, поэтому набор дисков заполняется до того, как станет проблемой максимальное количество файлов или нехватка inode. Пока файлы за один год могут храниться на одном наборе дисков, это нормально.
djdomi avatar
флаг za
я не экспортирую файловую систему, но я считаю, что это проблема при использовании ext4 для такого большого количества файлов
Рейтинг:0
флаг in

Попробую ответить за ext4. Как создать файловую систему? что выводится, например:

Судо Tune2FS -l/dev/sda1

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

кот /proc/sys/VM/vfs_cache_pressure

показывает 100, попробуйте уменьшить это значение до 50. Его можно сделать постоянным в файле и т.д./sysctl.conf где вы можете написать:

vm.vfs_cache_pressure=50

и применить его по судо sysctl -p Это повысит вероятность кэширования метаданных. Индексы каталогов Ext4 могут фрагментироваться, как вы предлагаете. Прямого лечения нет, но вы можете взглянуть на этот пост Stackexchange: как атомарно-дефрагментировать каталоги ext4

флаг id
Спасибо за предложение. Параметр давления в кеше выглядит интересным для хранения большего количества метаданных в кеше. Но где у меня больше всего проблем, так это при сканировании всего дерева. Я сомневаюсь, что это дает прирост производительности здесь. Я буду иметь это в виду, когда в конце года новый набор дисков пополнится. Я также оцениваю XFS, установленную на ext4, чтобы увидеть, как она работает.
A. Genchev avatar
флаг in
Обычно файловая система ext может содержать 64 КБ записей в одной папке без производительности. проблема. Мне также интересно, почему вам нужно повторно сканировать все дерево, если вы уверены, что нет удаленных файлов. Рассматривали ли вы возможность изменения структуры L2/L3 на месяц/день вместо хэша? Смысл в том, что тогда у вас не будет ни удаленных, ни новых добавленных файлов, поэтому старые результаты сканирования будут действительными. Вам нужно будет сканировать только на следующий месяц. И время идет в одну сторону.
флаг id
Причина использования хеша заключается в том, что единственное, что известно при извлечении файла изображения, — это год и имя файла. Даже если это удастся решить в будущем, это приведет к хранению большего количества файлов в листовой папке. Вроде 100000 в день.
A. Genchev avatar
флаг in
Итак, вы добавляете не изображения текущего дня/месяца, а старые файлы с начала всего года? Тогда вы не будете получать эти файлы каждый день/месяц. В противном случае вы бы знали, какой файл появился в какое время (с вашей точки зрения).
флаг id
Да, вы правы, мы пишем старые изображения. Даже изображения, принадлежащие предыдущим годам. Затем мы случайным образом выбираем изображения возрастом до 5-10 лет.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.