From: greg.freemyer@gmail.com (Greg Freemyer)
To: kernelnewbies@lists.kernelnewbies.org
Subject: Curious about corner case in btrfs code
Date: Tue, 26 Aug 2014 21:49:51 -0400 [thread overview]
Message-ID: <021f4def-eb03-4142-a2f0-73e525ea46b3@email.android.com> (raw)
In-Reply-To: <53FD2296.1000600@gmail.com>
On August 26, 2014 8:13:10 PM EDT, Nick <xerofoify@gmail.com> wrote:
>
>
>On 08/26/2014 08:05 PM, Tobias Boege wrote:
>> On Tue, 26 Aug 2014, Nick wrote:
>>> On 08/26/2014 06:58 PM, Mandeep Sandhu wrote:
>>>> If it's a corner case, it won't be hit often enough right? And if
>it
>>>> was hit often enough, it wouldn't be corner case!? :)
>>>>
>>>> These 2 are mutually exclusive!
>>>>
>>>>
>>>> On Tue, Aug 26, 2014 at 3:47 PM, Nick <xerofoify@gmail.com> wrote:
>>>>> After reading through the code in inode.c today , I am curious
>about the comment and the following code I will paste
>>>>> below. I am curious if this corner case is hit often enough for me
>to write a patch to improve the speed of this
>>>>> corner case. Furthermore , compress_file_range is the function
>name, in case you can't guess by the pasted code.
>>>>> Regards Nick
>>>>> 411 /*
>>>>> 412 * we don't want to send crud past the end of i_size
>through
>>>>> 413 * compression, that's just a waste of CPU time. So, if
>the
>>>>> 414 * end of the file is before the start of our current
>>>>> 415 * requested range of bytes, we bail out to the
>uncompressed
>>>>> 416 * cleanup code that can deal with all of this.
>>>>> 417 *
>>>>> 418 * It isn't really the fastest way to fix things, but this
>is a
>>>>> 419 * very uncommon corner.
>>>>> 420 */
>>>>> 421 if (actual_end <= start)
>>>>> 422 goto cleanup_and_bail_uncompressed;
>>>>>
>>>>> _______________________________________________
>>>>> Kernelnewbies mailing list
>>>>> Kernelnewbies at kernelnewbies.org
>>>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>> I get that my question is if this corner case is hit, enough for me
>to write a patch to optimize it.
>>> In addition the comment states it isn't but want to known for
>standard compression workloads in btrfs
>>> if it's hit enough for me to work on this and how much speed
>degradation are me we doing my not writing
>>> it better.
>>> Nick
>>>
>>
>> Here's how I would go about it:
>>
>> 1. Understand when the case is met (in theory).
>> 2. Try to trigger it on a real system multiple times.
>> 3. Try to explore systematically under what circumstances the case
>is met
>> and rank them by plausibility (if the notion of plausibility
>makes any
>> sense in a real world scenario -- I don't know).
>> 4. Estimate cost vs. benefit.
>>
>> I don't know if this is a good way but notice how you can do all this
>on
>> yourself which I think is a plus for everyone. And if you decide in
>step 4
>> to write a patch:
>>
>> 5. Use your results from step 3 to create an environment that
>benefits
>> from your patch (notice how 4 guarantees that there exists such a
>> system with reasonable connection to real needs). Note the
>numbers.
>> 6. Test your patch on as many regular configurations as possible.
>Note
>> the numbers. If it degrades performance on any of those, abort.
>> 7. Do *NOT* send the patch out.
>>
>> Regards,
>> Tobi
>>
>
>Thanks Tobi,
>>From reading the code off the bat, seems to not need to be written as
>this case is rarely meet for large files
>or files that are huge and take a lot of time to write. Was more
>curious about how to test things like this if
>I need to :).
>Nick
If you want to do anything more than code beautification for btrfs, you absolutely have to learn how to write xfstest scripts. Dispute the name, the Linux kernel now uses xfstests to exercise all kernel file systems.
I don't follow btrfs, but xfs as an obvious example is pretty strict about only accepting meaningful patches if they are accompanied by a user space xfstest tool to exercise it. Surprisingly that seems to be less true of new functionality. Bug fix patches have an almost mandatory request for an accompanying xfstest.
The other side of that is if you read thru the kernel bugzilla and find a filesystem bug you want to fix, a good first step is to focus on writing a xfstest script that will show the bug and fail appropriately.
A decade plus ago when I first got interested in using xfs for a production system, the freeze feature would randomly fail for me. I was able to update the xfstest that exercised that code and get a reproducer. I didn't do the actual kernel fix, but I still think of that as my first significant contribution to the kernel.
Greg
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
next prev parent reply other threads:[~2014-08-27 1:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 22:47 Curious about corner case in btrfs code Nick
2014-08-26 22:58 ` Mandeep Sandhu
2014-08-26 23:14 ` Nick
2014-08-26 23:36 ` Mandeep Sandhu
2014-08-27 0:05 ` Tobias Boege
2014-08-27 0:13 ` Nick
2014-08-27 0:36 ` Valdis.Kletnieks at vt.edu
2014-08-27 0:37 ` Tobias Boege
2014-08-27 0:41 ` Nick
2014-08-27 1:49 ` Greg Freemyer [this message]
2014-08-27 4:08 ` Valdis.Kletnieks at vt.edu
2014-08-27 4:47 ` nick
2014-08-27 5:09 ` Aruna Hewapathirane
2014-08-27 17:35 ` nick
2014-08-26 23:34 ` Valdis.Kletnieks at vt.edu
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=021f4def-eb03-4142-a2f0-73e525ea46b3@email.android.com \
--to=greg.freemyer@gmail.com \
--cc=kernelnewbies@lists.kernelnewbies.org \
/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).