Я планирую (в частном порядке) развернуть сервер, который будет забиваться случайными операциями ввода-вывода в файлах размером от 100 МБ до 50 ГБ. Запросы будут варьироваться от 128 КБ до 4 МБ. Профиль будет 50:50 относительно чтения и записи с тенденцией к большему количеству чтений.
Какая файловая система может лучше всего справиться с этой нагрузкой? На данный момент я выбрал XFS. Но какие мелодии мне следует искать?
Спасибо
Требования и ограничения:
Неизвестные, которые могут помочь:
Если соотношение 50:50 представлено чтением и записью файлов целиком, причем файлов довольно большого размера, то в отношении файловой системы ваши шаблоны доступа более последовательны, чем случайны. Используйте файловую систему на основе экстентов, чтобы увеличить последовательность в вашей файловой системе для лучшей производительности. Поскольку файлы очень большие, упреждающее чтение обеспечит значительное повышение производительности, если оно поддерживается оборудованием (некоторые RAID-контроллеры это обеспечивают).
Это изменится, если вы планируете одновременно выполнять операции чтения / записи, и в этот момент все становится значительно случайным. То же самое применимо, если вы открываете большое количество файлов и читаете / записываете небольшие части этих файлов, как если бы это была база данных.
Одно из самых больших заблуждений, с которыми я столкнулся, - это идея о том, что дефрагментированная файловая система работает лучше, чем фрагментированная, при обработке очень случайного ввода-вывода. Это верно только в файловых системах, где операции с метаданными сильно страдают от фрагментированной файловой системы. Для очень высоких уровней фрагментации файловые системы, основанные на экстентах, могут фактически испытывать большее снижение производительности, чем другие стили управления блоками.
Тем не менее, эта проблема становится очевидной только тогда, когда шаблоны и скорость доступа ввода-вывода подталкивают диски к их максимальным возможностям. При 14 ТБ в файловой системе это означает от 7 до 50 шпинделей в фактическом массиве хранения, что дает широкий спектр возможностей; от 630 операций ввода-вывода для 7 дисков по 2 ТБ, 7,2 тыс. об / мин до 9000 операций ввода-вывода для 50 дисков по 300 ГБ со скоростью вращения 15 тыс. об / мин. RAID-массив со скоростью вращения 7.2K RPM достигнет насыщения ввода-вывода намного быстрее, чем RAID-массив 15K RPM.
Если скорость операций ввода-вывода не превышает лимитов хранилища, выбор файловой системы должен основываться больше на общей гибкости управления, чем на настройке последних нескольких процентных пунктов производительности.
Однако, если ваш ввод-вывод фактически полностью загружает ваше хранилище, тогда возникает необходимость в настройке.
XFS:
-l logdev=/dev/sdc3
EXT4:
-E stride
установить количество блоков (512 байт или 4 КБ в зависимости от диска) на одной полосе диска в RAID. -E stripe-width
установить как 'swidth' в XFS-O journal_dev /dev/sdc3/
Учитывая масштаб имеющихся у вас данных, я думаю, вы захотите взглянуть на файловую систему сетевого кластера, такую как Lustre или проприетарную GPFS IBM. Они разработаны для обеспечения высоких результатов при таких ресурсоемких нагрузках, как ваша.
Я думаю, что настоящая проблема здесь не только в файловой системе, но и в параметрах, которые вы используете с файловой системой. Одна вещь, которая может повлиять, - это размер упреждающего чтения.
Но, хорошо, давайте просто поговорим об имени. Думаю, что помимо XFS вам подойдет ext4. Суть в том, что я думаю, что вам нужна файловая система на основе экстентов, чтобы максимально избежать фрагментации. И XFS, и ext4 поддерживают отложенную запись IIRC, поэтому оба могут помочь вам увеличить шанс выполнения слияния записи.
С уважением,
Муляди.