Сравнительное тестирование скорости работы software RAID'ов. Linux vs FreeBSD(mdadm vs gmirror)

 Введение

Мнение касаемо различных VS у меня давно сложилось — все зависит от задач. Но нет, нет, да возникает желание копнуть глубже, узнать кто все таки сильнее — Брюс Ли или Джеки Чан, Сталоне или Шварцнегер, mdadm или gmirror.
Тест не претендует на абсолютную объективность, скорее он даже субъективен в разрезе используемого аппаратного обеспечения. Но так или иначе, цифры есть цифры.
Кого заинтересовал, пожалуйте под кат.

Тестовый стенд
Материнская плата: ECS 865GV-M
Процессор: Intel® Celeron® CPU 2.00GHz
HDD 1(система): SATA-II 160Gb Western Digital WD1600AAJS (подключен к «мамке»)
HDD 2,3(RAID): SATA-II 1,5Tb Western Digital [WD15EARS] (подключены к Promise)
SATA контроллер: Promise SATA300 TX4 PCI, 4-port SATA300
RAM: 1280Mb
*не Бог весть какая конфигурация, но, как говорится, чем богаты, тем и рады.

Начало
Информация о использованных в тесте утилитах:
Bonnie++
Как видно из названия, Bonnie++ основан на бенчмарке Bonnie. Существует много различных типов операций над файлами и разные программы их по разному используют. Bonnie++ тестирует некоторые из них и выводит результат по каждому из тестов. Распространяется по лицензии GPL2.
Есть две секции операций в тестах. Первая — IO тест, который моделирует поведение некоторых приложений баз данных. Вторая — тест на создание, чтение и удаление большого количества маленьких файлов.
Сайт: www.coker.com.au/bonnie++/
Iozone
IOzone — это консольная утилита для измерения скорости работы файловой системы. Производится тестирование скорости таких операций, как read, write, re-read, re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write. Результаты выводятся в файл, данные из которого могут использованы для построения графиков в Excel.
Сайт: www.iozone.org/
DD
Думаю что читатель знаком с этим замечательным инструментом, поэтому ограничусь цитированием wiki.
«dd (англ. dataset definition — oпределение набора данных) — программа Unix, предназначенная как для копирования, так и для конвертации файлов»

Тестируемые ОС:
1.FreeBSD 8.0 RELEASE i386
2.Debian Lenny 5.0.5 i386

Подготовка
FreeBSD:
Загружаем необходимый модуль
#gmirror load
Создаем зеркало из двух дисков
#gmirror label -v gm0 /dev/ad6 /dev/ad10
Форматируем его в UFS + Soft Updates
#newfs -U /dev/mirror/gm0
Создадим каталог
#mkdir /raid
Монтируем
#mount /dev/mirror/gm0 /raid

Linux:
Создаем зеркало
debian:/home/iam# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1
Записываем информацию в mdadm.conf
debian:/home/iam# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Форматируем в EXT3
debian:/home/iam#mkfs.ext3 /dev/md0
Создадим точку монтирования
debian:/home/iam#mkdir /raid
Монтируем
debian:/home/iam#mount /dev/md0 /raid

Поехали(с)
Первым в бой отправляется bonnie++, запускаем с установками по умолчанию
# bonnie++ -d /raid/ -m 'FREEBSD_gmirror' -u root > out.csv && cat out.csv | bon_csv2html > gmirror.html 
О ключах:
-d: указали программе в каком каталоге создавать временные файлы
-m: заголовок выводимый в отчете
-u: от кого запустить
Далее я перенаправил вывод программы в файл > out.csv, затем при помощи bon_csv2html перевел в удобочитаемый html.
Результаты:
freebsd
image
linux
image
freebsd
image
linux
image

*признаюсь, в Linux мне так и неудалось получить читаемый html, поэтому подправил результат html из FreeBSD
На скриншотах мы видим результат работы команды, пойдем по порядку.
Size 2512M — RAM*2
Sequential Output(Последовательный Вывод) Sequential Input(Посл. Ввод)
Per Char 
это результаты записи чтения по одному байту. Демонстрируют способность ОС буферизовать такие операции.
Block
чтение-запись блоками размера 8192 байта.
Rewrite
думаю не нуждается в объяснении
Random Seeks(случайные операции чтения)
Seeks — число случайных операций чтения
Sequential Create (последовательное создание файлов)
Random Create(произвольное/случайное создание файлов)
Думаю что теперь читателю не понятны лишь строки заполненные символами +++ — тест завершился настолько быстро, что программа не может отобразить результат.

