El sistema de archivos NOVA ( memoria no volátil acelerada ) es un sistema de archivos estructurado en registros y de código abierto para memoria persistente direccionable por bytes (por ejemplo, módulo de memoria dual en línea no volátil (NVDIMM) y DIMM 3D XPoint) para Linux .
NOVA está diseñado específicamente para memorias persistentes direccionables por bytes y tiene como objetivo proporcionar operaciones de metadatos y archivos atómicos de alto rendimiento y tolerancia a fallas. Para cumplir con estos objetivos, NOVA combina varias técnicas que se encuentran en otros sistemas de archivos. NOVA utiliza estructura de registro , copia en escritura (COW), registro en diario y actualizaciones de metadatos estructuradas en registro para proporcionar fuertes garantías de atomicidad , y utiliza una combinación de replicación, sumas de comprobación de metadatos y paridad RAID 4 para proteger los datos y metadatos de errores de medios y errores de software. También admite puntos de control para facilitar las copias de seguridad.
NOVA fue desarrollado en la Universidad de California, San Diego , en el Laboratorio de Sistemas No Volátiles del Departamento de Ciencias Informáticas e Ingeniería. [2] [3] Inicialmente, se pusieron a disposición parches para la versión 4.12 del kernel de Linux . [4] A partir de 2017 , [actualizar]está limitado a Linux x86-64 y no está listo para fusionarse con el kernel original. [3]
NOVA es principalmente un sistema de archivos estructurado en forma de registros, pero se diferencia de otros sistemas de archivos estructurados en forma de registros en varios aspectos. En primer lugar, en lugar de utilizar un único registro para todo el sistema de archivos, cada inodo tiene su propio registro dedicado que registra las actualizaciones del inodo. [3] Esto permite una mayor concurrencia en las operaciones de archivos, ya que diferentes subprocesos pueden operar en inodos en paralelo. En segundo lugar, los registros no contienen datos de archivos, sino solo actualizaciones de metadatos, lo que da como resultado registros más pequeños. En tercer lugar, los registros no se almacenan en una memoria físicamente contigua. En cambio, NOVA almacena los registros en una lista enlazada de páginas de memoria de 4 KB.
NOVA utiliza los registros para proporcionar atomicidad a las operaciones que afectan a un solo archivo (por ejemplo, escribir en un archivo o modificar sus metadatos). Para ello, NOVA escribe una entrada de registro en un espacio vacío después del final del registro y luego actualiza de forma atómica el puntero del inodo hacia la cola del registro.
NOVA utiliza el método de copia en escritura (COW) para actualizar los datos de un archivo. Cuando un programa escribe datos en un archivo, NOVA asigna algunas páginas de memoria no utilizadas para almacenar los datos y los escribe en ellas. Luego, agrega una entrada de registro al registro del inodo que apunta a las nuevas páginas y describe su ubicación lógica en el archivo. Dado que agregar la entrada de registro es atómico, la escritura también es atómica.
Algunas operaciones de archivo (por ejemplo, mover un archivo de un directorio a otro) requieren la modificación de varios inodos. Para que estas operaciones sean atómicas, NOVA utiliza un mecanismo de registro en diario simple . Primero, escribe las nuevas entradas de registro en los extremos de los inodos que afectará la operación y luego utiliza el registro para registrar las actualizaciones necesarias en los punteros de cola de registro de los inodos. A continuación, marca el registro como confirmado y aplica las actualizaciones a los punteros de cola.
NOVA utiliza la replicación y las sumas de comprobación para brindar protección contra la corrupción de metadatos debido a errores de medios y errores de software . Cada estructura de metadatos (por ejemplo, inodos, superbloques y entradas de registro) contiene una suma de comprobación CRC32 que permite a NOVA detectar si el contenido de las estructuras ha cambiado sin su conocimiento. NOVA también almacena dos copias de cada estructura de datos (la "principal" y la "réplica") y las almacena lejos una de la otra en la memoria.
Cada vez que NOVA accede a una estructura de metadatos, primero vuelve a calcular la suma de comprobación tanto en la copia principal como en la réplica. Si alguna de las comprobaciones da como resultado una discrepancia, NOVA repara el daño utilizando la otra copia. Si ninguna de las sumas de comprobación coincide, se pierde la estructura y NOVA devuelve un error.
NOVA utiliza RAID 4 para proteger los datos de los archivos. Divide cada página de 4 KB en franjas de 512 bytes y almacena una franja de paridad en una región dedicada de la memoria persistente. También calcula (y almacena una réplica de) una suma de comprobación CRC32 para las ocho franjas de datos y la franja de paridad.
Cuando NOVA lee una página, confirma la suma de comprobación de cada banda. Si una de las bandas está dañada, intenta recuperarla utilizando los bits de paridad. Si ninguna otra banda ha sufrido daños en los datos, la recuperación se realizará correctamente. De lo contrario, la recuperación falla, se pierde el contenido de la página y NOVA devuelve un error.