F2FS - F2FS

F2FS
Разработчики)Samsung Electronics, Motorola Mobility, Huawei и Google
Полное имяФайловая система с поддержкой Flash
Введеноv3.8, 2012-12-20[1] с участием Linux
Структуры
Содержимое каталогамногоуровневая хеш-таблица
Размещение файловрастровое изображение (свободное место), таблица
ЗагрузочныйДа, начиная с GRUB 2.04 (2019-07-05)
Пределы
Максимум. размер тома16 Туберкулез
Максимум. размер файла3.94 Туберкулез
Максимум. количество файловЗависит от размера тома
Максимум. длина имени файла512 байт[2]
особенности
Даты записанымодификация (mtime), модификация атрибута (ctime), доступ (atime)
Разрешение даты1 нс
АтрибутыPOSIX, расширенные атрибуты
Разрешения файловой системыPOSIX, ACL
Прозрачное сжатиеLZO, LZ4 (начиная с Linux 5.6),[3] zstd (начиная с Linux 5.7)[4]
Прозрачное шифрованиеда
Другой
Поддерживается операционные системыLinux и Android
Интернет сайтf2fs.wiki.kernel.org

F2FS (Файловая система с поддержкой Flash) это файловая система flash изначально разработан Samsung Electronics для Ядро Linux.[5]

Мотивом для F2FS было создание файловая система который с самого начала учитывает характеристики Флэш-память NAND устройства хранения (например, твердотельные диски, eMMC, и SD карты), которые широко используются в компьютерных системах, от мобильных устройств до серверов.

F2FS был разработан на основе файловая система с лог-структурой подход, адаптированный к новым формам хранения. Jaegeuk Kim, главный автор F2FS, заявил, что он устраняет некоторые известные проблемы.[5] старых файловых систем с журнальной структурой, таких как эффект снежного кома из блуждающие деревья и высокие накладные расходы на уборку. Кроме того, поскольку устройство хранения на основе NAND демонстрирует разные характеристики в зависимости от его внутренней геометрии или схемы управления флэш-памятью (например, Слой Flash-перевода или FTL), он поддерживает различные параметры не только для настройки разметки на диске, но и для выбора алгоритмов распределения и очистки.

особенности

  • Многоголовочная регистрация
  • Многоуровневая хеш-таблица для записей каталога
  • Статическое / динамическое разделение горячих и холодных данных
  • Схема адаптивного ведения журнала
  • Настраиваемые операционные блоки
  • Двойной КПП
  • Откат и восстановление с повтором транзакций
  • Распределение блоков в стиле кучи
  • ОТДЕЛКА / ФИТРИМ поддержка[6]
  • Онлайн фс дефрагментация / дефрагментация файла[7]
  • Встроенные xattrs[8]/данные[9]/ dir[10]
  • Не в сети проверка файловой системы (Проверить и исправить несоответствие[11])
  • Атомарные операции[12]
  • Шифрование на уровне файловой системы[13]
  • Автономное изменение размера (сжатие не поддерживается).[14]
  • Внутренний периодически сбрасывает данные[15]
  • Кеш экстента[16]
  • Прозрачное сжатие файлов с использованием LZO или LZ4 (с Linux 5.6),[3] или zstd (с Linux 5.7)[4]

дизайн

Макет на диске

F2FS делит весь том на несколько сегментов, размер каждого из которых составляет 2 МБ. Раздел состоит из последовательных сегментов, а зона состоит из набора разделов. По умолчанию для размеров раздела и зоны задан один и тот же размер, но пользователи могут легко изменить размер с помощью mkfs.

F2FS разбивает весь том на шесть областей, и все, кроме области суперблока, состоят из нескольких сегментов, как описано ниже.

Суперблок (SB)
SB находится в начале раздела. Есть две копии, чтобы избежать повреждения файловой системы. Он содержит основную информацию о разделах и некоторые параметры F2FS по умолчанию.
Контрольно-пропускной пункт (КП)
CP содержит информацию о файловой системе, битовые карты для действительных наборов NAT / SIT, списки потерянных inode и сводные записи текущих активных сегментов.
Таблица информации о сегментах (SIT)
SIT содержит действительное количество блоков и битовую карту действительности всех блоков основной области.
Таблица адресов узлов (NAT)
NAT - это таблица адресов для узловых блоков основной области.
Сводная область сегмента (SSA)
SSA содержит записи, которые содержат информацию о владельце данных основной области и узловых блоков.
Основная область
Основная область содержит данные файлов и каталогов и их индексы.

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

