Btrfs Updates in Linux 3.7 Kernel

The Linux 3.7 Kernel has been released on 10 December.

The version number has advanced so fast since 3.0 which was never seen in the 2.4.x and 2.6.x era, is it playing catch-up with Chrome? LOL

Summary

This Linux release includes support for the ARM 64 bit architecture, ARM support to boot into different systems using the same kernel, signed kernel modules, Btrfs support for disabling copy-on-write on a per-file basis using chattr and faster fsync(), a new “perf trace” tool modeled after strace, support for the TCP Fast Open feature in the server side, experimental SMBv2 protocol support, stable NFS 4.1 and parallel NFS support, a new tunneling protocol that allows to transfer Layer 2 ethernet packets over UDP, and support for the Intel “supervisor mode access prevention” security feature. Many small features and new drivers and fixes are also available.

Btrfs updates

  • fsync() speedups: The fsync() syscall writes the modified data of a file to the hard disk. The performance of fsync() is important for software like dpkg/rpm, Firefox, qemu, etc. Btrfs fsync() performance has been quite bad, but in this release fsync can be several times faster. Code: (commit 1, 2)
  • Remove the hard link limits inside a single directory: Btrfs didn’t allow to create more than about 20 hardlinks in the same directory. A disk format change has been added to add a new kind of “inode references” that lifts the hard link limit in a directory up to 65K (commit)
  • Hole punching: “Hole punching” is the ability to deallocate a range of space in a file (using the fallocate() syscall with the FALLOC_FL_PUNCH_HOLE mode). Btrfs now supports this feature. Code: (commit)
  • chattr per-file NOCOW support: Btrfs can disable copy-on-write for file data using the nodatacow mount option. In this version it also has added support for disabling copy-on-write for file data in a per-file basis using the chattr +C file (needs a recent e2fsprogs). Copy-on-write does not fit all workloads, and some applications want to disable it to get better fragmentation and performance behaviour. Code: (commit)
  • Note 1*: in order to disable copy-on-write you need to use chattr in a empty file, it won’t work in a file that already has data (in that case, you can create a temporary file, disable COW, copy the data, and rename the file).
  • Note 2*: disabling copy-on-write will also disable checksum support for that file.
  • Note 3*: it is possible to use chattr +C on a directory, and the new files created after issuing the command will get disabled COW support.

The above is an extract of Linux Kernel Newbies - Linux 3.7

TCP Fast Open (Server Side) is something that you may be interested in. Recommended LWN Article: TCP Fast Open: expediting web services