НОВА (файловая система)
Разработчик(и) | Цзян (Андирий) Сюй, Лу Чжан, Стивен Суонсон, Калифорнийский университет, Сан-Диего , факультет компьютерных наук и инженерии |
---|---|
Предварительный выпуск | Ядро Linux 4.13 [1] |
Написано в | С |
Операционная система | Линукс |
Тип | файловой системы Драйвер |
Лицензия | лицензия GPL |
Веб-сайт | github |
Файловая система NOVA для ( энергонезависимая память ускоренная ) — это файловая система с открытым исходным кодом и журнальной структурой с байтовой адресацией постоянной памяти (например, энергонезависимого модуля двухрядной памяти (NVDIMM) и модулей DIMM 3D XPoint) для Linux. .
NOVA разработана специально для постоянной памяти с байтовой адресацией и направлена на обеспечение высокопроизводительных, атомарных операций с файлами и метаданными, а также отказоустойчивости. Для достижения этих целей NOVA сочетает в себе несколько методов, применяемых в других файловых системах. NOVA использует структуру журнала , копирование при записи (COW), ведение журнала и обновления метаданных с журнальной структурой для обеспечения надежных гарантий атомарности , а также использует комбинацию репликации, контрольных сумм метаданных и четности RAID 4 для защиты данных и метаданных от ошибок носителя. и программные ошибки. Он также поддерживает контрольные точки для облегчения резервного копирования.
Файловая система
[ редактировать ]NOVA была разработана в Калифорнийском университете в Сан-Диего , в Лаборатории энергонезависимых систем факультета компьютерных наук и инженерии. [2] [3] Первоначально патчи были доступны для версии 4.12 ядра Linux . [4] По состоянию на 2017 год [update] он ограничен Linux x86-64 и не готов к слиянию с исходным ядром. [3]
Структура журнала
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( сентябрь 2017 г. ) |
NOVA — это прежде всего файловая система с журнальной структурой, но она отличается от других файловых систем с журнальной структурой в нескольких отношениях. Во-первых, вместо использования единого журнала для всей файловой системы, каждый индексный дескриптор имеет свой собственный специальный журнал, в котором регистрируются обновления индексного дескриптора. [3] Это позволяет повысить параллелизм при файловых операциях, поскольку разные потоки могут работать с индексными узлами параллельно. Во-вторых, журналы не содержат данных файлов, а только обновления метаданных, в результате чего журналы становятся меньше. В-третьих, логи не хранятся в физически непрерывной памяти. Вместо этого NOVA хранит журналы в связанном списке страниц памяти размером 4 КБ.
NOVA использует журналы для обеспечения атомарности операций, влияющих на один файл (например, запись в файл или изменение его метаданных). Для этого NOVA записывает запись в пустое пространство после конца журнала, а затем атомарно обновляет указатель индексного дескриптора на конец журнала.
Копирование при записи
[ редактировать ]NOVA использует копирование при записи (COW) для обновления данных файла. Когда программа записывает данные в файл, NOVA выделяет несколько неиспользуемых страниц памяти для хранения данных и записывает в них данные. Затем он добавляет в журнал индексного дескриптора запись, указывающую на новые страницы и описывающую их логическое расположение в файле. Поскольку добавление записи журнала является атомарным, запись также является атомарной.
Ведение журнала
[ редактировать ]Некоторые файловые операции (например, перемещение файла из одного каталога в другой) требуют изменения нескольких индексных дескрипторов. Чтобы сделать эти операции атомарными, NOVA использует простые механизмы журналирования . Сначала он записывает новые записи журнала в концы индексных дескрипторов, на которые повлияет операция, затем использует журнал для записи необходимых обновлений указателей хвостов журнала индексных дескрипторов. Затем он помечает журнал как зафиксированный и применяет обновления к хвостовым указателям.
Защита метаданных
[ редактировать ]NOVA использует репликацию и контрольные суммы для обеспечения защиты от повреждения метаданных из-за ошибок носителя и ошибок программного обеспечения . Каждая структура метаданных (например, индексные дескрипторы, суперблоки и записи журнала) содержит контрольную сумму CRC32 , которая позволяет NOVA определять, изменилось ли содержимое структур с ее знанием. NOVA также хранит две копии каждой структуры данных – «основную» и «реплику» – и хранит их в памяти далеко друг от друга.
Всякий раз, когда NOVA обращается к структуре метаданных, она сначала пересчитывает контрольную сумму как на первичной, так и на реплике. Если какая-либо проверка приводит к несоответствию, NOVA устраняет повреждение, используя другую копию. Если ни одна из контрольных сумм не совпадает, структура теряется и NOVA возвращает ошибку.
Защита данных
[ редактировать ]NOVA использует RAID 4 для защиты файловых данных. Он делит каждую страницу размером 4 КБ на полосы по 512 байт и сохраняет полосу четности в выделенной области постоянной памяти. Он также вычисляет (и сохраняет копию) контрольную сумму CRC32 для восьми полос данных и полосы четности.
Когда NOVA считывает страницу, она проверяет контрольную сумму на каждой полоске. Если одна из полос повреждена, он пытается восстановить полосу, используя биты четности. Если ни на одной другой полосе не было обнаружено повреждения данных, восстановление будет успешным. В противном случае восстановление не удастся, содержимое страницы потеряется, а NOVA вернет ошибку.
Ссылки
[ редактировать ]- ^ «Линукс Нова» . Проверено 21 сентября 2017 г. — через GitHub .
- ^ «NOVA: новейшая файловая система Linux, разработанная для постоянной памяти — Phoronix» . Фороникс .
- ^ Перейти обратно: а б с «Файловая система NOVA [LWN.net]» . LWN.net .
- ^ «NOVA: новая файловая система для постоянной памяти [LWN.net]» . LWN.net .