В прошлой своей заметке я говорил, что первое впечатление от 6-й версии FreeBSD на платформе AMD64 - повышение быстродействия файловых операций, не просто видимое невооруженным глазом, а так даже бросающееся в глаза. И возникает резонный вопрос - а чем же оно обусловлено? Для ответа на него я предпринял маленькое исследование, результаты которого и предлагаются ныне вниманию читателей.
Очевидно, что для количественной оценки быстродействия файловых операций скорость их нужно померять. Поскольку измерения эти имели целью исключительно удовлетворение собственного любопытства, меня больше всего
интересовали операции с теми данными, с которым я имею дело регулярно (и для которых мной ранее проводились измерения: см. здесь и здесь). А это а) массивы смешанных данных (тексты и иллюстрирующая их графика), б) массивы из огромного количества очень маленьких файлов (типа дерева портов
FreeBSD и аналогичных систем управления пакетами из Source Based
дистрибутивов Linux) и в) большие файлы, от объема CD и выше. В
соответствие с этим я и подобрал тестовые объекты.
Во-первых, это был каталог моих рабочих материалов - файлов в форматах
plain text и html с иллюстрациями в форматах gif, tiff, jpeg, png, объем
которых варьировал от нескольких килобайт до первых десятков мегабайт.
Для оживления картины я разбавил его звуковыми файлами mpeg (от 1,5 до 6
Мбайт каждый). В результате первый тестовый массив суммарно составил 830
Мбайт.
Вторым объектом было подручное дерево портов FreeBSD от 6 мая 2004 г.,
объемом 24,2 Мбайт, и результат его "растаривания", что давало каталог в
124 Мбайт. Специфика его - в том, что он образован огромным (свыше 100
тысяч) количество файлов, преобладающий размер которых - несколько сот
байт.
Наконец, третьим объектом стал avi-файл размером в CD - 693 Мбайт.
Ничего лучшего, чем измерять время копирования этих массивов, я не
придумал. То есть каталог данных копировался командой вида
$ cp data newdata
с последующим уничтожением целевого каталога
$ rm -Rf newdata
и замеров времени каждой операции посредством вывода команды date
до и после нее. Аналогично я поступал и с большим файлом. А тарбалл портов предварительно разворачивался командой
$ tar xzvf ports.tar.gz
время чего также замерялось - это ведь не только скорость декомпрессии и
разархивации, зависящая от быстродействия процессора, но и скорость
инкорпорации результата в файловую систему. В целях облегчения жизни
операции над каждым объектом выполнялись из простенького скрипта вида
date >> file_of_result && \
command1 && \
date >> file_of_result && \
...
date >> file_of_result &&
Все три теста для каждой файловой системы в каждом режиме выполнялись
трижды. По завершении цикла файловая система размонтировалась и перед
повторением монтировалась заново. В качестве результирующих принималось
среднее арифметическое из трех значений.
Тестовая платформа была описана в предыдущей заметке, поэтому остановлюсь на ней вкратце:
- процессор AMD64 3200+ (реальная частота 2 Ггц);
- материнская плата Epox EP-9NDA3I на чипсете nForce3 250;
- память 1 Гбайт (2 модуля по 512 Мбайт);
- видеокарта Gigabyte на Radeon 9250, 128 Мбайт;
- винчестер SATA Seagate Barracuda 120 Гбайт, 7200 об./мин;
- два винчестера PATA на первом канале - Seagate Barracuda IV, 7200 об./мин - 40 Гбайт (Master) и 80 Гбайт (Slave);
- CD-RW/DVD+RW NEC 350AG - мастером на втором IDE-канале.
Прочие компоненты в контексте темы значения не имеют. Диски, согласно показаниям утилиты atacontrol
, работали в режимах SATA150 и DMA100, соответственно.
Для начала измерения выполнялись на рабочей системе - FreeBSD 6 beta1, с ядром, пересобранным с истреблением встроенной поддержки всех SCSI- и сетевых адаптеров. Система эта лежала на диске SATA, разбитом следующим образом:
Тестовые данные были размещены в разделе /home
, практически пустом (за исключением профильных файлов пользователя), отформатированном под UFS2 с включенным механизмом SoftUpdates.
Результаты измерений можно видеть в первой строке таблицы.
Таблица 1
|
Данные
|
|
Порты
|
|
|
Бол. файл
|
|
Copy
|
Delete
|
Untar
|
Copy
|
Delete
|
Copy
|
AMD64-SATA
|
130
|
8
|
79
|
109
|
58
|
50
|
P-4/2,53
|
211
|
7
|
189
|
255
|
92
|
104
|
В сравнении с ранее выполненными измерениями для Pentium-4 с тактовой частотой 2,53 Ггц под управлением FreeBSD 5.2.1 (для i386, разумеется) результаты выглядят впечатляюще. Однако чем они обусловлены - сменой платформы, версии ОС или еще какими факторами, - из этого сравнения остается неясным. И не будем забывать, что нынешние измерения производились на винчестере SATA, тогда как предыдущие - на PATA (тот же самый Seagate Barracude IV 40 Мбайт).
К счастью, мы располагаем возможностью снять хотя бы одну неопределенность, так как текущая платформа располагает винчестером, не просто аналогичным прежней, но и вообще тем же самым - Barracude IV 40 Мбайт. Повторение измерений на нем (при той же файловой системе UFS2) дало результаты просто обескураживающие: скорость всех файловых операций на диске PATA снизилась в полтора-два раза. При этом результаты по копированию массива данных и большого файла, а также по удалению развернутого дерева портов оказываются практически идентичными таковым, полученным на машине с P-4/2,53 и тем же самым винчестером (таблица 2). А большая скорость "растаривания" и копирования дерева портов в текущей конфигурации может быть обусловлена большей производительностью AMD64/3200+ по сравнению с P-4/2,53 - ведь для обеих этих операций вклад подсистемы процессор/память будет существенным.
Таблица 2
|
Данные
|
|
Порты
|
|
|
Бол. файл
|
|
Copy
|
Delete
|
Untar
|
Copy
|
Delete
|
Copy
|
AMD64-SATA
|
130
|
8
|
79
|
109
|
58
|
50
|
AMD64-PATA
|
193
|
5
|
136
|
170
|
91
|
101
|
P-4/2,53-7200
|
211
|
7
|
189
|
255
|
92
|
104
|
P-4/2,66-4200
|
274
|
15
|
235
|
339
|
188
|
115
|
Отмеченная закономерность находит свое подтверждение, если сравнить сегодняшние результаты с теми, что были получены на ноутбучном винчестере со скоростью вращения 4200 об./мин и описаны в соответствующей статье. Правда, там речь шла об ОС DragonFlyBSD и файловой системе UFS, и потому строго количественно их сравнивать нельзя. Однако качественная тенденция и тут налицо: падение производительности диска приводит к сильному снижению быстродействия файловых операций - не смотря на несколько более мощный процессор (P-4/2,66) и то, что сама по себе UFS считается несколько более быстрой, чем UFS2 (рисунок).

Рисунок. Диаграмма сравнительного быстродействия файловых операций
Из всего сказанного выше можно сделать неутешительный вывод: в тестах файловых операций под управлением FreeBSD мы измеряем вовсе не быстродействие файловой системы, а быстродействие жестких дисков. И даже более того - не столько само их быстродействие, сколько эффективность реализации драйверов интерфейсов для дисковых устройств: понятно, что интерфейс SATA быстрее, чем PATA, но не в полтора-два раза, как можно было бы заключить из табл.2 и диаграммы.
Так что беру обратно все свои слова, сказанные в предыдущих заметках относительно медлительности файловых систем UFS и UFS2: на самом деле мы не знаем, каково их реальное быстродействие. И, вследствие особенностей работы FreeBSD с дисковыми накопителями, рискуем никогда этого не узнать.
С другой стороны, сказанное вселяет некоторый оптимизм: раз быстродействие файловых операций во FreeBSD определяется не файловой системой, а эффективностью драйверов дисковых устройств - во-первых, и их физической производительностью - во-вторых, можно ожидать со временем существенного прогресса в этой области.
И, наконец, последний вывод: приобретая новую машину под FreeBSD-десктоп, берите диски SATA - не пожалеете.