Теперь добавим программе некоторых инструкций
# bonnie++ -d /raid/ -m 'FREEBSD_gmirror' -n 100:16384:0:20 -u root > out.csv && cat out.csv | bon_csv2html > gmirror_1.html 
-n100:16384:0:20: говорим создать 100 файлов размером от 0 до 16384 b в 20 поддиректориях
Результаты:
freebsd
image
linux
image
freebsd
image
linux
image
*внимательный читатель заметит разницу в версиях программы. Что же, ставил последние доступное в портах/репозиториях.

Ваводы:
Как видно результаты работы программы разбиты для лучшего восприятия. Запуск программы с настройками по умолчанию я оставлю без внимания, сосредоточимся на последних четырех скриншотах.
Sequential Output(Последовательный Вывод)
Как видно в «побайтном» Per Char тесте Linux уносится в точку настолько быстро, что FreeBSD со своим 169 KB/s не успевает дойти даже до процесса начальной загрузки. 22183 KB/s в Linux против 169 KB/s в FreeBSD. Загрузка CPU отличается минимально.
В тесте где размер записи равен 8192 B FreeBSD побеждает практически с двойным отрывом. 48840 KB/s в FreeBSD против 28895 KB/s в Linux. Но FreeBSD загрузила CPU в два раза больше.
Тест Rewrite показал незначительную разницу, 23306 KB/s в FreeBSD против 18529 KB/s в Linux. Из чего можно сделать вывод что механизмы кеширования тестируемых ОС примерно равны по эффективности.
Sequential Input(Посл. Ввод)
Здесь победа явно за Linux. Per Char 350 KB/s в FreeBSD против 26435 KB/s в Linux. Блоками в 8192 b, 67290 KB/s FreeBSD против 86610 KB/s в Linux. 
Random Seeks(случайные операции чтения)
Linux выигрывает этот тест, 165.1с в FreeBSD против 148.5с в Linux.

Перейдем к последним двум скринам
Sequential Create (последовательное создание)
В этом тесте производится последовательное создание/чтение/удаление файлов. Напомню читателю что мы создаем 100 файлов в 20-ти поддиректориях произвольного размера от 0 до 16 KB.
Скорость измеряется в файлах в секунду. Создание, FreeBSD 103 файла/с против 3099 файлов/с у Linux, так же прошу обратить ваше внимание на загрузку CPU. Чтение, 1556 файлов/с у FreeBSD против 34204 файлов/с у Linux. Удаление 12206 файлов/с у FreeBSD против 14121 файлов/с у Linux. Linux, с огромным отрывом от преследователя, разрывает финишную ленту.
Random Create(произвольное/случайное создание)
И здесь Linux бесспорный лидер. Создание, FreeBSD 100 файлов/с против 20187 файлов/с у Linux. Чтение, 166 файлов/с у FreeBSD против 3299 файлов/с у Linux. Удаление 9139 файлов/с у FreeBSD против 11638 файлов/с у Linux

Подводя черту под результатами bonnie++ можно заметить что Linux, за некоторым исключением, одержал уверенную победу. Операции по созданию большого количества файлов небольшого размера происходят в разы быстрее чем в FreeBSD. Но советую читателю не спешить с окончательными выводами, не все так очевидно. Идем дальше.

С bonnie++ на этом закончим, и перейдем к следующему инструменту — Iozone
Вдоволь наигравшись с различными ключами запуска, почитав документацию, родилась вот такая команда:
# iozone -Raz -b /home/iam/results_all.xls -f /raid/1 -g 1g 
*на самом деле я лукавлю, команду я подсмотрел в результатах тестов на оф сайте программы ))
О ключах:
-R: указываем программе о необходимости создания файла отчета
-a: полностью автоматический режим, размер записи выбирается автоматически от 4k до 16m (4k..8k..16k..32k....16384k )
-f: укажем файл на нашем массиве
-g: максимальный размер файла 1Gb(для режима -a)
-z: принуждает программу запущенную в автоматическом режиме использовать маленькие размеры записи для больших файлов(т.е. от 4k до 16m (4k..8k..16k..32k....16384k ))

