Linux 5.10.8 Kernel Released - Finally Fixes That Btrfs Performance Regression
As noted back on Christmas, Linux 5.10 was seeing significant slowdowns on Btrfs. For simply unpacking a Linux kernel source .tar.zst file it could easily take multiple times longer on this stable kernel version.
While patches for addressing this poor Btrfs behavior on Linux 5.10 were floating around since before the end of the year, it's taken until now to get them tested and queued up for mainline integration. Linux 5.11 meanwhile has a plethora of Btrfs improvements.
With shrinking delalloc pages instead of full inodes the main issue should be addressed. As for the original cause, "this introduced a pretty serious performance regression. To reproduce the user untarred the source tarball of Firefox (360MiB xz compressed/1.5GiB uncompressed), and would see it take anywhere from 5 to 20 times as long to untar in 5.10 compared to 5.9. This was observed on fast devices (SSD and better) and not on HDD. The root cause is because before we would generally use the normal writeback path to reclaim delalloc space, and for this we would provide it with the number of pages we wanted to flush. The referenced commit changed this to flush that many inodes, which drastically increased the amount of space we were flushing in certain cases, which severely affected performance."
Overall things should be in good shape with Linux 5.10.8. Btrfs developer Josef Bacik commented on that page, "5.10+patch is significantly faster than plain 5.9 because of my patch series "Change data reservations to use the ticketing infra" which contained the patch that introduced the regression, but generally improved the overall ENOSPC flushing mechanisms."
So all should be well now on Linux 5.10 LTS stable as of Linux 5.10.8. No other pressing regressions for this LTS kernel come to mind at this point.