В среде моддеров и энтузиастов Android, как и в любой секте, есть несколько святынь, которые принято почитать несмотря ни на что. Это оптимизированные кастомные ядра, скрипты и приложения для оптимизации системы, «улучшатели» звука и многое другое. В последнее время к ним добавилась файловая система F2FS, которая, согласно многим свидетельствам, существенно поднимает производительность работы с NADN-памятью и сохраняет ее от износа. Но так ли это на самом деле?

 

Начало

Впервые F2FS (Flash Friendly File System) предстала людскому взору в октябре 2012 года, когда компания Samsung опубликовала патчи с ее реализацией для ядра Linux. По словам разработчиков, ФС была с нуля спроектирована специально для flash-памяти и позволяла повысить производительность чтения/записи таких накопителей и использовать их особенности для некоторых оптимизаций и защиты от износа.

Уже к концу года F2FS стала официальной частью Linux 3.8, а еще через некоторое время ее поддержка появилась в CyanogenMod 10.2 и кастомном рекавери TWRP. С тех пор моддеры и оптимизаторы включают ее во все свои каcтомные ядра, пишут массу хвалебных отзывов, публикуют скриншоты с доказательством феноменальной производительности файловой системы.

Со стороны все это выглядит более чем обнадеживающе, поэтому новички в Android дружно вступают в ряды тех, кто прикоснулся к прекрасному и заимел это прекрасное в своем смартфоне. Вот только мало кто задумывается о том, почему родившая на свет чудо Samsung сама не использует F2FS даже в своих последних флагманах.

А причина проста: F2FS практически ничем не лучше файловой системы ext4, используемой в Android по умолчанию. Чтобы не быть голословным, разберу два основных мифа, касающихся F2FS: производительность и бережное отношение к flash-накопителям.

 

Производительность

В Сети можно найти множество примеров сравнения производительности ext4 и F2FS. Они очень похожи и очень часто показывают огромный выигрыш последней в скорости записи данных. Вот, например, результаты сравнения AndroBench для смартфона Sony Experia Z1:

F2FS vs ext4
F2FS vs ext4
F2FS vs ext4
F2FS vs ext4

Выглядит странно, не так ли? Скорость случайной записи возросла в 150 раз в сравнении с ext4 и в шесть раз в сравнении со скоростью чтения. Впервые такую аномалию заметили журналисты Phoronix, когда проводили тестирование F2FS в начале 2013 года:

Аномально высокая производительность F2FS
Аномально высокая производительность F2FS

Тогда они резонно предположили, что на самом деле F2FS пишет данные на диск не сразу, а вместо этого кеширует их для последующей записи. Если взглянуть на архитектуру F2FS, становится очевидно, что это действительно так. F2FS работает с блоками данных размером 4 Кбайт, объединяя их в сегменты размером 2 Мбайт, а те, в свою очередь, объединяются в секции, которых может быть до шести штук.

Зачем нужна такая система, мы поговорим позже, а пока остановимся только на том, что перед записью в память секции должны быть заполнены блоками. Другими словами, F2FS собирает записываемые 4-килобайтные блоки данных в куски большего размера, а затем скидывает их на диск одновременно. Это и есть причина аномально высокой производительности F2FS в скорости записи случайного 4-килобайтного блока и вполне сравнимой с ext4 производительности последовательной записи множества блоков.

Последние тесты Phoronix также подтверждают практически равную производительность обеих файловых систем. F2FS заметно вырвалась вперед только в тесте на одновременную работу с тысячами файлов, что обусловлено ее внутренними оптимизациями. Однако ни один смартфон не работает одновременно с таким количеством файлов. Такая ситуация редкость даже на десктопе и специфична для серверов.

Тест скорости случайной записи в разных версиях ядер (4.4–4.7)
Тест скорости случайной записи в разных версиях ядер (4.4–4.7)
 

Бережное отношение к накопителю

Второе заблуждение относительно F2FS связано с более бережным отношением к flash-памяти. Все мы знаем, что flash-память — штука хрупкая и выдерживает всего несколько тысяч циклов записи/стирания данных. По этой причине размещать данные на flash-накопителе рекомендуется в формате лога, когда новые блоки не перезаписывают старые, а вместо этого пишутся в незанятую область, после чего старый блок помечается как неиспользуемый и впоследствии очищается, освобождая пространство.

Именно так работает F2FS, и именно поэтому многие люди считают ее лучшим выбором для flash-памяти в сравнении с ext4, работающей по классической схеме, которая предполагает изменение данных на месте. Но есть один нюанс. Дело в том, что абсолютно любая современная флеш-память, начиная от USB-флешек и заканчивая серверными SSD, содержит в себе контроллер FTL (Flash Translation Layer), отвечающий за то, чтобы представить совсем непохожую на магнитные диски флеш-память как обычный диск, на который можно записать определенное количество блоков данных.

Помимо таких вещей, как объединение нескольких чипов flash-памяти в один «диск» и выполнение операции TRIM, которая очищает уже не используемые блоки, FTL также ответственен за выбор физического размещения записываемого блока в памяти. И здесь он использует (сюрприз!) log-структурированную мини-ФС. Другими словами, любая современная флеш-память сама занимается увеличением своего срока службы независимо от того, какую файловую систему ты на ней создашь: F2FS, ext4, FAT32 или любую другую, — результат будет один.

На самом деле причина, по которой F2FS называется «дружественной к флеш-памяти» (Flash Friendly), вовсе не в бережном отношении к памяти, а в том, что она умеет учитывать некоторые ее особенности, чтобы сделать работу с памятью более эффективной. Один из примеров увеличения эффективности — это тот самый механизм объединения данных в секции.

Дело в том, что многие микросхемы флеш-памяти включают в себя не один, а несколько независимых накопителей. И запись в каждый из них может происходить одновременно. Объединяя данные в секции, F2FS может отправить их на запись одновременно, что в теории приведет к увеличению производительности записи в число раз, кратное количеству накопителей.

Но и здесь не все так просто. Все оптимизации F2FS требуют индивидуальной настройки файловой системы для каждой модели flash-памяти. Файловая система будет настолько эффективной, насколько точно ее настроили. И делать это должен не пользователь кастомной прошивки, а сам производитель памяти, потому как только он может знать все нюансы ее устройства.

 

Итого

F2FS — отличная файловая система. Об этом говорит хотя бы тот факт, что, только появившись на свет, она уже способна успешно конкурировать с вылизываемой годами и сотнями людей ext4. Однако не стоит ждать от нее чудес и бежать форматировать свое устройство. Да, многие люди заявляют о заметном даже без тестов увеличении производительности, но опять же, скорее всего, эти эффекты вызваны тем самым механизмом отложенной записи и на самом деле никакого существенного прироста скорости нет.

4 комментария

  1. Kvantor

    12.10.2016 at 17:53

    Даешь ZFS на андроид, а то балуются тут ерундой…)))

  2. f3B73A49

    07.11.2016 at 05:06

    «…рабoты с NADN-памятью и сохраняет ее от износа.» NADN-память? может имелась ввиду NAND?

  3. d13ma

    09.12.2016 at 23:23

    Эту тстаью надо давать всем читать на 4pda, потому тамошние «эксперты» форматируют всё и вся дабы потом рассказывать что «всё летает» =)

Оставить мнение

Check Also

FAQ: как вернуть и настроить контекстное меню для отправки файла по почте

Контекстное меню в «Проводнике» Windows — довольно удобная штука: можно выбрать любой файл…