Структура метаданных

F2FS использует схему контрольных точек для поддержания целостности файловой системы. Во время монтирования F2FS сначала пытается найти последние действительные данные контрольной точки, сканируя область CP. Чтобы сократить время сканирования, F2FS использует только две копии CP. Один из них всегда указывает на последние достоверные данные, что называется механизмом теневого копирования. Помимо CP, NAT и SIT также используют механизм теневого копирования. Для согласованности файловой системы каждый CP указывает, на какие копии NAT и SIT действительны.

Структура индекса

Ключевой структурой данных является «узел». Подобно традиционным файловым структурам, F2FS имеет три типа узлов: inode, прямой узел, косвенный узел. F2FS назначает 4 КБ блоку inode, который содержит 923 индекса блока данных, два прямых указателя узла, два косвенных указателя узла и один указатель двойного косвенного узла, как описано ниже. Блок прямого узла содержит 1018 индексов блока данных, а блок косвенного узла содержит 1018 индексов блока узла. Таким образом, один блок inode (т.е. файл) охватывает:

4 КБ × (923 + 2 × 1018 + 2 × 10182 + 10183) = 3,94 ТБ

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

Структура каталогов

Запись каталога (dentry) занимает 11 байтов, которые состоят из следующих атрибутов.

Структура записи каталога
хэшХеш-значение имени файла
я неInode количество
lenДлина имени файла
типТип файла, такой как каталог, символическая ссылка и т. Д.

Блок dentry состоит из 214 слотов dentry и имен файлов. Растровое изображение используется для представления того, действительна ли каждая данность. Блок dentry занимает 4 КБ и имеет следующий состав:

Блок Dentry (4 K) = битовая карта (27 байтов) + зарезервировано (3 байта) + dentry (11 * 214 байтов) + имя файла (8 * 214 байтов)

F2FS реализует многоуровневые хеш-таблицы для структуры каталогов. На каждом уровне есть хеш-таблица с выделенным количеством хеш-сегментов, как показано ниже. Обратите внимание, что «A (2B)» означает, что сегмент включает 2 блока данных.

Срок
A указывает ведро
B указывает блок
N указывает MAX_DIR_HASH_DEPTH
уровень # 0 A (2B) уровень # 1 A (2B) - A (2B) уровень # 2 A (2B) - A (2B) - A (2B) - A (2B) ... уровень # N / 2 A (2B) - A (2B) - A (2B) - A (2B) - A (2B) - ... - A (2B) ... уровень #NA (4B) - A (4B) - A (4B ) - A (4B) - A (4B) - ... - A (4B)

Когда F2FS находит имя файла в каталоге, сначала вычисляется хеш-значение имени файла. Затем F2FS просматривает хеш-таблицу на уровне # 0, чтобы найти файл dentry, состоящий из имени файла и его номера inode. Если не найден, F2FS сканирует следующую хеш-таблицу на уровне №1. Таким образом, F2FS сканирует хеш-таблицы на каждом уровне постепенно от 1 до N. На каждом уровне F2FS необходимо сканировать только одну корзину, определяемую следующим уравнением, которое показывает сложность O (журнал (# файлов)).

 номер сегмента для сканирования на уровне #n = (значение хэша)% (количество сегментов на уровне #n)

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

Распределение блоков по умолчанию

Во время выполнения F2FS управляет шестью активными журналами внутри «основной области»: узел Hot / Warm / Cold и данные Hot / Warm / Cold.

Политика распределения блоков
Горячий узелСодержит блоки прямых узлов каталогов.
Теплый узелСодержит блоки прямых узлов, кроме блоков горячих узлов.
Холодный узелСодержит косвенные блоки узлов.
Горячие данныеСодержит зубные блоки.
Теплые данныеСодержит блоки данных, кроме горячих и холодных блоков данных.
Холодные данныеСодержит мультимедийные данные или перенесенные блоки данных.

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

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

Процесс очистки

