У меня есть каталог с около 100000 небольших файлов (каждый файл из 1-3 строк, каждый файл является текстовым файлом). По размеру каталог не очень большой (<2 ГБ). Эти данные хранятся на профессионально управляемом сервере NFS. Сервер работает под управлением Linux. Я думаю, что файловая система ext3, но я точно не знаю. Кроме того, у меня нет корневого доступа к серверу.
Эти файлы являются результатом крупномасштабного научного эксперимента, который я не могу контролировать. Тем не менее, я должен проанализировать результаты.
Любая операция ввода / вывода в этом каталоге выполняется очень и очень медленно. Открытие файла (fopen в python), чтение из открытого файла, закрытие файла, все очень медленно. В bash ls, du и т. Д. Не работают.
Вопрос в том:
Каково максимальное количество файлов в каталоге в Linux таким образом, чтобы было удобно выполнять обработку, fopen, чтение и т. Д.? Я понимаю, что ответ зависит от многих вещей: типа fs, версии ядра, версии сервера, аппаратного обеспечения и т. Д. Я просто хочу иметь практическое правило, если это возможно.
источник
Ответы:
Как вы предполагаете, это зависит от многих вещей, в основном от типа и параметров файловой системы и в некоторой степени от версии ядра. В серии ext2 / ext3 / ext4 произошло значительное улучшение, когда
dir_index
появилась опция (через некоторое время после первоначального выпуска ext3): она позволяет хранить каталоги как деревья поиска (логарифмический доступ по времени), а не как линейные списки (линейный доступ по времени). ). Это не то, что вы можете увидеть по NFS, но если у вас есть какой-то контакт с администраторами, вы можете попросить их запуститьtune2fs -l /dev/something |grep features
(возможно, даже убедить их обновить?). Имеет значение только количество файлов, а не их размер.Даже с
dir_index
, 100000 чувствует себя большим. В идеале, получить авторов программы, которая создает файлы для добавления уровня подкаталогов. Чтобы не снизить производительность, я бы рекомендовал ограничить около 1000 файлов на каталог для ext2 или ext3 безdir_index
и 20000 сdir_index
или reiserfs. Если вы не можете контролировать, как создаются файлы, переместите их в отдельные каталоги, прежде чем делать что-либо еще.источник