Обескураживающие результаты тестирования файловой системы FreeBSD (UFS2, принятая в качестве нативной в 5-й ветке), выполненные ранее, не давали мне покоя. И даже то, что при использовании программного RAID (измерения проводились на дисках, объединенных ccd
) скорость файловых операций уже не смотрелась столь мрачно, дела не меняло -- ведь сама по себе файловая системы тут не при чем.
И потому, установив новую ОС - DragonFlyBSD, - я решил вернуться к тестам на скорость файловых операций. В отличие от FreeBSD 5-й ветки, DFBSD сохранила верность первой версии файловой системы UFS. На этот раз в центре внимания был эффект асинхронного монтирования при отключении SoftUpdates - результаты предыдущих измерений показали, что при включении последнего механизма опция async
просто игнорируется. Хотя, должен заметить, так было не всегда: в известной статье МакКазика и Ганджера (русский перевод) описаны результаты измерения быстроты файловых операций при включении SoftUpadates и монтировании в асинхронном режиме.
Измерения проводились на ноутбуке Toshiba Satellite Pro A40 с процессором Pentium-4/2,66 (Mobile), 512 Мбайт памяти, ATA-100 винчестером неизвестного происхождения (ни одна из утилит имени производителя мне так и не открыла) объемом 40 Гбайт, со скоростью вращения 4200 об./мин. В качестве "пробы пера", как и ранее, выполнялись следующие операции:
- копирование массива смешанных данных общим объемом 830 Мбайт;
- распаковка и копирование дерева портов FreeBSD (объемом около 25 Мбайт);
- копирование avi-файла размером 693 Мбайт.
Тесты для Ext2fs и ReiserFS проводились под управлением операционной системы Linux (дистрибутив Archlinux, ядро 2.6.8.1, установленное из умолчального бинарного пакета), для UFS - под DragonFlyBSD (октябрьский снапшот 2CSNAP-20041021-1130-GCC3, собранный с gcc3.4.1, ядро GENERIC).
Тесты осуществлялись на специально выделенном разделе объемом 5 Гбайт, на котором последовательно создавались файловые системы: Ext2fs, ReiserFS (для сравнения) и UFS. Для последней замеры проводились при включенном и отключенном механизме SoftUpadates. В последнем случае файловая система монтировалась в двух режимах: сначала умолчальном, частично асинхронному (опция noasync), а затем - чисто асинхронному (опция async). О смысле этих опций говорилось в одной из предыдущих заметок, а механизм SoftUpadates был описан в книге "Доступный Unix">. В каждых условиях все три теста выполнялись трижды (с размонтированием файловой системы в промежутке), за итоговый результат принималось среднее арифметическое. Что и можно видеть в таблице (результаты в секундах).
Тест | Работа с данными | Работа с портами | Большой файл | |||
File Systems | Copy | Delete | Untar | Copy | Delete | Copy |
Ext2fs | 136 | 9 | 36 | 189 | 39 | 98 |
ReiserFS | 150 | 3 | 46 | 96 | 30 | 95 |
UFS, noasync | 393 | 49 | 271 | 356 | 258 | 115 |
UFS, async | 252 | 14 | 74 | 129 | 69 | 116 |
UFS, SoftUp | 274 | 15 | 235 | 339 | 188 | 115 |
Результаты измерений, которые можно видеть также на рисунке, несколько отличаются от полученных ранее. Что можно связывать с тем, что на низкоскоростном "железе" (напомню, речь идет о медленном ноутбучном винчестере) детали реализации конкретных файловых систем оказываются менее значимыми.
Рисунок. Результаты измерения быстродействия
Чтобы более не возвращаться к этому вопросу, начну с копирования большого файла. Тут мы видим распадение результатов на две группы: обе файловые системы Linux (лучшие, но практически равные, результаты) и все вариации на тему UFS (результаты столь же ровные, но на 15-20% худшие). Очевидно, это можно связать не столько с устройством файловых систем, сколько с быстродействием ATA-интерфейса в этих операционках.
В работе с массивом смешанных данных, как и ранее, чемпионом оказывается Ext2fs, за которой вплотную следует ReiserFS. В группе UFS-тестов характерен провальный результат этой файловой системы без задействования SoftUpdates, смонтированной в частично синхронном режиме. Чисто асинхронный режим демонстрирует некоторое превосходство над механизмом SoftUpdates - впрочем, не столь уж принципиальное.
Вполне предсказуемо, что во всем блеске асинхронный режим UFS проявляется на работе с портами - то есть огромным количеством очень маленьких файлов. Тут она не только более чем вдвое выигрывает у механизма SoftUpdates, но и (спешите видеть, впервые в мировой истории!) вполне значимо опережает Ext2fs на операции копирования. Хотя до ReiserFS и не дотягивает - ведь это коронный номер последней.
В общем, можно констатировать, что отказ от SoftUpdates в сочетании с асинхронным монтированием несколько повышает быстродействие файловых операций на UFS. Конечно, это влечет за собой и снижение надежности файловой системы. А поскольку никаких механизмов журналирования для UFS нет и не предвидится, последний фактор является определяющим для серверных применений. На пользовательском же десктопе, снабженном бесперебойником (а последний, ИМХО, должен являться непременным атрибутом нормальной Unix-машины), это не столь критично. Конечно, монтировать в асинхронном режиме корневую файловую систему не стоит. Да и не имеет смысла - по нормальному она изменяется только при реинсталляции ядра. Однако для таких ветвей файловой системы, как /usr/src
, /usr/obj
, /usr/ports
, /usr/ports/distfiles
, асинхронное монтирование видится вполне подходящим. Конечно, наибольший эффект оно дало бы для каталога /home
. Однако тут каждый должен решать для себя сам - рисковать ли хоть ничтожным шансом на разрушение файловой системы ради быстродействия, или нет.