F2FS делает очистку как по запросу, так и в фоновом режиме. Очистка по требованию запускается, когда недостаточно свободных сегментов для обслуживания вызовов VFS. Средство очистки фона выполняется потоком ядра и запускает задание по очистке, когда система простаивает.

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

Чтобы определить, действительны ли данные в сегменте жертвы, F2FS управляет битовой картой. Каждый бит представляет действительность блока, а битовая карта состоит из потока битов, охватывающего целые блоки в основной области.

Принятие

Motorola Mobility использует F2FS в своих телефонах Moto G / E / X и Droid с 2012 года. Google впервые использовали F2FS в своих Nexus 9 в 2014.[17] Однако другие продукты Google не использовали F2FS до тех пор, пока Пиксель 3 когда F2FS была обновлена ​​со встроенной аппаратной поддержкой шифрования.[18]

Huawei использует F2FS с Huawei P9 в 2016 году.[19][20] OnePlus использует F2FS с OnePlus 3T в 2016 году.[21] ZTE использует F2FS с момента выхода ZTE Axon 10 Pro в 2019 году.[22]

Смотрите также

использованная литература

  1. ^ Майкл Ларабель (2012-12-22). «Файловая система F2FS, объединенная с ядром Linux 3.8». Фороникс. Получено 2016-05-25.
  2. ^ Чангман Ли (2013-04-03). "f2fs: обновить f2fs.txt, связанный с удалением в mkfs". Получено 2020-02-12.
  3. ^ а б Майкл Ларабель (23.12.2019). «Сжатие данных F2FS с использованием выборочной обработки расширений файлов LZO / LZ4 + для выхода в 2020 году». Фороникс. Получено 2020-04-07.
  4. ^ а б Майкл Ларабель (07.04.2020). «F2FS представляет поддержку сжатия Zstd с ядром Linux 5.7». Фороникс. Получено 2020-04-07.
  5. ^ а б Джегеук Ким (2012-10-05). "f2fs: представить файловую систему, совместимую с флеш-памятью". Получено 2016-05-25.
  6. ^ Чэгеук Ким (22.09.2014). "f2fs: ввести FITRIM в f2fs_ioctl".
  7. ^ Чао Ю (26.10.2015). "f2fs: поддержка дефрагментации файла".
  8. ^ Джегеук Ким (26.08.2013). "f2fs: добавить флаги для встроенных xattrs".
  9. ^ Хуацзюнь Ли (10.11.2013). "f2fs: включить поддержку встроенных данных f2fs".
  10. ^ Чао Ю (24.09.2014). "f2fs: поддержка встроенного каталога".
  11. ^ Джегеук Ким (2014-09-20). "f2fs-tools: выпуск 1.4.0".
  12. ^ Джегеук Ким (2014-09-25). "f2fs: поддержка функции atomic_write для базы данных".
  13. ^ Чэгеук Ким (24.06.2015). "Обновления f2fs для v4.2".
  14. ^ Джегеук Ким (2016-04-25). "resize.f2fs: поддержка увеличения размера раздела".
  15. ^ Чао Ю (17 декабря 2015 г.). "f2fs: поддержка сброса данных в фоновом режиме".
  16. ^ Чао Ю (25 января 2015 г.). "f2fs: включить кеширование экстентов rb-дерева".
  17. ^ Смит, Джошуа Хо, Райан. "Обзор Google Nexus 9". www.anandtech.com. Получено 2019-05-10.
  18. ^ Фрумусану, Андрей (02.11.2018). "Обзор Google Pixel 3". www.anandtech.com. Получено 2019-05-11.
  19. ^ Ларабель, Майкл (28 декабря 2018). "F2FS получает больше исправлений в Linux 4.21 с файловой системой, теперь поддерживаемой Google Pixel". www.phoronix.com. Получено 2019-05-10.
  20. ^ Хамрик, Мэтт (2017-05-12). «Huawei P10 и P10 Plus». www.anandtech.com. Получено 2019-05-11.
  21. ^ Честер, Брэндон. «Обзор OnePlus 3T». www.anandtech.com. Получено 2019-05-10.
  22. ^ "ZTE Axon 10 Pro официально обнародован: первый, кто использует F2FS". Gizchina.com. 2019-05-06. Получено 2019-05-10.

внешние ссылки