Для наглядности результаты я приведу в графиках. С указанными ключами программа создает довольно таки увесистый файл отчета, в графиках я выделил наиболее интересные, на мой взгляд, результаты.
Первым будет тест на запись.
image
image
image
Результаты отображенные на первом графике не оставляют FreeBSD никакого шанса. При создании файла размером 16Mb блоками от 4-х килобайт до 16 мегабайт среднее значение Linux равно ~204 MB/s, FreeBSD 44.7 MB/s.
Файл размером 128 MB, при досижении размера блока 128KB картина резко меняется и FreeBSD уверенно вырывается вперед. Средние значения таковы: Linux ~47.8 MB/s, FreeBSD 48.3 MB/s.
Файл размером в 1Gb. FreeBSD держит ту же скорость что и с двумя предыдущими файлами. Linux же, напротив, сильно сбавил обороты. Средние значения таковы: Linux ~33 MB/s, FreeBSD 48.5 MB/s.
Как видно с более мелкими файлами Linux справляется значительно быстрее, как мы уже могли заметить. С файлом размером в 1Gb FreeBSD берет реванш. Так же показательно то, что FreeBSD выдерживает одну и ту же скорость вне зависимости от размера файла. 

Следущим по списку у нас идет чтение.
image
image
image
Превым на растерзание отдаем файл размером 16 Mb. Соревнующиеся идут почти корпус в корпус.
Средние значения: Linux ~534 MB/s, FreeBSD ~538 MB/s.
Файл 128 Mb. Со старта Linux уходит с прошлифовкой, но уже на чекпоинте в 64 KB оппонент его доганяет и начинается ожесточенная борьба, к финишу первым успевает все же Linux. Средние значения: Linux ~515 MB/s, FreeBSD ~380 MB/s.
Добравшись до нашего тяжеловеса тестируемые ОС порыкивают на старте.
Файл размером 1Gb. Linux оставив FreeBSD глотать дым на старте уходит в отрыв, как видно, скорость достигает 1Gb/s. После контрорльной точки(начиная с размера блока в 128KB) FreeBSD держится в хвосте с небольшим отставанием от лидера. Средние значения: Linux ~553 MB/s, FreeBSD ~369 MB/s.
В скорости чтения Linux гораздо быстрее чем FreeBSD. Независимо от размера файла.

Рандомная(случайная) запись
image
image
image
Файл 16 Mb. Результаты говорят сами за себя, у Linux мы наблюдаем плавную кривую, FreeBSD от чего-то уходит на питстоп после чекпоинта 1Mb и еле еле дотягивает до финиша. Средние результаты: Linux ~356.8 MB/s, FreeBSD ~255.5 MB/s.
Файл 128 Mb. FreeBSD очевидно так и не оклемалась и показывает удручающие результаты, Linux к финишу тоже почувствовал себя неладно, разница между размерами блока в 8 Mb и 16 Mb разительна. Средние результаты: Linux ~6 MB/s, FreeBSD ~3.8 MB/s.
Файл 1 Gb. Как и при последовательном создании файла большого размера FreeBSD уверенно выходит вперед, Linux нагоняет соперника только к финишу. Средние результаты: Linux ~12 MB/s, FreeBSD ~26 MB/s.

Рандомное(случайное) чтение
image
image
image
Первый график, Linux лишь немного вырвался вперед, но был настигнут уже на чекпоинте 32 KB. Далее соперники двигались вровень, с очень незначительным приемуществом FreeBSD. Средние результаты: Linux ~523 MB/s, FreeBSD ~458 MB/s.
Картинка с результатами теста файла размером 128 Mb отличается от первой очень незначительно, с той лишь разницей, что явного лидера, начиная с размера блока в 64 KB, так и не обозначилось. Средние результаты: Linux ~476 MB/s, FreeBSD ~362 MB/s.
Последний график дает нам четкое понимание, что Linux далеко в авангарде, при операциях чтения файлов большого размера. Средние результаты: Linux ~523 MB/s, FreeBSD ~274 MB/s.

Под занавес итоги теста всем извесной утилитой DD.
Создадим файл размером 1 Gb из блоков размером 4 KB
FreeBSD: 49,02 MB/s
Linux: 23,9 MB/s
Читаем этот файл блоками по 4 KB
FreeBSD: 342,7 MB/s
Linux: 788 MB/s

