bug#6131: [PATCH]: fiemap support for efficient sparse file copy (original) (raw)

[Top][All Lists]


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


From: Jim Meyering
Subject: bug#6131: [PATCH]: fiemap support for efficient sparse file copy
Date: Mon, 24 May 2010 09:41:27 +0200

jeff.liu wrote:

Jim Meyering wrote: > jeff.liu wrote: > ... >>>> Subject: [PATCH 1/1] tests: add a new test for FIEMAP-copy >>>> >>>> * tests/cp/sparse-fiemap: Add a new test for FIEMAP-copy against a >>>> loopbacked ext4 partition. >>>> * tests/Makefile.am (sparse-fiemap): Reference the new test. > > BTW, I've just made this additional change to your test, > > diff --git a/tests/cp/sparse-fiemap b/tests/cp/sparse-fiemap > index 6312a4c..bdc7ded 100755 > --- a/tests/cp/sparse-fiemap > +++ b/tests/cp/sparse-fiemap > @@ -27,6 +27,7 @@ requireroot > cwd=pwd > cleanup() { cd /; umount "$cwd/mnt"; } > > +skip=0

More fixes for the test:

diff --git a/tests/cp/sparse-fiemap b/tests/cp/sparse-fiemap index 32ca5fc..cec5224 100755 --- a/tests/cp/sparse-fiemap +++ b/tests/cp/sparse-fiemap @@ -40,18 +40,18 @@ test -s mnt/f || skip=1 test $skip = 1 && skip_test_ "insufficient mount/ext4 support"

-rm -f mnt/f

Create a 1TiB sparse file

dd if=/dev/zero of=mnt/sparse bs=1k count=1 seek=1G || framework_failure

+cd mnt || fail=1 +

It takes many minutes to copy this sparse file using the old method.

By contrast, it takes far less than 1 second using FIEMAP-copy.

-timeout 10 cp --sparse=always mnt/sparse mnt/sparse_fiemap || fail=1 +timeout 10 cp --sparse=always sparse fiemap || fail=1

Ensure that the sparse file copied through fiemap has the same size

in bytes as the original.

-test stat --printf %s <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>p</mi><mi>a</mi><mi>r</mi><mi>s</mi><mi>e</mi><mi mathvariant="normal">‘</mi><mo>=</mo><mi mathvariant="normal">‘</mi><mi>s</mi><mi>t</mi><mi>a</mi><mi>t</mi><mo>−</mo><mo>−</mo><mi>p</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>t</mi><mi>f</mi></mrow><annotation encoding="application/x-tex">sparse = stat --printf %s </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">p</span><span class="mord mathnormal">a</span><span class="mord mathnormal">rse</span><span class="mord">‘</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">‘</span><span class="mord mathnormal">s</span><span class="mord mathnormal">t</span><span class="mord mathnormal">a</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">−</span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord mathnormal">in</span><span class="mord mathnormal">t</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span></span></span></span>fiemap || fail=1 +test (stat−−printf(stat --printf %s sparse) = (statprintf(stat --printf %s fiemap) || fail=1

=================================================

Ensure that we exercise the FIEMAP-copying code enough

-- 1.7.1.262.g5ef3d