NILFS2 vs F2FS: сравнение быстродействия

Алексей Федорчук

В предыдущей заметке про 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

Они же представлены в качестве диаграммы:

nilfs-vs-f2fsОна наглядно показывает отставание nilfs2 от f2fs на всех «дистанциях» и её откровенный провал не только при копировании iso-образа, но и, как ни странно, при удалении дерева портежей. Интересно, что по последнему показателю f2fs на флешке «обскакала» ZFS на «всамделишнем» SSD на полтора порядка. Конечно, очевидно, что на самом деле f2fs в данной ситуации ничего физически не удаляет. Но ведь и nilfs2 устроена по тому же принципу — однако её результат в 5 (в скобках прописью — пять!) раз уступает ZFS.

Конечно, всё сказанное выше — сегодня не более чем досужие развлечения. Но в сети последнее время упорно циркулируют разговоры о том, будто бы Samsung настроен всерьёз взяться за дальнейшее развитие f2fs. Если эти слова подтвердятся делами — возможно, нынешние даже не оценки, а прикидки быстродействия могут оказаться небезынтересными. А вот nilfs2, похоже, ничего не светит: в нынешнем своём виде она неудобна, мягко выражаясь, не быстра и вроде бы ни у кого не вызывает желания сделать её лучше.