Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: "Austin S. Hemmelgarn" <ahferroin7@gmail.com>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>,
	Adam Borowski <kilobyte@angband.pl>,
	Cloud Admin <admin@cloud.haefemeier.eu>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: How to disable/revoke 'compression'?
Date: Tue, 5 Sep 2017 07:36:15 -0400	[thread overview]
Message-ID: <f95ccc52-4b84-4e7e-8678-7a37f46f5dde@gmail.com> (raw)
In-Reply-To: <5e49c33f-ce4b-523d-24e6-befd379503a9@gmx.com>

On 2017-09-03 19:55, Qu Wenruo wrote:
> 
> 
> On 2017年09月04日 02:06, Adam Borowski wrote:
>> On Sun, Sep 03, 2017 at 07:32:01PM +0200, Cloud Admin wrote:
>>> Hi,
>>> I used the mount option 'compression' on some mounted sub volumes. How
>>> can I revoke the compression? Means to delete the option and get all
>>> data uncompressed on this volume.
>>> Is it enough to remount the sub volume without this option? Or is it
>>> necessary to do some addional step (balancing?) to get all stored data
>>> uncompressed.
>>
>> If you set it via mount option, removing the option is enough to disable
>> compression for _new_ files.  Other ways are chattr +c and 
>> btrfs-property,
>> but if you haven't heard about those you almost surely don't have such
>> attributes set.
>>
>> After remounting, you may uncompress existing files.  Balancing won't do
>> this as it moves extents around without looking inside; defrag on the 
>> other
>> hand rewrites extents thus as a side effect it applies new 
>> [non]compression
>> settings.  Thus: 「btrfs fi defrag -r /path/to/filesystem」.
>>
>>> Beside of it, is it possible to find out what the real and compressed 
>>> size
>>> of a file, for example or the ratio?
>>
>> Currently not.
>>
>> I've once written a tool which does this, but 1. it's extremely slow, 2.
>> insane, 3. so insane a certain member of this list would kill me had I
>> distributed the tool.  Thus, I'd need to rewrite it first...
> 
> AFAIK the only method to determine the compression ratio is to check the 
> EXTENT_DATA key and its corresponding file_extent_item structure.
> (Which I assume Adam is doing this way)
> 
> In that structure is records its on-disk data size and in-memory data 
> size. (All rounded up to sectorsize, which is 4K in most case)
> So in theory it's possible to determine the compression ratio.
> 
> The only method I can think of (maybe I forgot some methods?) is to use 
> offline tool (btrfs-debug-tree) to check that.
> FS APIs like fiemap doesn't even support to report on-disk data size so 
> we can't use it.
> 
> 
> But the problem is more complicated, especially when compressed CoW is 
> involved.
> 
> For example, there is an extent (A) which represents the data for inode 
> 258, range [0,128k).
> On disk size its just 4K.
> 
> And when we write the range [32K, 64K), which get CoWed and compressed, 
> resulting a new file extent (B) for inode 258, range [32K, 64K), and on 
> disk size is 4K as an example.
> 
> Then file extent layout for 258 will be:
> [0,32k):  range [0,32K) of uncompressed Extent A
> [32k, 64k): range [0,32k) of uncompressed Extent B
> [64k, 128k): range [64k, 128K) of uncompressed Extent A.
> 
> And on disk extent size is 4K (compressed Extent A) + 4K (compressed 
> Extent B) = 8K.
> 
> Before the write, the compresstion ratio is 4K/128K = 3.125%
> While after write, the compression ratio is 8K/128K = 6.25%
> 
> Not to mention that it's possible to have uncompressed file extent.
> 
> So it's complicated even we're just using offline tool to determine the 
> compression ratio of btrfs compressed file.
Out of curiosity, is there any easier method if you just want an 
aggregate ratio for the whole filesystem?  The intuitive option of 
comparing `du -sh` output to how much space is actually used in chunks 
is obviously out because that will count sparse ranges as 'compressed', 
and there should actually be a significant difference in values there 
for an uncompressed filesystem (the chunk usage should be higher).

  parent reply	other threads:[~2017-09-05 11:36 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-03 17:32 How to disable/revoke 'compression'? Cloud Admin
2017-09-03 18:06 ` Adam Borowski
2017-09-03 18:30   ` Hans van Kranenburg
2017-09-04 15:04     ` Adam Borowski
2017-09-03 23:55   ` Qu Wenruo
2017-09-04  0:14     ` Adam Borowski
2017-09-04  2:17       ` Qu Wenruo
2017-09-05 11:36     ` Austin S. Hemmelgarn [this message]
2017-09-05 12:52       ` Qu Wenruo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f95ccc52-4b84-4e7e-8678-7a37f46f5dde@gmail.com \
    --to=ahferroin7@gmail.com \
    --cc=admin@cloud.haefemeier.eu \
    --cc=kilobyte@angband.pl \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=quwenruo.btrfs@gmx.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox