Алексей Федорчук
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 мы измеряем вовсе не быстродействие файловой системы, а быстродействие жестких дисков. И даже более того — не столько само их быстродействие, сколько эффективность реализации драйверов интерфейсов для дисковых устройств: понятно, что интерфейс SATA быстрее, чем PATA, но не в полтора-два раза, как можно было бы заключить из табл.2 и диаграммы.
Так что беру обратно все свои слова, сказанные в предыдущих заметках относительно медлительности файловых систем UFS и UFS2: на самом деле мы не знаем, каково их реальное быстродействие. И, вследствие особенностей работы FreeBSD с дисковыми накопителями, рискуем никогда этого не узнать.
С другой стороны, сказанное вселяет некоторый оптимизм: раз быстродействие файловых операций во FreeBSD определяется не файловой системой, а эффективностью драйверов дисковых устройств — во-первых, и их физической производительностью — во-вторых, можно ожидать со временем существенного прогресса в этой области.
И, наконец, последний вывод: приобретая новую машину под FreeBSD-десктоп, берите диски SATA — не пожалеете.