stringtranslate.com

NOVA (файловая система)

Файловая система NOVA ( ускоренная энергонезависимая память ) — это файловая система с открытым исходным кодом , структурированная в журнале, для постоянной памяти с байтовой адресацией (например, энергонезависимые модули памяти с двухрядным расположением выводов (NVDIMM) и модули DIMM 3D XPoint) для Linux .

NOVA разработана специально для байт-адресуемых постоянных запоминающих устройств и нацелена на обеспечение высокопроизводительных, атомарных операций с файлами и метаданными, а также отказоустойчивости. Для достижения этих целей NOVA объединяет несколько методов, используемых в других файловых системах. NOVA использует структуру журнала , копирование при записи (COW), журналирование и обновления метаданных с журнальной структурой для обеспечения надежных гарантий атомарности , а также использует комбинированную репликацию, контрольные суммы метаданных и четность RAID 4 для защиты данных и метаданных от ошибок носителя и программных ошибок. Она также поддерживает контрольные точки для упрощения резервного копирования.

Файловая система

NOVA была разработана в Калифорнийском университете в Сан-Диего , в Лаборатории энергонезависимых систем Департамента компьютерных наук и инженерии. [2] [3] Первоначально исправления были доступны для версии 4.12 ядра Linux . [4] По состоянию на 2017 год она ограничена x86-64 Linux и не готова к слиянию с вышестоящим ядром. [3]

Структура журнала

NOVA — это в первую очередь файловая система с журнальной структурой, но она отличается от других файловых систем с журнальной структурой в нескольких отношениях. Во-первых, вместо использования одного журнала для всей файловой системы, каждый inode имеет свой собственный, выделенный журнал, который записывает обновления inode. [3] Это позволяет повысить параллелизм в файловых операциях, поскольку разные потоки могут работать с inode параллельно. Во-вторых, журналы не содержат файловые данные, а только обновления метаданных, что приводит к меньшим журналам. В-третьих, журналы не хранятся в физически непрерывной памяти. Вместо этого NOVA хранит журналы в связанном списке страниц памяти размером 4 КБ.

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

Копирование при записи

NOVA использует копирование при записи (COW) для обновления данных файла. Когда программа записывает данные в файл, NOVA выделяет некоторые неиспользуемые страницы памяти для хранения данных и записывает данные в них. Затем она добавляет запись журнала в журнал inode, которая указывает на новые страницы и описывает их логическое расположение в файле. Поскольку добавление записи журнала является атомарным, запись также является атомарной.

Ведение журнала

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

Защита метаданных

NOVA использует репликацию и контрольные суммы для защиты от повреждения метаданных из-за ошибок носителя и программных ошибок . Каждая структура метаданных (например, inodes, superblocks и log-записи) содержит контрольную сумму CRC32 , которая позволяет NOVA определять, изменилось ли содержимое структур с его знанием. NOVA также хранит две копии каждой структуры данных — «первичную» и «реплику» — и хранит их далеко друг от друга в памяти.

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

Защита данных

NOVA использует RAID 4 для защиты данных файлов. Он делит каждую страницу размером 4 КБ на полосы по 512 байт и сохраняет полосу четности в выделенной области постоянной памяти. Он также вычисляет (и сохраняет реплику) контрольную сумму CRC32 для восьми полос данных и полосы четности.

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

Ссылки

  1. ^ "linux nova" . Получено 21 сентября 2017 г. – через GitHub .
  2. ^ "NOVA: новейшая файловая система Linux, разработанная для постоянной памяти - Phoronix". Phoronix .
  3. ^ abc "Файловая система NOVA [LWN.net]". LWN.net .
  4. ^ "NOVA: новая файловая система для постоянной памяти [LWN.net]". LWN.net .

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