Для Linux предложена новая ФС NOVA, спроектированная для NVM-памяти

2 недели ago admin 0

В списке рассылки ядра Linux представлена новая файловая система NOVA (NOn-Volatile memory Accelerated file system), созданная для обеспечения максимальной эффективности и надёжности работы на чипах энергонезависимой памяти (NVM, non-volatile memory, например NVDIMM и Intel 3DXpoint DIMM), сочетающих производительность ОЗУ с возможностью постоянного хранения содержимого, не теряющегося после прекращения подачи энергии.

Традиционные ФС не достаточно эффективны для NVM-памяти, так как не рассчитаны на байтовую адресацию, применяемую в энергонезависимой памяти, которая для обработчиков выглядит как обычное ОЗУ. Традиционные ФС пытаются снизить интенсивность обращения к носителю, который заведомо медленнее оперативной памяти, а также пытаются группировать операции для обеспечения последовательного чтения при применении НЖМД. Для NVM-хранилищ подобные усложнения излишни, так как скорость обращения к данным сопоставима с оперативной памятью и порядок доступа не имеет значения.

Отмечается, что представленная реализация NOVA уже достаточно стабильна при выполнении сложных приложений, но до доведения до готовности к широкомасштабному внедрению ещё необходимо проделать много работы. Поддерживается система снапшотов, позволяющих зафиксировать состояние ФС на текущий момент времени, которую можно использовать для создания целостных резервных копий. Для обеспечения непротиворечивости и целостности применяется похожая на RAID4 схема избыточного хранения метаданных, а также проверка по контрольным суммам.

ФС NOVA использует интерфейса ядра DAX для прямого доступа к устройствам постоянной памяти в обход страничного кэша. Система основана на структурах данных, отражающих изменения в форме лога (log-structured FS), но вместо поддержания одного глобального лога для всей ФС, в NOVA создаются отдельные логи для каждого файла (по логу на каждый inode). Лог разбивается на 4-килобайтовые страницы, которые могут произвольно размещаться в памяти (не обязательно по порядку). В логах хранятся только метаданные, а данные вынесены в отдельные страницы памяти. При выполнении операций записи в лог помещается указатель на блок изменяемых данных. Сами изменения в хранимые данные вносятся с применением механизма copy-on-write (COW) для обеспечения атомарности обновления.

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

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

Все таблицы inode и связанные с ними журналы разбиваются на несколько частей, каждая из которых привязывается к своему ядру CPU, что позволяет распараллелить операции с таблицей. Сами inode хранятся в связанных списках (по одному на CPU), блоками по 2 Мб. Последние 8 байт в каждом блоке ссылаются на следующий блок. Выделение новых блоков для inode осуществляется динамически. Каждый блок обрабатывается только тем ядром CPU, за которым закреплён.


Source: pirates.in.ua