Btrfs Performance From Linux 6.12 To Linux 7.0 Shows Regressions

Written by Michael Larabel in Software on 18 March 2026 at 11:00 AM EDT. Page 2 of 4. 61 Comments.
Flexible IO Tester benchmark with settings of Type: Random Read, Engine: IO_uring, Direct: No, Block Size: 4KB, Job Count: 32, Disk Target: Default Test Directory. EXT4 was the fastest.
Flexible IO Tester benchmark with settings of Type: Random Read, Engine: IO_uring, Direct: Yes, Block Size: 4KB, Job Count: 16, Disk Target: Default Test Directory. XFS was the fastest.

The 4K random read performance measured by FIO from Linux 6.12 to Linux 7.0 showed very little change for Btrfs on this Gen5 NVMe SSD. Btrfs with its default options was notably slower than EXT4 and Btrfs due to its copy-on-write behavior and other modern features.

Flexible IO Tester benchmark with settings of Type: Random Write, Engine: IO_uring, Direct: No, Block Size: 4KB, Job Count: 16, Disk Target: Default Test Directory. XFS was the fastest.
Flexible IO Tester benchmark with settings of Type: Random Write, Engine: IO_uring, Direct: No, Block Size: 4KB, Job Count: 32, Disk Target: Default Test Directory. XFS was the fastest.

The 4K random write performance for Btrfs across the kernel versions since late 2024 remained rather flat and in some cases slid lower.

Flexible IO Tester benchmark with settings of Type: Random Write, Engine: IO_uring, Direct: Yes, Block Size: 4KB, Job Count: 16, Disk Target: Default Test Directory. EXT4 was the fastest.
Flexible IO Tester benchmark with settings of Type: Random Write, Engine: IO_uring, Direct: Yes, Block Size: 4KB, Job Count: 32, Disk Target: Default Test Directory. EXT4 was the fastest.
Flexible IO Tester benchmark with settings of Type: Random Write, Engine: IO_uring, Direct: Yes, Block Size: 4KB, Job Count: 64, Disk Target: Default Test Directory. EXT4 was the fastest.
random write direct write wins for EXT4/XFS, loss for Btrfs

With the direct random write performance in FIO, both XFS and EXT4 showed nice gains on Linux 6.19 and continuing that way for Linux 7.0. But the Btrfs default performance in this benchmark did not enjoy such a boost. In fact, the direct write performance for 4K random writes has gradually been decaying over the Linux kernel releases tested.

Flexible IO Tester benchmark with settings of Type: Sequential Read, Engine: IO_uring, Direct: No, Block Size: 2MB, Job Count: 8, Disk Target: Default Test Directory. EXT4 was the fastest.
Flexible IO Tester benchmark with settings of Type: Sequential Read, Engine: IO_uring, Direct: No, Block Size: 2MB, Job Count: 32, Disk Target: Default Test Directory. EXT4 was the fastest.

With the sequential read performance in FIO, as previously noted in Linux 6.16 was a nice speed-up for EXT4 to put its performance inline with XFS. Btrfs meanwhile was flat across the tested kernel versions.

Flexible IO Tester benchmark with settings of Type: Sequential Write, Engine: IO_uring, Direct: No, Block Size: 2MB, Job Count: 8, Disk Target: Default Test Directory. XFS was the fastest.
Flexible IO Tester benchmark with settings of Type: Sequential Write, Engine: IO_uring, Direct: No, Block Size: 2MB, Job Count: 32, Disk Target: Default Test Directory. XFS was the fastest.
Flexible IO Tester benchmark with settings of Type: Sequential Write, Engine: IO_uring, Direct: No, Block Size: 2MB, Job Count: 64, Disk Target: Default Test Directory. XFS was the fastest.

The sequential write performance with FIO on Btrfs was also rather flat in comparison to some of the improvements observed with XFS and EXT4 over the tested kernel versions.

Related Articles