FreeBSD 6 и AMD64: тесты файловых операций


http://alv.me/?p=119
Автор: Алексей Федорчук

В прошлой своей заметке я говорил, что первое впечатление от 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 - не пожалеете.

Обновлено: 12.03.2015