Алексей Федорчук
В предыдущей заметке про f2fs и nilfs2 я говорил, что обе эти файловые системы не имеют сейчас сферы практического применения, хотя и могут приобрести её в будущем. А поскольку я в процессе экспериментов в каждой из них отформатировал по флешке объёмом 4 ГБ, появилось резонное желание поглядеть на это самое будущее, хотя бы в плане оценки быстродействия.
Правда, сравнивать наших героинь можно было только самих с собой — на четырёх гигабайтах даже ext4 смотрелась бы нелепо, не говоря уже о ZFS или btrfs. И условия сравнения следовало подбирать специфические: и f2fs, и nilfs2 относятся к классу log-структурированных файловых систем, организованных по принципу copy-on-write, то есть требовалось подобрать подходящие по объёму объекты манипулирования: с одной стороны, достаточно большие, чтобы время выполнения операции было хоть сколько-нибудь заметно, с другой — достаточно маленькие, чтобы мгновенно не забить все четыре гигабайта: более «весомых» свободных носителей у меня под рукой не было.
В результате в качестве объектов для файловых операций были выбраны:
- установочный iso-образ дистрибутива Salix (748 МБ);
- архив дерева портежей Gentoo от 03.04.2014;
- он же в развёрнутом виде (320 МБ суммарно).
Каждый из объектов на обеих файловых системах сначала копировался из исходного каталога source в целевой каталог target, а затем удалялся. Время выполнения каждой операции замерялось утилитой /usr/bin/time
(не встроенной командой time
оболочки). Для приведения вывода time
к «общему знаменателю» была определена переменная LANG:
$ export LANG=POSIX
После чего и были выполнены все намеченные действия. С начала — копирование:
$ /usr/bin/time -p cp source/salix64-xfce-14.1.iso target $ /usr/bin/time -p cp source/portage-20140403.tar.xz target/ $ /usr/bin/time -p cp -R source/portage/ target/
А затем — удаление:
$ /usr/bin/time -p rm -Rf target/salix64-xfce-14.1.iso $ /usr/bin/time -p rm -Rf target/portage-20140403.tar.xz $ /usr/bin/time -p rm -Rf target/portage
Чисто для ориентировки те же процедуры были проделаны и на файловой системе ZFS в нормальном ZFS-пуле из двух «нормальных» SSD.
Во всех случаях пришлось ограничиться единичным выполнением каждой операции, потому что их повторение для f2fs и nilfs2 потребовало бы не просто перемонтирования флешек, но их переформатирования. Собственно, один раз мне это и пришлось сделать — после ошибки в команде копирования образа на nilfs2: попытка повторить процедуру мгновенно вызвала переполнение файловой системы.
Да, забыл сказать, что все описанные события происходили в дистрибутиве Salix и были в какой-то мере побочным следствием изучения возможностей оного.
Результаты вывода команды time
(точнее, значения real
) приведены в таблице, где время удаления единичных файлов (iso-образа и архива), как исчезающе малое, опущено.
Сравнительное быстродействие NILFS2 и F2FS | ||||
Iso | Portage | |||
copy | tar.xz copy | tree copy | tree remove | |
NILFS2 | 169,19 | 11,6 | 209,06 | 30,97 |
F2FS | 8,65 | 6,12 | 166,35 | 0,22 |
ZFS | 3,81 | 0,07 | 33,61 | 6,27 |
Они же представлены в качестве диаграммы:
Она наглядно показывает отставание nilfs2 от f2fs на всех «дистанциях» и её откровенный провал не только при копировании iso-образа, но и, как ни странно, при удалении дерева портежей. Интересно, что по последнему показателю f2fs на флешке «обскакала» ZFS на «всамделишнем» SSD на полтора порядка. Конечно, очевидно, что на самом деле f2fs в данной ситуации ничего физически не удаляет. Но ведь и nilfs2 устроена по тому же принципу — однако её результат в 5 (в скобках прописью — пять!) раз уступает ZFS.
Конечно, всё сказанное выше — сегодня не более чем досужие развлечения. Но в сети последнее время упорно циркулируют разговоры о том, будто бы Samsung настроен всерьёз взяться за дальнейшее развитие f2fs. Если эти слова подтвердятся делами — возможно, нынешние даже не оценки, а прикидки быстродействия могут оказаться небезынтересными. А вот nilfs2, похоже, ничего не светит: в нынешнем своём виде она неудобна, мягко выражаясь, не быстра и вроде бы ни у кого не вызывает желания сделать её лучше.