On Mon, Apr 17, 2017 at 12:07 PM, Liu Bo <[email protected]> wrote: > On Mon, Apr 17, 2017 at 11:36:17AM -0600, Chris Murphy wrote: >> HI, >> >> >> /dev/nvme0n1p8 on / type btrfs >> (rw,relatime,seclabel,ssd,space_cache,subvolid=258,subvol=/root) >> >> I've got a test folder with +C set and then copied a test file into it. >> >> $ lsattr >> ----------------C-- >> ./system@2547b430ecdc441c9cf82569eeb22065-0000000000000001-00054c3c31bec567.journal >> >> So now it's inherited +C. Next check fragments and compression. >> >> $ sudo ~/Applications/btrfs-debugfs -f >> system@2547b430ecdc441c9cf82569eeb22065-0000000000000001-00054c3c31bec567.journal >> (290662 0): ram 100663296 disk 17200840704 disk_size 100663296 >> file: >> system@2547b430ecdc441c9cf82569eeb22065-0000000000000001-00054c3c31bec567.journal >> extents 1 disk size 100663296 logical size 100663296 ratio 1.00 >> >> >> Try to compress it. >> >> $ sudo btrfs fi defrag -c >> system@2547b430ecdc441c9cf82569eeb22065-0000000000000001-00054c3c31bec567.journal >> >> Check again. >> >> [snip faux fragments] >> file: >> system@2547b430ecdc441c9cf82569eeb22065-0000000000000001-00054c3c31bec567.journal >> extents 768 disk size 21504000 logical size 100663296 ratio 4.68 >> >> It's compressed! OK?? >> >> OK delete that file, and add +c to the temp folder. >> >> $ lsattr >> --------c-------C-- ./temp >> >> Copy another test file into temp. >> >> $ lsattr >> --------c-------C-- >> ./system@2547b430ecdc441c9cf82569eeb22065-000000000002eb9f-00054d4ebb44b135.journal >> >> $ sudo ~/Applications/btrfs-debugfs -f >> system@2547b430ecdc441c9cf82569eeb22065-000000000002eb9f-00054d4ebb44b135.journal >> (290739 0): ram 83886080 disk 21764243456 disk_size 83886080 >> file: >> system@2547b430ecdc441c9cf82569eeb22065-000000000002eb9f-00054d4ebb44b135.journal >> extents 1 disk size 83886080 logical size 83886080 ratio 1.00 >> >> Not compressed. Hmmm. So somehow btrfs fi defrag -c will force >> compression even on nocow files? I've also done this without -c >> option, with a Btrfs mounted using compress option; and the file does >> compress also. I thought nocow files were always no compress, but it >> seems there's exceptions. >> > > Good catch. > > Btrfs defragment depends on COW to do the job, thus nocow inode are forced to > COW when processing defraged range, and the compress also depends on COW, so > btrfs filesystem defrag -c becomes an exception. > > Speaking of which, this exception seems to be not harmful other than confusing > users.
No in fact it might be a benefit. Recent versions of systemd-journald defragment, but are highly compressible files with a lot of slack space in them. So defragment on SSD is just increasing write amplification. If the defragment ioctl supports passing compression request, maybe that's an optimization systemd-journald can leverage for much smaller files. -- Chris Murphy -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
