[Ocfs2-devel] [PATCH 4/4] Ocfs2: Optimize punching-hole codes v5.
tristan
tristan.ye at oracle.com
Tue May 18 21:15:00 PDT 2010
Mark Fasheh wrote:
> On Tue, May 11, 2010 at 05:54:45PM +0800, Tristan Ye wrote:
>> V5 patch simplifies the logic of handling existing holes and procedures
>> for skipping extent blocks, and removed most of confusing comments.
>>
>> V5 patch has survived with fill_verify_holes testcase in ocfs2-test,
>> it also passed my manual sanity check and stress tests with enormous
>> extent records.
>
> Ok, this looks good too.
>
>
>> Currently punching hole on a file with 3+ extent tree depth was
>> really a performance disaster, it even caused several hours to
>> go, though we may not hit this in real life with such a huge extent
>> number.
>>
>> One simple way to improve the performance is quite straightforward,
>> by learning the logic of truncating codes, means we'd punch hole from
>> hole_end to hole_start, which reduce the overhead of btree operation
>> in a significant way, such as tree rotation and moving.
>
> Right, so by punching from right to left, we're optimizing away rotations
> for at least those calls which are asking for a hole at the tail of the
> file. What is the performance change if we consider the other cases
> (punching in the middle or beginning of a file) only?
Mark,
Let me show you my latest benchmark statistics, say we're going to
operate on a 1G file, with 1G/4k extent recs(clustersize = 4k, each
cluster takes a ext record):
1. punching hole from begin to end:
# time ./punch_hole -f /storage/testfile -s 0 -l 1073741824
================ statistics with v5 patch =================
real 0m0.856s
user 0m0.000s
sys 0m0.855s
=========================== end ===========================
=============== statistics without v5 patch ===============
real 0m16.545s
user 0m0.001s
sys 0m15.704s
=========================== end ===========================
2. punching hole from begin to middle:
# time ./punch_hole -f /storage/testfile -s 0 -l 536870912
================ statistics with v5 patch =================
real 0m8.004s
user 0m0.000s
sys 0m7.960s
=========================== end ===========================
=============== statistics without v5 patch ===============
real 0m11.808s
user 0m0.000s
sys 0m11.786s
=========================== end ===========================
3. punching hole from middle to end:
./punch_hole -f /storage/testfile -s 536870912 -l 536870912
================ statistics with v5 patch =================
real 0m0.433s
user 0m0.000s
sys 0m0.433s
=========================== end ===========================
=============== statistics without v5 patch ===============
real 0m4.255s
user 0m0.000s
sys 0m4.249s
=========================== end ===========================
Patches are going to pay off when number of extent records was large
enough, and its performance gain increases sharply as extent record grows.
>
>
> Code-wise everything looks sane. I won't lie - it helps me to be comfortable
> the changes knowing that you tested regularly with our tools ;)
Definitely, regular testcases in ocfs2-test.git all have been tried out,
besides, with a combined test with reflink.
What's more, many boundary and manual testcases also get passed on my
hand as I can imagine.
>
> Signed-off-by: Mark Fasheh <mfasheh at suse.com>
> --Mark
>
> --
> Mark Fasheh
More information about the Ocfs2-devel
mailing list