Создадим файл размером 1 Gb из блоков размером 64 KB
FreeBSD: 48,64 MB/s
Linux: 35,0 MB/s
Читаем этот файл блоками по 64 KB
FreeBSD: 350,14 MB/s
Linux: 617 MB/s

Создадим файл размером 1 Gb из блоков размером 1 Mb
FreeBSD: 47,98 MB/s
Linux: 23,9 MB/s
Читаем этот файл блоками по 4 KB
FreeBSD: 348,51 MB/s
Linux: 460 MB/s

Создадим файл размером 1000 Mb из блоков размером 100 Mb
FreeBSD: 44,24 MB/s
Linux: 37,7 MB/s
Читаем этот файл блоками по 4 KB
FreeBSD: 308,61 MB/s
Linux: 459 MB/s

Создадим файл размером 100 Gb из блоков размером 1 Gb
FreeBSD: 31,7 MB/s
Linux: 14,7 MB/s
Читаем этот файл блоками по 4 KB
FreeBSD: 57,48 MB/s
Linux: результат получить не удалось

FreeBSD явно быстрее Linux при создании файлов. Linux более силен в чтении файлов.

Листинги dd
FreeBSD
*вывод dd в FreeBSD я немного подправил для удобочитаемости
Создаем файл размером 1Gb блоками размером 4k
# /usr/bin/time -h dd if=/dev/zero of=testfile bs=4k count=262144
262144+0 records in
262144+0 records out
1073741824 bytes transferred in 20.888121 secs (49,02 Mbytes/sec)
21.05s real 0.45s user 11.12s sys
Читаем созданный файл блоками размером 4k
*далее по аналогии
# /usr/bin/time -h dd if=testfile of=/dev/null bs=4k count=262144
262144+0 records in
262144+0 records out
1073741824 bytes transferred in 2.987966 secs (342,7 Mbytes/sec)
2.99s real 0.15s user 2.82s sys

# /usr/bin/time -h dd if=/dev/zero of=testfile bs=64k count=16384
16384+0 records in
16384+0 records out
1073741824 bytes transferred in 21.050771 secs (48,64 Mbytes/sec)
21.05s real 0.08s user 8.12s sys
# /usr/bin/time -h dd if=testfile of=/dev/null bs=64k count=16384
16384+0 records in
16384+0 records out
1073741824 bytes transferred in 2.924540 secs (350,14 Mbytes/sec)
2.92s real 0.05s user 2.86s sys

# /usr/bin/time -h dd if=/dev/zero of=testfile bs=1m count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 21.341423 secs (47,98bytes/sec)
21.57s real 0.00s user 7.87s sys

# /usr/bin/time -h dd if=testfile of=/dev/null bs=1m count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 2.938155 secs (348,51 Mbytes/sec)
2.94s real 0.00s user 2.92s sys

# /usr/bin/time -h dd if=/dev/zero of=testfile bs=100m count=10
10+0 records in
10+0 records out
1048576000 bytes transferred in 22.601393 secs (44,24 Mbytes/sec)
22.86s real 0.00s user 7.89s sys

# /usr/bin/time -h dd if=testfile of=/dev/null bs=100m count=10
10+0 records in
10+0 records out
1048576000 bytes transferred in 3.240300 secs (308,61 Mbytes/sec)
3.26s real 0.00s user 3.25s sys

# /usr/bin/time -h dd if=/dev/zero of=testfile bs=1g count=100
100+0 records in
100+0 records out
107374182400 bytes transferred in 3229.788959 secs (31,7 Mbytes/sec)
53m50.33s real 0.00s user 14m40.89s sys
# /usr/bin/time -h dd if=testfile of=/dev/null bs=1g count=100
100+0 records in
100+0 records out
107374182400 bytes transferred in 1781.360638 secs (57,48 Mbytes/sec)
29m41.67s real 0.00s user 6m44.73s sys 

Linux
debian:/raid# dd if=/dev/zero of=testfile bs=4k count=262144

262144+0 записей считано

262144+0 записей написано

скопировано 1073741824 байта (1,1 GB), 45,0159 c, 23,9 MB/c

debian:/raid# dd if=testfile of=/dev/null bs=4k count=262144

262144+0 записей считано

