У меня есть дерево каталогов, которое содержит много маленьких файлов и небольшое количество больших файлов. Средний размер файла составляет около 1 килобайта. В дереве 210158 файлов и каталогов (это число было получено при запуске find | wc -l
).
Небольшой процент файлов добавляется / удаляется / переписывается несколько раз в неделю. Это относится как к маленьким файлам, так и к (небольшому количеству) больших файлов.
Файловые системы, которые я пробовал (ext4, btrfs), имеют некоторые проблемы с размещением файлов на диске. В течение более длительного промежутка времени физическое расположение файлов на диске (вращающийся носитель, а не твердотельный диск) становится более случайным. Негативным следствием этого случайного распределения является то, что файловая система становится медленнее (например: в 4 раза медленнее, чем новая файловая система).
Существует ли файловая система Linux (или метод обслуживания файловой системы), который не страдает от этого снижения производительности и способен поддерживать стабильный профиль производительности на вращающемся носителе? Файловая система может работать на Fuse, но она должна быть надежной.
Ответы:
Спектакль
Я написал небольшой тест ( источник ), чтобы выяснить, какая файловая система лучше всего работает с сотнями тысяч маленьких файлов:
удалить все файлы
синхронизировать и удалять кеш после каждого шага
Результаты (среднее время в секундах, меньше = лучше):
Результат: в
то время как Ext4 показывал хорошую общую производительность, ReiserFS очень быстро читал последовательные файлы. Оказалось, что XFS работает медленно со многими небольшими файлами - вы не должны использовать его для этого случая использования.
Проблема фрагментации
Единственный способ запретить файловым системам распространять файлы по диску - это сохранить раздел настолько большим, насколько вам это действительно нужно, но не обращайте внимание на то, чтобы раздел не был слишком маленьким, чтобы предотвратить фрагментацию внутри файла. Использование LVM может быть очень полезным.
дальнейшее чтение
В Arch Wiki есть несколько замечательных статей, посвященных производительности файловой системы:
https://wiki.archlinux.org/index.php/Beginner%27s_Guide#Filesystem_types
https://wiki.archlinux.org/index.php/Maximizing_Performance#Storage_devices
источник
Я использую ReiserFS для этой задачи, он специально предназначен для обработки большого количества маленьких файлов. Об этом легко прочитать на вики-сайте funtoo.
источник
Производительность ext4 падает после 1-2 миллионов файлов в каталоге. Смотрите эту страницу http://genomewiki.ucsc.edu/index.php/File_system_performance, созданную Хирамом Клосоном в UCSC
источник
XFS известен тем, что очень хорошо работает в подобных ситуациях. Это часть того, почему мы используем его на своей работе для наших почтовых магазинов (которые могут содержать сотни тысяч файлов в одном каталоге). Он имеет лучшую отказоустойчивость, чем ReiserFS, используется гораздо шире и, как правило, является очень зрелой файловой системой.
Кроме того, XFS поддерживает онлайн-дефрагментацию. Хотя он использует метод отложенного размещения, который приводит к меньшей фрагментации (по сравнению с другими файловыми системами) для начала.
источник
syslogd
схема.) Например, на моей стороне в настройке XFS поверх MD я только что заметил, что удаление файла объемом 1,5 ГБ заняло 4,75 минуты (!), В то время как диск был ограничен со скоростью 100 транзакций / с со скоростью записи. более 2 МБ / с. Это также сильно влияет на производительность других параллельных операций ввода-вывода на том же диске, так как диск уже исчерпан. Никогда не видел ничего подобного в других ФС (или тестировался в тестах).