The No-Order File System (NoFS) is a simple, lightweight file system that employs a novel technique called backpointer-based consistency to provide crash consistency without ordering writes as they go to disk. NoFS is robust to crashes, and delivers excellent performance across a range of workloads.
The NoFS project page provides a high level overview. For technical details, please read the FAST 2012 paper Consistency Without Ordering. Please cite this publication if you use this work.
This project contains the linux kernel and file system code that we used in the paper. Another name for NoFS is ext2bp (reflecting that the code is the result of adding backpointers (bp) to ext2). The term ext2bp is used extensively in the code.
Please feel free to contact me with any questions.
The code has three main parts.
e2fsprogs-1.41.12 This is a modified version of e2fsprogs. It allows the user to create a NoFS file system (mke2bpfs) and debug it (debugfs).
ext2bp This is the core NoFS file system. It is written as a loadable kernel module. It has some dependencies in the kernel which are provided by the kernel patch.
nofs_kernel.patch This includes changes to the Linux 2.6.27.55 kernel to support NoFS. This patch has to be applied to the kernel before NoFS can be run in it.
- Make the e2fsprogs
cd e2fsprogs-1.41.12/; make;
- Make the new NoFS file system
cd misc; ./mke2bfs /dev/sdb
- Patch the kernel.
cd linux-2.6.27.55/; patch -p1 < nofs_kernel.patch;
- Compile and install the kernel.
make; make modules; make modules_install; make install
-
Reboot the machine into the new kernel.
-
Extract the ext2bp folder and move into the kernel tree
mv ext2bp linux-2.6.27.55/fs/
- Compile the kernel module
cd linux-2.6.27.55/fs/ext2bp; make
- Load the kernel module
insmod ext2bp.ko
- Mount the file system
mount -t ext2bp /dev/sdb /mnt/test
This version of the code does not contain block offsets. Backpointers only contain inode numbers. We intend to clean up and upload the version that includes block offsets soon. The code is a bit more verbose than strictly required as many functions were introduced purely for debugging purposes.
Note that the code is provided "as is": compiling and running the code will require some tweaking based on the operating system environment. The file system is only meant as a prototype and not meant for production use in any way.