Red Hat развивает новую ФС NVFS, эффективную для NVM-памяти

Микулаш Паточка (Mikuláš Patočka), один из разработчиков LVM и автор ряда изобретений, связанных с оптимизацией работы систем хранения, работающий в компании Red Hat, представил в списке рассылки разработчиков ядра Linux новую файловую систему NVFS, нацеленную на создание компактной и быстрой ФС для чипов энергонезависимой памяти (NVM, non-volatile memory, например NVDIMM), сочетающих производительность ОЗУ с возможностью постоянного хранения содержимого.

При разработке NVFS учтён опыт ФС NOVA, в 2017 году созданной специально для NVM-памяти, но не принятой в состав ядра Linux и ограниченной поддержкой ядер Linux с 4.13 по 5.1.
Предложенная ФС NVFS значительно проще NOVA (4972 строк кода против 21459), предоставляет утилиту fsck, обладает более высокой производительностью, поддерживает расширенные атрибуты (xattrs), метки безопасности, ACL и квоты, но не поддерживает снапшоты. Aрхитектура NVFS близка к
ФС Ext4 и хорошо укладывается в модель файловых систем на основе подсистемы VFS, что позволяет свести к минимум число прослоек и обойтись модулем, не требующим внесения патчей в ядро.

NVFS использует интерфейс ядра DAX для прямого доступа к устройствам постоянной памяти в обход страничного кэша. Для оптимизации работы с памятью NVM, в которой применяется байтовая адресация, содержимое накопителя отображается в линейное адресное пространство ядра без применения традиционного уровня блочных устройств и промежуточного кэша. Для хранения содержимого каталогов используется базисное дерево (radix tree), в котором каждое имя файла прохэшировано и значение хэша используется при поиске в дереве.

Целостность данных обеспечивается при помощи механизма «soft updates» (как в UFS из FreeBSD и в FFS из OpenBSD) без применения журналирования. Для исключения повреждения файлов в NVFS операции изменения данных группируются таким образом, что крах не может привести к потере блоков или inode, а целостность структур восстанавливается при помощи утилиты fsck. Утилита fsck работает в многопоточном режиме и обеспечивает производительность на уровне перебора 1.6 млн inode в секунду.

В тестах производительности NVFS выполнила операцию копирования дерева с исходными текстами ядра Linux на NVM-памяти примерно на 10% быстрее NOVA, на 30% быстрее ext4 и на 37% быстрее XFS. В тесте на поиск данных ФС NVFS оказалась быстрее NOVA на 3%, а ext4 и XFS на 15% (но при активном дисковом кэше NOVA оказалась медленее на 15%).
В тесте на миллион операций с каталогами NVFS опередила NOVA на 40%, ext4 на 22%, а XFS на 46%. При симуляции активности СУБД файловая система NVFS опередила NOVA на 20%, ext4 в 18 раз и XFS в 5 раз. В тесте fs_mark показатели NVFS и NOVA оказались примерно на одном уровне, а ext4 и XFS отстали примерно в 3 раза.

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

Источник: opennet.ru