Сравнение производительности популярных файловых систем под Линукс и FreeBSD


    На смену ext2 - основной старой доброй файловой системе Линукс в последнее время пришёл целый зоопарк файловых систем (ext3, xfs, jfs, reiserfs), поддерживающих модную ныне фичу - журналирование, предположительно, обеспечивающую гарантии целостности ФС при аппаратных сбоях. С другой стороны, основной конкурент Линукса - FreeBSD тоже не стоит на месте, предлагая softupdates - технологию, преследующую примерно те же цели. Естественно, рано или поздно, при наличии такого выбора возникает вопрос: что предпочесть. И, если надёжность ФС лишь с большим трудом поддаётся сравнению/учёту в цифрах (мне кажется, что этот вопрос вообще скорее религиозный т.к. всё перечисленные ФС ныне вполне удовлетворяют требованиям устойчивости к сбоям на "боевой" системе), то сравнение производительности осуществить достаточно просто. Этим-то мы и займёмся.



Будут измеряться:
-Загрузка процессора и скорость записи в файловую систему 5000 и 50000 мелких (256 байт) файлов;
-Загрузка процессора и скорость записи в файловую систему одного большого файла (1500 Мб);
-Загрузка процессора и скорость последовательного чтения 50000 мелких (256 байт) файлов;
-Загрузка процессора и скорость чтения большого файла (1500 Мб);
-Загрузка процессора и скорость чтения 50000 мелких (256 байт) файлов в случайном порядке;
-Загрузка процессора и скорость удаления 50000 мелких (256 байт) файлов.

Измерения проводятся с помошью программы benchfs на машине с процессором AMD Duron-750 c 64M RAM. HDD - Maxtor 6E040L0. Режим UltraDMA66.
Малый объём памяти объясняется желанием исключить влияние кэширования дисковых операций на результаты тестов. На самом деле и этого много, но модуля памяти меньшего объёма я просто не нашел. Кроме того, чтобы неиспользуемые страницы не вытеснялись в своп, освобождая место для дискового кэша, он (своп) был отключен.
Как известно, время доступа к данным на диске очень сильно зависит от того, насколько далеко они находятся от начала диска (т.е. от номера сектора). Поэтому каждый раз перед новым тестом создавалась новая файловая система на тех же секторах, что и старая, чтобы исключить зависимость от этого фактора.
ВременнЫе параметры снимались со счётчика состояний процессора. В ОС FreeBSD - с помощью системного вызова kvm_read(), в ОС Linux - с помошью файловой системы процессов (/proc/stat). Поэтому правильные значения загрузки процессора в тестах можно получить только на системе, в которой, кроме тестовой программы, больше нет активных процессов. От снятия статистики через getrusage() (как это сделано в программе time(1)) пришлось отказаться всвязи с тем, что эта функция зачастую выдаёт неадэкватные значения user и system.

Итак, проводились измерения параметров файловых систем ext3, jfs, reiserfs и xfs под управлением ОС ASPLinux-9 и файловых систем UFS1 и UFS2 ОС FreeBSD-5.1-CURRENT (с softupdates и без).


Для наглядности результаты тестов целесообразно свести в таблицу:

Таблица 1. В таблице показаны скорость соответствующей файловой операции(Кб/сек) / загрузка процессора(%), а для теста на удаление файлов - скорость удаления (в файлах в секунду) / загрузка процессора(%):
Файловая система
ext3
reiserfs
jfs
xfs
UFS1
UFS1+SoftUpd
UFS2
UFS2+SoftUpd
ОС
Linux
Linux
Linux
Linux
FreeBSD
FreeBSD
FreeBSD
FreeBSD
запись 5000 файлов по 256 байт
127.03 / 95.83
1041.67 / 99.3
518.67 / 48.54
372.02 / 76.79
135.71 / 31.78
650.41 / 93.49
126.98 / 30.79
640.00 / 98
запись 50000 файлов по 256 байт 31.17 / 98.89
808.54 / 98.32
406.90 / 57.32
268.70 / 81.32
120.59 / 30
593.03 / 92.81
118.99 / 30.33
601.05 / 96.92
запись файла размером 1500 Мбайт 25146.69 / 38.76
25440.98 / 44.28
25227.04 / 25.78
25759.92 / 25.3
26640.77 / 32.06
26614.92 / 34.72
26471.80 / 32.3
26670.37 / 33.8
последовательное чтение 50000 файлов по 256 байт 667.74 / 41.3
1418.84 / 68.9
231.48 / 19.56
497.61 / 47.97
630.91 / 72.32
616.57 / 72.76
617.76 / 71.85
582.24 / 69.91
чтение файла размером 1500 Мбайт 26529.89 / 27.1
26445.70 / 28.47
27188.69 / 26.72
26237.54 / 27.08
23759.44 / 27.44
23730.07 / 27
22765.00 / 25.25
22735.3 / 25.58
чтение 50000 файлов по 256 байт в случайном порядке
21.04 / 28.51
44.99 / 9.51
19.03 / 6.39
27.07 / 7.81
28.17 / 4.71
28.88 / 4.86
25.77 / 4.62
25.57 / 4.59
удаление 50000 файлов (256 байт) 14620 / 95.32
4188 / 91.87
1916 / 28.36
1430 / 64.4
595 / 17.65
10175 / 93.64
588 / 18.5
9846 / 93.24


Выводы

    Почти все файловые системы Линукс неплохо себя показали при записи большого количества мелких файлов. Исключение составила ext3 катастрофически "просев" по этому показателю при переходе от 5000 файлов к 50000. Даже UFS без SoftUpdates обогнала её в несколько раз. Reiserfs же, напротив оказался лидером, как и в большинстве остальных тестов.
    С записью и чтением большого файла все ФС справились хорошо, пожалуй только ФС семейства UFS показали небольшое (10%), необъяснимое отставание по скорости считывания.
    При считывании 50000 мелких файлов лучше всех себя показала reiserfs, а jfs оказалась явным аутсайдером. Двукратное снижение скорости считывания по сравнению с записью совершенно необъяснимо - ведь это более простая операция.
    Чтение 50000 файлов по 256 байт в случайном порядке оказалось почти непреодолимой задачей для всех без исключения ФС. Чуть лучше других себя показала reiserfs, видимо, благодаря наиболее продвинутому алгоритму поиска (B-tree).
    А вот по скорости удаления 50000 файлов, как ни странно, ext3 "впереди планеты всей". Далее идут ФС семейства UFS с SoftUpdates, затем, с большим отставанием, reiserfs. Комментировать это не берусь!
    Пару слов о файловых системах UFS для FreeBSD. Во первых, очевидно, что время UFS без SoftUpdates безвозвратно ушло, также, как и для ext2 (да и ext3 тоже). Напротив, UFS с SoftUpdates ведёт себя вполне достойно и способен конкурировать с новомодной reiserfs. Старый конь борозды не испортит!
    Во вторых следует сделать вывод о том, что появившаяся в FreeBSD-5.x UFS2 с встроенной поддержкой ACL не привела к какому-либо изменению быстродействия файловой системы.
    Итак, по сумме параметров, первое место в рейтинге Open Source файловых систем следует отдать reiserfs, показавшей отличную производительность как на операциях с мелкими, так и с большими файлами, второе, определённо - UFS1/UFS2 с SoftUpdates. А вот с третьим местом стоит подождать, так как xfs и jfs явно нуждаются в доработке, а ext3 - в списании в утиль :o)

Литература

1.   Bob Kridle, Marshall Kirk McKusick. Performance Effects of Disk Subsystem Choices for VAX - Systems Running 4.2BSD UNIX, July 27, 1983.


Hosted by uCoz