| Title: Sharing some statistics about BTRFS compression | |
| Author: Solène | |
| Date: 21 September 2022 | |
| Tags: btrfs filesystem | |
| Description: | |
| # Introduction | |
| As I'm moving to Linux more and more, I took the opportunity to explore | |
| the BTRFS file system which was mostly unknown to me. | |
| Let me share some data about compression ratio with BTRFS (ZFS should | |
| give similar results). | |
| # Work laptop | |
| ## First data | |
| This is my work computer with a big Nix store, and some build programs | |
| involving a lot of cache files and many git repositories. | |
| ``` | |
| Processed 3570629 files, 894690 regular extents (1836135 refs), 2366783 inline. | |
| Type Perc Disk Usage Uncompressed Referenced | |
| TOTAL 61% 55G 90G 155G | |
| none 100% 35G 35G 52G | |
| zlib 37% 20G 54G 102G | |
| prealloc 100% 138M 138M 67M | |
| ``` | |
| The output reads that the real disk usage is 61%, so 39% of the disk | |
| compressed data. We have more details per compression algorithm about | |
| the content, `none` represents uncompressed data and `zlib` the files | |
| compressed using this algorithm. | |
| Files compressed with zlib are down to 37% of their real size, this is | |
| not bad. I made a mistake when creating the BTRFS mount point: I used | |
| zlib compression algorithm which is quite obsolete nowadays. For | |
| history record, zlib is the library used to provide the "deflate | |
| compression algorithm" found in zip or gzip. | |
| Let's change the compression to use zstd algorithm instead. This can | |
| be changed with the command `btrfs filesystem defrag -czstd -r /`. | |
| Basically, all files are scanned, if they can be compressed with zstd, | |
| they are rewritten on the disk with the new algorithm. | |
| ## Data after switching to zstd | |
| After 37 minutes of recompressing everything, the results are | |
| surprising. It didn't change much! | |
| ``` | |
| Processed 3570427 files, 928646 regular extents (1869080 refs), 2364661 inline. | |
| Type Perc Disk Usage Uncompressed Referenced | |
| TOTAL 60% 54G 90G 155G | |
| none 100% 33G 33G 51G | |
| zstd 37% 21G 56G 104G | |
| prealloc 100% 138M 138M 67M | |
| ``` | |
| Real data usage on the disk is now 60% instead of 61% with zlib, not | |
| much of an improvement, I'd have expected zstd to perform a lot better. | |
| However, I didn't measure compression and decompression times. zstd | |
| should perform a lot better in this area, so I'll stick with zstd. | |
| LinuxReviews: comparison of compression algorithms | |
| # Personal computer | |
| My own laptop has a huge Nix store, a lot of binaries files (music, | |
| pictures), a few hundreads of gigabytes of video games. I suppose it's | |
| quite a realistic and balanced environment. | |
| ``` | |
| Processed 1804099 files, 755845 regular extents (1295281 refs), 980697 inline. | |
| Type Perc Disk Usage Uncompressed Referenced | |
| TOTAL 93% 429G 459G 392G | |
| none 100% 414G 414G 332G | |
| zstd 34% 15G 45G 59G | |
| prealloc 100% 92M 92M 91M | |
| ``` | |
| The saving due to compression is 30 GB, but this only count as 7% of | |
| the global file system. That's not impressive compared to the other | |
| computer, but having an extra 30 GB for free is clearly something I | |
| enjoy. |