Назад | Перейти на главную страницу

Оптимизация файловой системы Linux для чтения ~ 500M небольших файлов

Мы наблюдаем проблемы с производительностью в файловой системе, содержащей ~ 500 M файлов, относительно небольших (обычно десятки КБ) и ~ 150 K каталогов. Доступ к файлам осуществляется преимущественно чтением, а запись выполняется довольно редко. Файлы в основном хранятся в иерархии хешированных каталогов с ~ 30 КБ файлов на каталог, но в некоторых случаях может быть до 500 К файлов в одном каталоге.

Сервер разделяет файловую систему на ~ 10 клиентских машин.

Получение списков каталогов часто происходит медленно, а иногда также чтение файлов по абсолютным путям, даже локально.

Это физический сервер, на котором работает Ubuntu 12.04.4 (ядро: 3.8.0 / x86_64), и мы используем ext4 на аппаратном томе RAID-6.

Какой будет рекомендованная настройка файловой системы в этом сценарии?

Когда у вас возникает такая проблема, вы должны:

  • получить все требования (задержка, пропускная способность, избыточность, надежность, безопасность, необходимые функции ...)
  • проанализировать существующие системы. Если их нет, создайте тестовые среды. Понять, как работают все компоненты. Определите текущую и ожидаемую нагрузку.
  • добавить системный мониторинг (с графиками) как для производственных, так и для тестовых систем. Контролируйте, по крайней мере, использование ЦП, использование сети и использование дискового ввода-вывода.
  • создавать тестовые серверы и тестировать их под нагрузкой. Нагрузочный тест с синтетическими тестами, а не только с микротестами.

Используйте стабильные версии последней ОС с последним стабильным ядром.

Какой будет рекомендованная настройка файловой системы в этом сценарии?

есть ли файловая система, особенно подходящая для этого случая (например, ext4, xfs, btrfs, ...)?

Я думаю, что ext4 - лучший выбор здесь с точки зрения безопасности. С точки зрения производительности чтения RaiserFS (/ 4) могла бы быть лучше:

https://unix.stackexchange.com/questions/28756/what-is-the-most-high-performance-linux-filesystem-for-storing-a-lot-of-small-fi

http://www.phoronix.com/scan.php?page=article&item=linux_39_fs&num=1

файловая система для миллионов небольших файлов

какую конфигурацию RAID (например, sw vs. hw, уровень RAID и т. д.) мы должны использовать?

Тебе надо:

  • сократить время ожидания / доступа
  • уменьшить количество операций чтения / записи (noatime, nodiratime, realtime, барьер = 0)

Каждый уровень RAID, на котором есть возможность выполнять параллельные операции, будет хорошим выбором, например, RAID 10 (программный рейд Linux) имеет множество вариантов настройки.

как насчет настройки совместного использования файлов (технология [например, NFS против конкуренции], конфигурация, ...)?

Я не могу здесь назвать цифры, файлообменник - тоже довольно широкое понятие. У меня был очень хороший опыт работы с FTP при работе с большим количеством файлов (не с FTPS - потому что согласование TLS для каждой передачи требует времени), лучше туннелировать трафик. Кажется, что лучшее разделение между гибкостью протокола (что вы можете сделать) и накладными расходами протокола (сколько времени занимает, пространство в пакете) при копировании небольших файлов.