From: Anand Jain <anand.jain@oracle.com>
To: dsterba@suse.cz, Timofey Titovets <nefelim4ag@gmail.com>,
linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v3] Btrfs: add skeleton code for compression heuristic
Date: Fri, 21 Jul 2017 13:00:56 +0800 [thread overview]
Message-ID: <f85d6fa7-4d1e-bfb8-7e64-ef02c468e42d@oracle.com> (raw)
In-Reply-To: <20170717183035.GR2866@twin.jikos.cz>
On 07/18/2017 02:30 AM, David Sterba wrote:
> So it basically looks good, I could not resist and rewrote the changelog
> and comments. There's one code fix:
>
> On Mon, Jul 17, 2017 at 04:52:58PM +0300, Timofey Titovets wrote:
>> -static inline int inode_need_compress(struct inode *inode)
>> +static inline int inode_need_compress(struct inode *inode, u64 start, u64 end)
>> {
>> struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
>>
>> /* force compress */
>> if (btrfs_test_opt(fs_info, FORCE_COMPRESS))
>> - return 1;
>> + return btrfs_compress_heuristic(inode, start, end);
> This must stay 'return 1', if force-compress is on, so the change is
> reverted.
Initially I thought 'return 1' is correct, but looking in depth,
it is not correct as below..
The biggest beneficiary of the estimating the compression ratio
in advance (heuristic) is when customers are using the
-o compress-force. But 'return 1' here is making them not to
use heuristic. So definitely something is wrong.
-o compress is about the whether each of the compression-granular bytes
(BTRFS_MAX_UNCOMPRESSED) of the inode should be tried to compress OR
just give up for the whole inode by looking at the compression ratio
of the current compression-granular.
This approach can be overridden by -o compress-force. So in
-o compress-force there will be a lot more efforts in _trying_
to compression than in -o compress. We must use heuristic for
-o compress-force.
btrfs_compress_heuristic is about the way of figuring out
whether the current compression-granular is compression capable.
Currently we are doing this part by trial-method (which is more
accurate than the heuristic approach), in the function
btrfs_compress_pages() and then we giving up in the function
compress_file_range(). So IMO. btrfs_compress_heuristic() should
be called at these functions.
Further, heuristic is just estimating which may go wrong based
on future compression algorithm ? (I am not sure).
IMO. its a good idea to either add an option to enable/disable
the heuristic.
Thanks, Anand
> I'm adding the patch to for-next.
>
>> /* bad compression ratios */
>> if (BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS)
>> return 0;
>> if (btrfs_test_opt(fs_info, COMPRESS) ||
>> BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS ||
>> BTRFS_I(inode)->force_compress)
>> - return 1;
>> + return btrfs_compress_heuristic(inode, start, end);
>> return 0;
>> }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2017-07-21 4:54 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-17 13:52 [PATCH v3] Btrfs: add skeleton code for compression heuristic Timofey Titovets
2017-07-17 18:30 ` David Sterba
2017-07-21 5:00 ` Anand Jain [this message]
2017-07-21 18:37 ` Roman Mamedov
2017-07-21 21:00 ` Adam Borowski
2017-07-22 0:52 ` Anand Jain
2017-07-24 14:53 ` David Sterba
2017-07-24 15:40 ` Anand Jain
2017-07-27 15:36 ` David Sterba
2017-07-28 14:04 ` Anand Jain
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=f85d6fa7-4d1e-bfb8-7e64-ef02c468e42d@oracle.com \
--to=anand.jain@oracle.com \
--cc=dsterba@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=nefelim4ag@gmail.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;
as well as URLs for NNTP newsgroup(s).