262144+0 записей написано

скопировано 1073741824 байта (1,1 GB), 1,36295 c, 788 MB/c

debian:/raid# dd if=/dev/zero of=testfile bs=64k count=16384

16384+0 записей считано

16384+0 записей написано

скопировано 1073741824 байта (1,1 GB), 28,2238 c, 38,0 MB/c

debian:/raid# dd if=testfile of=/dev/null bs=64k count=16384

16384+0 записей считано

16384+0 записей написано

скопировано 1073741824 байта (1,1 GB), 1,73935 c, 617 MB/c

debian:/raid# dd if=/dev/zero of=testfile bs=1M count=1024

1024+0 записей считано

1024+0 записей написано

скопировано 1073741824 байта (1,1 GB), 30,711 c, 35,0 MB/c

debian:/raid# dd if=testfile of=/dev/null bs=1M

1024+0 записей считано

1024+0 записей написано

скопировано 1073741824 байта (1,1 GB), 2,33447 c, 460 MB/c

debian:/raid# dd if=/dev/zero of=testfile bs=100M count=10

10+0 записей считано

10+0 записей написано

скопировано 1048576000 байт (1,0 GB), 27,8344 c, 37,7 MB/c

debian:/raid# dd if=testfile of=/dev/null bs=100M count=10

10+0 записей считано

10+0 записей написано

скопировано 1048576000 байт (1,0 GB), 2,28437 c, 459 MB/c

debian:/raid# dd if=/dev/zero of=testfile bs=1024M count=100

100+0 записей считано

100+0 записей написано

скопировано 107374182400 байт (107 GB), 7315,88 c, 14,7 MB/c

debian:/raid# dd of=testfile if=/dev/null bs=1024M count=100

0+0 записей считано

0+0 записей написано

скопировано 0 байт (0 B), 7,5694e-05 c, 0,0 kB/c

Эпилог
Идея провести тест, как я уже писал, родилась спонтанно. Изначально просто хотелось собрать Software RAID под backup'ы на бюджетной машинке, а затем уже влез этот VSмать его чтоб его. Для меня выбор очевиден — FreeBSD, она бастрее при создании файлов, особенно при создании файлов большого размера. Как раз то, что мне нужно. Проведя этот тест я лишь еще раз убедился в правильности занятой позиции касаемо разных holly war'ов — все зависит от задач.
Хотя я снова не договариваю всей правды. Выбор в пользу FreeBSD был сделан еще до теста. Так как эту ОС я просто знаю намного лучше нежели Linux, и нравится она мне много больше. Если же взглянуть на результаты объективно, то победу я, абсолютно заслуженно, отдам Linux'у. Вновь пробежавшись по результатам тестов в этом не остается сомнений.
Кто то может справедливо заметить, а зачем же ты столько «заморачивался» с этими тестами, уже bonnie++ тебе все сказал, но нет. Я привык ко всему подходить вдумчиво, с чувством, с толком. Да и появившееся свободное время позволяло поэкспериментировать.
Насколько грамотен и информативен мой отчет решать вам, я не профессионал в *nix, мой путь в этот увлекательный мир начался сравнительно недавно.
Спасибо тем кто осилил.

P.S.
При подготовке материала использовались:
1. Руководство администратора Linux. Авторы: Немет Э., Снайдер Г., Трент Х.
2. FreeBSD. Подробное руководство. Майкл Лукас.
3. google.com
4. /dev/hands и /dev/head =)
Сей отчет был подготовлен при активной помощи камрадов с unixadmins.su, коим отдельное спасибо.

Источник: http://habrahabr.ru/blogs/os/98649/

Комментарии

Изображение пользователя doom2_imp.

> Вам не приходило в голову

> Вам не приходило в голову что вы большей частью померили производительность файловых систем ?

Отож:

http://habrahabr.ru/blogs/os/98649/#comment_3039081 wrote:
согласен, но все же реализации програмных рэйдов, сравниваемых ОС, накладывают свой отпечаток на результат. EXT3 и UFS были выбранны, как «стандартные», дефолтные для Linux и FreeBSD =)

нормально так, ничо что ext3 - тормоз по определению, а во фре с ФСками напруга - UFS и недавно впихнутая ZFS (которая есть и в линупсе)

style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-4493870272388852"
data-ad-slot="6622567932">