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

Файловая система / Опции для интенсивного случайного ввода-вывода

Я планирую (в частном порядке) развернуть сервер, который будет забиваться случайными операциями ввода-вывода в файлах размером от 100 МБ до 50 ГБ. Запросы будут варьироваться от 128 КБ до 4 МБ. Профиль будет 50:50 относительно чтения и записи с тенденцией к большему количеству чтений.

Какая файловая система может лучше всего справиться с этой нагрузкой? На данный момент я выбрал XFS. Но какие мелодии мне следует искать?

Спасибо

Требования и ограничения:

  • Соотношение чтения и записи 50:50
  • Записываемые файлы будут варьироваться от размера, намного превышающего размер блока, до значительно превышающего размер блока.
  • Индивидуальные запросы будут варьироваться от 128 КБ до 4 МБ.
  • В Linux
  • Файловая система будет довольно большой, 14 ТБ.

Неизвестные, которые могут помочь:

  1. Независимо от того, происходит ли случайный ввод-вывод внутри файлов, или он полностью основан на чтении и записи целых файлов фрагментами 128–4 МБ
  2. Частота обновления файлов.
  3. Параллелизм: частота параллельных операций чтения / записи (операций ввода-вывода).

Последовательный ввод / вывод

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


Случайный ввод / вывод

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

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

Тем не менее, эта проблема становится очевидной только тогда, когда шаблоны и скорость доступа ввода-вывода подталкивают диски к их максимальным возможностям. При 14 ТБ в файловой системе это означает от 7 до 50 шпинделей в фактическом массиве хранения, что дает широкий спектр возможностей; от 630 операций ввода-вывода для 7 дисков по 2 ТБ, 7,2 тыс. об / мин до 9000 операций ввода-вывода для 50 дисков по 300 ГБ со скоростью вращения 15 тыс. об / мин. RAID-массив со скоростью вращения 7.2K RPM достигнет насыщения ввода-вывода намного быстрее, чем RAID-массив 15K RPM.

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


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

XFS:

  • Mount: установите для allocsize значение не более 65536 (64 МБ), но не устанавливайте высокий. Это увеличивает скорость метаданных для доступа к файлам.
  • Mount: установите для параметра «sunit» размер полосы вашего RAID-массива. Также можно установить во время форматирования.
  • Mount: установите swidth на количество дисков в RAID-массиве (или N-1 для R5, N-2 для R6). Также можно установить во время форматирования.
  • Формат: если вам действительно нужен этот последний процент, поместите журнал файловой системы на полностью отдельное запоминающее устройство. -l logdev=/dev/sdc3

EXT4:

  • Формат: -E stride установить количество блоков (512 байт или 4 КБ в зависимости от диска) на одной полосе диска в RAID.
  • Формат: -E stripe-width установить как 'swidth' в XFS
  • Формат: как и в случае с XFS, последний процент производительности можно уменьшить, поместив журнал на полностью отдельное устройство хранения. -O journal_dev /dev/sdc3/

Учитывая масштаб имеющихся у вас данных, я думаю, вы захотите взглянуть на файловую систему сетевого кластера, такую ​​как Lustre или проприетарную GPFS IBM. Они разработаны для обеспечения высоких результатов при таких ресурсоемких нагрузках, как ваша.

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

Но, хорошо, давайте просто поговорим об имени. Думаю, что помимо XFS вам подойдет ext4. Суть в том, что я думаю, что вам нужна файловая система на основе экстентов, чтобы максимально избежать фрагментации. И XFS, и ext4 поддерживают отложенную запись IIRC, поэтому оба могут помочь вам увеличить шанс выполнения слияния записи.

С уважением,

Муляди.