NOVA (filesystem): Difference between revisions
No edit summary Tags: Mobile edit Mobile app edit |
m heading case fix |
||
Line 22: | Line 22: | ||
NOVA was developed at the [[University of California, San Diego]], in the Non-Volatile Systems Laboratory of the Computer Science and Engineering Department.<ref name="phoronix-newest">{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=NOVA-File-System|title=NOVA: The Newest Linux File-System, Designed For Persistent Memory - Phoronix|website=[[Phoronix]]}}</ref><ref name="lwn-corbet">{{cite web|url=https://lwn.net/Articles/729812/|title=The NOVA filesystem [LWN.net]|website=[[LWN.net]]}}</ref> Patches were initially made available for version 4.12 of the [[Linux kernel]].<ref name="lwn-swanson">{{cite web|url=https://lwn.net/Articles/729770/|title=NOVA: a new file system for persistent memory [LWN.net]|website=[[LWN.net]]}}</ref> {{As of|2017}} it is limited to [[x86-64]] Linux, and not ready for merging with the upstream kernel.<ref name="lwn-corbet"/> |
NOVA was developed at the [[University of California, San Diego]], in the Non-Volatile Systems Laboratory of the Computer Science and Engineering Department.<ref name="phoronix-newest">{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=NOVA-File-System|title=NOVA: The Newest Linux File-System, Designed For Persistent Memory - Phoronix|website=[[Phoronix]]}}</ref><ref name="lwn-corbet">{{cite web|url=https://lwn.net/Articles/729812/|title=The NOVA filesystem [LWN.net]|website=[[LWN.net]]}}</ref> Patches were initially made available for version 4.12 of the [[Linux kernel]].<ref name="lwn-swanson">{{cite web|url=https://lwn.net/Articles/729770/|title=NOVA: a new file system for persistent memory [LWN.net]|website=[[LWN.net]]}}</ref> {{As of|2017}} it is limited to [[x86-64]] Linux, and not ready for merging with the upstream kernel.<ref name="lwn-corbet"/> |
||
===Log |
===Log structure=== |
||
{{Refimprove|section|date=September 2017}} |
{{Refimprove|section|date=September 2017}} |
||
NOVA is primarily a log-structured file system, but it differs from other log-structured file systems in several respects. First, rather than using a single log for the entire file system, each [[inode]] has its own, dedicated log that records the updates to the inode<ref name="lwn-corbet">{{cite web|url=https://lwn.net/Articles/729812/|title=The NOVA filesystem [LWN.net]|website=[[LWN.net]]}}</ref>. This allows for increased concurrency in file operations, since different [[thread (computing)|threads]] can operate on inodes in parallel. Second, the logs do not contain file data, but only metadata updates, resulting in smaller logs. Third, the logs are not stored in physically contiguous memory. Instead, NOVA stores the logs in [[linked list]] of 4KB memory pages. |
NOVA is primarily a log-structured file system, but it differs from other log-structured file systems in several respects. First, rather than using a single log for the entire file system, each [[inode]] has its own, dedicated log that records the updates to the inode<ref name="lwn-corbet">{{cite web|url=https://lwn.net/Articles/729812/|title=The NOVA filesystem [LWN.net]|website=[[LWN.net]]}}</ref>. This allows for increased concurrency in file operations, since different [[thread (computing)|threads]] can operate on inodes in parallel. Second, the logs do not contain file data, but only metadata updates, resulting in smaller logs. Third, the logs are not stored in physically contiguous memory. Instead, NOVA stores the logs in [[linked list]] of 4KB memory pages. |
Revision as of 14:59, 9 March 2018
Developer(s) | Jian (Andiry) Xu, Lu Zhang, Steven Swanson, University of California, San Diego, Computer Science and Engineering Department |
---|---|
Preview release | Linux kernel 4.13[1]
|
Written in | C |
Operating system | Linux |
Type | File system driver |
License | GPL |
Website | github |
The NOVA (non-volatile memory accelerated) file system is an open-source, log-structured file system for byte-addressable persistent memory (for example non-volatile dual in-line memory module (NVDIMM) and 3D XPoint DIMMs) for Linux.
NOVA is designed specifically for byte-addressable persistent memories and aims to provide high-performance, atomic file and metadata operations, and fault tolerance. To meet these goals NOVA combines several techniques found in other file system. NOVA uses log structure, copy-on-write (COW), journaling, and log-structured metadata updates to provide strong atomicity guarantees, and it uses a combination replication, metadata checksums, and RAID 4 parity to protect data and metadata from media errors and software bugs. It also supports checkpoints to facilitate backups.
Filesystem
NOVA was developed at the University of California, San Diego, in the Non-Volatile Systems Laboratory of the Computer Science and Engineering Department.[2][3] Patches were initially made available for version 4.12 of the Linux kernel.[4] As of 2017[update] it is limited to x86-64 Linux, and not ready for merging with the upstream kernel.[3]
Log structure
This section needs additional citations for verification. (September 2017) |
NOVA is primarily a log-structured file system, but it differs from other log-structured file systems in several respects. First, rather than using a single log for the entire file system, each inode has its own, dedicated log that records the updates to the inode[3]. This allows for increased concurrency in file operations, since different threads can operate on inodes in parallel. Second, the logs do not contain file data, but only metadata updates, resulting in smaller logs. Third, the logs are not stored in physically contiguous memory. Instead, NOVA stores the logs in linked list of 4KB memory pages.
NOVA uses the logs to provide atomicity for operations that affect a single file (e.g., writing to a file or modifying its metadata). To do this, NOVA writes a log entry to empty space past the end of the log and then atomically updates the inode's pointer to the log tail.
Copy-on-write
NOVA uses copy-on-write (COW) to update file data. When a program writes data to a file, NOVA allocates some unused memory pages to hold the data and writes the data into them. Then, it appends a log entry to the inode's log that points to the new pages and describes their logical location in the file. Since appending the log entry is atomic, the write is also atomic.
Journaling
Some file operations (e.g., moving a file from one directory to another) require modifying multiple inodes. To make these operations atomic, NOVA uses a simple journaling mechanisms. First, it writes the new log entries to ends of the inodes that the operation will affect, then it uses the journal to record the necessary updates to the inodes' log tail pointers. Next, it marks the journal as committed and applies the updates to the tail pointers.
Metadata protection
NOVA uses replication and checksums provides protection against metadata corruption due to media errors and software bugs. Every metadata structure (e.g., inodes, superblocks, and log entries) contains a CRC32 checksum that allows NOVA to detect if structures contents have changed with its knowledge. NOVA also stores two copies of each data structure – the "primary" and the "replica" – and stores them far from one another in memory.
Whenever NOVA accesses a metadata structure, it first recomputes the checksum on both the primary and the replica. If either check results in a mismatch, NOVA repairs the damage using the other copy. If neither checksum matches, then the structure is lost and NOVA returns an error.
Data protection
NOVA use RAID 4 to protect file data. It divides each 4KB page into 512-byte strips and stores a parity strip in a dedicated region of persistent memory. It also computes (and store a replica of) a CRC32 checksum for the eight data strips and the parity strip.
When NOVA reads a page, it confirms the checksum on each strip. If one of the strips is corrupt, it tries to recover the strip using the parity bits. If no other strips have experienced data corruption, recovery will succeed. Otherwise, recovery fails, the contents of the page are lost, and NOVA returns an error.
References
- ^ "linux nova". Retrieved 21 September 2017 – via GitHub.
- ^ "NOVA: The Newest Linux File-System, Designed For Persistent Memory - Phoronix". Phoronix.
- ^ a b c "The NOVA filesystem [LWN.net]". LWN.net.
- ^ "NOVA: a new file system for persistent memory [LWN.net]". LWN.net.