LogFS

LogFS
Содержимое каталога Table, hashed B-tree with dir_index enabled
Распределение файлов bitmap (free space), table (metadata), snapshots are allocated as files from the volume free space
Другие
Операционная система Linux

LogFSфайловая система для Linux, оптимизированная для быстрого монтирования флеш-накопителей большого объёма. LogFS включена в основную ветвь ядра Linux и была введена в версии 2.6.34, выпущенной 16 мая 2010 года.

История

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

Описание

Flash Translation Layer

Сегодня обычное приложение может даже не знать, использует оно флеш память или обычную файловую систему. Ответственность за взаимодействие с устройством чаще всего возлагается на аппаратуру или ядро операционной системы. Flash Translation Layer, или FTL был представлен в 2000-х. Этот слой представил специальные возможности для адресации флеш-памяти. FTL спроектирован, чтобы дать файловой системе записывать и читать блоки без знания того, как она устроена и не беспокоится об удалении перед записью. В настоящее время, Linux представляет пять разных FTL в подсистемах памяти. Из-за того, что блоки файловых систем сильно меньше чем флеш блоки, FTL оптимизирует доступ к записи путем сбора изменений, чтобы уменьшить число удалений и записей.

Общие черты

В отличие от Ext2, LogFS не имеет специализированную область диска для хранения индексных дескрипторов (inode). Вместо этого он использует специализированный файл, файл индексных дескрипторов. Помимо упрощения кода – записи файла и записи индексных дескрипторов теперь идентичны - это необходимый уровень абстракции, чтобы решить проблему жестких ссылок. Вместе с файлом индексных дескрипторов, дерево состоит только из двух уровней, файл индексных дескрипторов – корневой узел, а каждый дескриптор – листовой узлел.

LogFS записывает изменения следующим образом: сначала он создает модифицированный блок на новой позиции (b), оставляя старый блок без изменений. На новый блок пока ничто не ссылается, поэтому LogFS должна создать родительский узел (с). Новая структура не применяется до тех пор, пока корень не будет обработан(d). Это сохраняет файловую систему в устойчивом состоянии.

Устройство индексного дерева

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

Устройство блоков памяти

Блок флеш-памяти - это единица для перераспределения данных и обычно больше, чем блок файловой системы. LogFS обрабатывает это противоречие путем упаковывания нескольких блоков файловой системы в единичный блок флеш-памяти. "Sum" запись в конце блока флеш-памяти показывает, какие данные хранятся в нем. Когда все блоки файловой системы в одном флеш-блоке удалены или перемещены, флеш-блок может быть перезаписан и использован для хранения новой информации.

Сборка мусора

Для обеспечения максимальной производительности необходимо распределять блоки так, чтобы блоки флеш-памяти были полностью заполнены полезной информацией. Это возможно при использовании сборщика мусора. Логика работы сборщика мусора в logFS системе полагается на том, что данные с информацией по особенному располагаются в блоках флеш-памяти. Каждый блок хранит только ту информацию, которая хранится на одном уровне в inode-дереве. LogFS может собирать мусор с верха дерева, используя только один пустой блок флеш-памяти, с двух верхних уровней - используя два пустых блока флеш-памяти, и так далее. В самом худшем случае, алгоритм сборки мусора потребует експоненциальных затрат времени, но это случается крайне редко.

LogFS на практике

Использование

Для того, чтобы использовать LogFS необходимо пропатчить оригинальное ядро Linux. Официальный сайт содержит версии для 2.6.18, 2.6.20,2.6.21, и 2.6.23. Средство mkflogs также доступно из того же источника. После настройки, постройки и загрузки, можно создать MTD устройство и загрузить устройство в файловую систему. LogFS на данный момент находится в стадии разрабоки, и Jörn Engel утверждает, что файловая система до сих пор обновляет дерево слишком часто, и поэтому уступает в производительности.

Альтернативные решения

Разработчики обычно используют сразу несколько способов справиться с сложностями при работе с флеш памятью. Это может быть как работа на уровне флеш слоя (FTL), так и файловой системы. Другие опции предлагают адресовать проблемы с флеш памятью устройству, или строить поддержку напрямую в приложении, техника, которая часто используется в высоко-специализированных встроенных приложениях. Последнюю версию можно найти на официальном гите проекта: [1]

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