Сравнительный анализ файловых систем
Для тестирования я использовал Pentium III - 16 Mb RAM - 2 Gb HD c установленным Linux RedHat 6.2.
Все файловые системы работали без проблем, поэтому я затеял небольшой сравнительный анализ производительности файловых систем. В качестве первого теста, я имитировал сбой, просто выключив компьютер, чтобы проконтролировать процесс восстановления журнала. Все файловые системы прошли это испытание на ура, и во всех трех случаях машина была в норме уже через несколько секунд.
Следующим шагом в анализе было использование программы bonnie++ с http://www.coker.com.au/bonnie++/. Эта программа проводит тестирование в стиле работы с базами данных применительно к какому-то одному файлу. Тестируется создание, чтение и удаление небольших файлов, что может имитировать работу таких программ, как Squid, INN, или ПО, работающего с форматом Maildir (qmail).
Команда для тестирования была следующей: bonnie++ -d/work1 -s10 -r4 -u0 что запускало тестирование с использованием 10 Мб (-s10) дискового пространства на файловой системе, смонтированной в каталог /work1. Таким образом, перед запуском теста, вы обязаны создать необходимую файловую систему и смонтировать ее в каталог /work1. Остальные опции отвечают за размер оперативной памяти в Мб (-r4) и за имя пользователя (-u0, то есть root). Результаты демонстрируются в следующей таблице.
Sequential Output | Sequential Input | Random Seeks | |||||||||||
Size:Chunk Size | Per Char | Block | Rewrite | Per Char | Block | ||||||||
K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | K/sec | % CPU | / sec | % CPU | ||
ext2 | 10M | 1471 | 97 | 14813 | 67 | 1309 | 14 | 1506 | 94 | 4889 | 15 | 309.8 | 10 |
ext3 | 10M | 1366 | 98 | 2361 | 38 | 1824 | 22 | 1482 | 94 | 4935 | 14 | 317.8 | 10 |
xfs | 10M | 1206 | 94 | 9512 | 77 | 1351 | 33 | 1299 | 98 | 4779 | 80 | 229.1 | 11 |
reiserfs | 10M | 1455 | 99 | 4253 | 31 | 2340 | 26 | 1477 | 93 | 5593 | 26 | 174.3 | 5 |
Sequential Create | Random Create | ||||||||||||
Num Files | Create | Read | Delete | Create | Read | Delete | |||||||
/ sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | / sec | % CPU | ||
ext2 | 16 | 94 | 99 | 278 | 99 | 492 | 97 | 95 | 99 | 284 | 100 | 93 | 41 |
ext3 | 16 | 89 | 98 | 274 | 100 | 458 | 96 | 93 | 99 | 288 | 99 | 97 | 45 |
xfs | 16 | 92 | 99 | 251 | 96 | 436 | 98 | 91 | 99 | 311 | 99 | 90 | 41 |
reiserfs | 16 | 1307 | 100 | 8963 | 100 | 1914 | 99 | 1245 | 99 | 9316 | 100 | 1725 | 100 |
Два типа данных приводятся для каждого теста: скорость файловой системы (в Кб/сек) и загрузка процессора (в %). Чем выше скорость, тем лучше файловая система. Что касается загрузки процессора - то там все наоборот.
Как видно из таблицы, ReiserFS является чемпионом в управлении файлами (раздел Sequential Create и Random Create), превосходя своих конкурентов больше чем в 10 раз. Также, ReiserFS практически не уступает другим файловым системам в категориях Sequential Output и Sequential Input.
Что касается остальных файловых систем, то в их результатах разницы практически нет. Скорость XFS близка к скорости ext2, а ext3, как и ожидалось, немного медленнее ext2 (по сути это одно и то же, только ext3 тратит еще немного времени на обращение к журналу).
В качестве последнего испытания я использовал программу mongo, обнаруженную на странице тестов reiserFS на http://www.namesys.com/. Я немного поправил исходники для использования программы с тремя файловыми системами. Я вставил в перловый скрипт mongo.pl команды для монтирования и форматирования файловых систем xfs и ext3. Потом я запустил программу тестирования.
Скрипт форматирует раздел /dev/xxxx, монтирует его и запускает заданное число процессов во время каждого этапа. Этапы были следующими: Create, Copy, Symlinks, Read, Stats, Rename и Delete. Также программа определяет степень фрагментации после этапов Create и Copy. Fragm = число_фрагментов / число_файлов С результатами можно ознакомиться и в каталоге results в файлах: log - результаты, представленные в неформатированном виде. log.tbl - результаты для программы, осуществляющей сравнение. log_table - результаты в виде таблицы. Тестирование происходило таким образом: mongo.pl ext3 /dev/hda3 /work1 logext3 1
где ext3 нужно заменить на reiserfs или xfs для тестирования других файловых систем. Остальные аргументы - это имя монтируемого устройства, где находится тестируемая файловая система, каталог, в который файловая система монтируется, имя файла, куда направляются результаты, и количество запускаемых процессов.
В следующих таблицах представлены результаты моего анализа. Представленные данные - это время (в сек). Чем меньше значение, тем лучше файловая система. В первой таблице используются файлы со средним размером 100 байтов, во второй - 1000 байтов, а в третьей - 10000 байтов.
ext3 files=68952 size=100 bytes dirs=242 |
XFS files=68952 size=100 bytes dirs=241 |
reiserFS files=68952 size=100 bytes dirs=241 | |
Create | 90.07 | 267.86 | 53.05 |
Fragm. | 1.32 | 1.02 | 1.00 |
Copy | 239.02 | 744.51 | 126.97 |
Fragm. | 1.32 | 1.03 | 1.80 |
Slinks | 0 | 203.54 | 105.71 |
Read | 782.75 | 1543.93 | 562.53 |
Stats | 108.65 | 262.25 | 225.32 |
Rename | 67.26 | 205.18 | 70.72 |
Delete | 23.80 | 389.79 | 85.51 |
ext3 files=11248 size=1000 bytes dirs=44 |
XFS files=11616 size=1000 bytes dirs=43 |
ReiserFS files=11616 size=1000 bytes dirs=43 | |
Create | 30.68 | 57.94 | 36.38 |
Fragm. | 1.38 | 1.01 | 1.03 |
Copy | 75.21 | 149.49 | 84.02 |
Fragm. | 1.38 | 1.01 | 1.43 |
Slinks | 16.68 | 29.59 | 19.29 |
Read | 225.74 | 348.99 | 409.45 |
Stats | 25.60 | 46.41 | 89.23 |
Rename | 16.11 | 33.57 | 20.69 |
Delete | 6.04 | 64.90 | 18.21 |
ext3 files=2274 size=10000 bytes dirs=32 |
XFS files=2292 size=10000 bytes dirs=31 |
reiserFS files=2292 size=10000 bytes dirs=31 | |
Create | 27.13 | 25.99 | 22.27 |
Fragm. | 1.44 | 1.02 | 1.05 |
Copy | 55.27 | 55.73 | 43.24 |
Fragm. | 1.44 | 1.02 | 1.12 |
Slinks | 1.33 | 2.51 | 1.43 |
Read | 40.51 | 50.20 | 56.34 |
Stats | 2.34 | 1.99 | 3.52 |
Rename | 0.99 | 1.10 | 1.25 |
Delete | 3.40 | 8.99 | 1.84 |