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

Алексей Федорчук
2 августа 2005 г

В прошлой своей заметке я говорил, что первое впечатление от 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-amd64Диаграмма сравнительного быстродействия файловых операций

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

Так что беру обратно все свои слова, сказанные в предыдущих заметках относительно медлительности файловых систем UFS и UFS2: на самом деле мы не знаем, каково их реальное быстродействие. И, вследствие особенностей работы FreeBSD с дисковыми накопителями, рискуем никогда этого не узнать.

С другой стороны, сказанное вселяет некоторый оптимизм: раз быстродействие файловых операций во FreeBSD определяется не файловой системой, а эффективностью драйверов дисковых устройств — во-первых, и их физической производительностью — во-вторых, можно ожидать со временем существенного прогресса в этой области.

И, наконец, последний вывод: приобретая новую машину под FreeBSD-десктоп, берите диски SATA — не пожалеете.