Linux Btrfs filesystem development
 help / color / mirror / Atom feed
From: Austin S Hemmelgarn <ahferroin7@gmail.com>
To: Zhao Lei <zhaolei@cn.fujitsu.com>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH v3] btrfs-progs: mkfs: Enable -d dup for single device
Date: Thu, 19 Nov 2015 16:14:16 -0500	[thread overview]
Message-ID: <564E3BA8.9020909@gmail.com> (raw)
In-Reply-To: <71e6ba091cdb43b7d0d5f73fb3dd2daa2929ec41.1447925407.git.zhaolei@cn.fujitsu.com>

[-- Attachment #1: Type: text/plain, Size: 13697 bytes --]

On 2015-11-19 04:36, Zhao Lei wrote:
> Current code don't support dup profile in single device, except it
> is in mixed mode, because following reason:
> 1: In some ssd with deduplication function, it have no effect.
> 2: For a physical device, it the entire disk broken, -d dup can
>     not help.
> 3: Half performance comparing with single profile.
> 4: We have a workaround: Create multi-partition in single device,
>     and btefs will treat them as multi device.
>
> Instead of refuse -d dup, we have a better choise:
> Give user a chance to select, and output a warning to notice above
> problem.
>
> Test:
> 1: Tested by xfstests
>     Run with modified xfstests, I add test items of -d dup in single
>     device into btrfs/* and common/rc, run tests of btrfs/*,
>     with all mount option, no regression diffed with v4.3.
> 2: Tested by btrfs-progs
>     Checked following commands in "-m dup -d dup" fs with memleck
>     checking, all passed:
>     mkfs.btrfs -f --data dup --metadata dup /dev/sda6
>     btrfs filesystem show /dev/sda6
>     btrfs filesystem label /dev/sda6 btrfs_label_test
>     btrfs filesystem label /dev/sda6
>     btrfs device scan --all-devices
>     btrfs device scan /dev/sda6
>     btrfs device scan /dev/sda6
>     btrfs device ready /dev/sda6
>     btrfs check /dev/sda6
>     btrfs check -s 1 /dev/sda6
>     btrfs check --repair /dev/sda6
>     btrfs check --init-csum-tree /dev/sda6
>     btrfs check --init-extent-tree /dev/sda6
>     btrfs check --check-data-csum /dev/sda6
>     btrfs check --qgroup-report /dev/sda6
>     btrfs rescue super-recover -y /dev/sda6
>     btrfs rescue zero-log /dev/sda6
>     btrfs restore -l /dev/sda6
>     btrfs restore /dev/sda6 /
>     btrfs restore -s /dev/sda6 /
>     btrfs restore -x /dev/sda6 /
>     btrfs restore -m /dev/sda6 /
>     btrfs restore -S /dev/sda6 /
>     btrfs restore -v /dev/sda6 /
>     btrfs restore -i /dev/sda6 /
>     btrfs restore -o /dev/sda6 /
>     btrfs restore -u0 /dev/sda6 /
>     btrfs restore -u1 /dev/sda6 /
>     btrfs restore -D /dev/sda6 /
>     btrfs property list /dev/sda6
>     btrfs property get /dev/sda6 label
>     btrfs property set /dev/sda6 label test
>     btrfs property set /dev/sda6 label btrfs_label_test
>     btrfs help
>     btrfs help --full
>     btrfs version
>     btrfsck /dev/sda6
>     btrfs-find-root /dev/sda6
>     btrfs-find-root -a /dev/sda6
>     btrfs-map-logical -l1 /dev/sda6
>     btrfs-map-logical -l1 -c1 /dev/sda6
>     btrfs-map-logical -l1 -o /tmp/btrfs-map-logic-out /dev/sda6
>     btrfs-map-logical -l1 -b1 /dev/sda6
>     btrfs-select-super -s 0 /dev/sda6
>     btrfs-select-super -s 1 /dev/sda6
>     btrfstune -S 1 /dev/sda6
>     btrfstune -f -S 0 /dev/sda6
>     btrfstune -r /dev/sda6
>     btrfstune -x /dev/sda6
>     btrfstune -n /dev/sda6
>     btrfstune -f -U 00000000-0000-0000-0000-000000000000 /dev/sda6
>     btrfstune -f -u /dev/sda6
>     btrfs-calc-size /dev/sda6
>     btrfs-calc-size -v /dev/sda6
>     btrfs-calc-size -b /dev/sda6
>     btrfs-debug-tree /dev/sda6
>     btrfs-debug-tree -e /dev/sda6
>     btrfs-debug-tree -d /dev/sda6
>     btrfs-debug-tree -r /dev/sda6
>     btrfs-debug-tree -R /dev/sda6
>     btrfs-debug-tree -u /dev/sda6
>     btrfs-debug-tree -b 0 /dev/sda6
>     btrfs-debug-tree -t 0 /dev/sda6
>     btrfs-debug-tree -t 2 /dev/sda6
>     btrfs-show-super /dev/sda6
>     btrfs-show-super -i 0 /dev/sda6
>     btrfs-show-super -i 1 /dev/sda6
>     btrfs-show-super -i 2 /dev/sda6
>     btrfs-show-super -a /dev/sda6
>     btrfs-show-super -f /dev/sda6
>     btrfs-show-super -F /dev/sda6
>     btrfs subvolume list /mnt/btrfs-progs-tests
>     btrfs subvolume create /mnt/btrfs-progs-tests/mysubvol
>     btrfs subvolume list /mnt/btrfs-progs-tests
>     btrfs subvolume get-default /mnt/btrfs-progs-tests
>     btrfs subvolume set-default 258 /mnt/btrfs-progs-tests
>     btrfs subvolume get-default /mnt/btrfs-progs-tests
>     btrfs subvolume set-default  /mnt/btrfs-progs-tests
>     btrfs subvolume snapshot /mnt/btrfs-progs-tests/mysubvol /mnt/btrfs-progs-tests/mysubvol_snap
>     btrfs subvolume list /mnt/btrfs-progs-tests
>     btrfs subvolume find-new /mnt/btrfs-progs-tests 0
>     btrfs subvolume find-new /mnt/btrfs-progs-tests 0
>     btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0
>     btrfs subvolume find-new /mnt/btrfs-progs-tests/mysubvol 0
>     btrfs subvolume show /mnt/btrfs-progs-tests
>     btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol
>     btrfs subvolume show /mnt/btrfs-progs-tests/mysubvol_snap
>     btrfs subvolume sync /mnt/btrfs-progs-tests
>     btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol_snap
>     btrfs subvolume delete /mnt/btrfs-progs-tests/mysubvol
>     btrfs subvolume sync /mnt/btrfs-progs-tests
>     btrfs filesystem df /mnt/btrfs-progs-tests
>     btrfs filesystem show /mnt/btrfs-progs-tests
>     btrfs filesystem sync /mnt/btrfs-progs-tests
>     btrfs filesystem label /mnt/btrfs-progs-tests btrfs_label_test
>     btrfs filesystem label /mnt/btrfs-progs-tests
>     btrfs filesystem usage /mnt/btrfs-progs-tests
>     btrfs filesystem defragment -s 1024 -l 2048 /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_0
>     btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_1
>     btrfs filesystem defragment -f /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_2
>     btrfs filesystem defragment -czlib /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_3
>     btrfs filesystem defragment -clzo /mnt/btrfs-progs-tests/filesystem_test_dir/test_dir_0/test_file_4
>     btrfs filesystem defragment /mnt/btrfs-progs-tests/filesystem_test_dir
>     btrfs filesystem defragment -r /mnt/btrfs-progs-tests/filesystem_test_dir
>     btrfs filesystem defragment /mnt/btrfs-progs-tests
>     btrfs filesystem resize 1:-10M /mnt/btrfs-progs-tests
>     btrfs filesystem resize 1:max /mnt/btrfs-progs-tests
>     btrfs balance start /mnt/btrfs-progs-tests
>     btrfs balance start -v /mnt/btrfs-progs-tests
>     btrfs balance start -f /mnt/btrfs-progs-tests
>     btrfs balance status -v /mnt/btrfs-progs-tests
>     btrfs balance pause /mnt/btrfs-progs-tests
>     btrfs balance status /mnt/btrfs-progs-tests
>     btrfs balance resume /mnt/btrfs-progs-tests
>     btrfs balance status -v /mnt/btrfs-progs-tests
>     btrfs balance cancel /mnt/btrfs-progs-tests
>     btrfs balance start -dprofiles=single /mnt/btrfs-progs-tests
>     btrfs balance start -dconvert=single /mnt/btrfs-progs-tests
>     btrfs balance start -ddevid=1 /mnt/btrfs-progs-tests
>     btrfs balance start -f -mprofiles=single /mnt/btrfs-progs-tests
>     btrfs balance start -f -mconvert=single /mnt/btrfs-progs-tests
>     btrfs balance start -f -mdevid=1 /mnt/btrfs-progs-tests
>     btrfs balance start -f -sprofiles=single /mnt/btrfs-progs-tests
>     btrfs balance start -f -sconvert=single /mnt/btrfs-progs-tests
>     btrfs balance start -f -sdevid=1 /mnt/btrfs-progs-tests
>     btrfs device add -f /dev/sda10 /mnt/btrfs-progs-tests
>     btrfs device del /dev/sda10 /mnt/btrfs-progs-tests
>     btrfs device stats /dev/sda6
>     btrfs device stats -z /dev/sda6
>     btrfs device stats /mnt/btrfs-progs-tests
>     btrfs device stats -z /mnt/btrfs-progs-tests
>     btrfs device usage /mnt/btrfs-progs-tests
>     btrfs scrub status /mnt/btrfs-progs-tests
>     btrfs scrub start -B /mnt/btrfs-progs-tests
>     btrfs scrub start -B -d /mnt/btrfs-progs-tests
>     btrfs scrub start -B -r /mnt/btrfs-progs-tests
>     btrfs scrub status /mnt/btrfs-progs-tests
>     btrfs scrub start /mnt/btrfs-progs-tests
>     btrfs scrub status /mnt/btrfs-progs-tests
>     btrfs scrub status /mnt/btrfs-progs-tests
>     btrfs scrub status -d /mnt/btrfs-progs-tests
>     btrfs scrub status -R /mnt/btrfs-progs-tests
>     btrfs scrub status /mnt/btrfs-progs-tests
>     btrfs scrub start /dev/sda6
>     btrfs scrub status /dev/sda6
>     btrfs scrub status /dev/sda6
>     btrfs scrub status -d /dev/sda6
>     btrfs scrub status -R /dev/sda6
>     btrfs scrub status /dev/sda6
>     btrfs subvolume snapshot -r /mnt/btrfs-progs-tests /mnt/btrfs-progs-tests/snap1
>     btrfs send -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1
>     btrfs send -e -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1
>     btrfs send --no-data -f /tmp/btrfs_snapshot_test /mnt/btrfs-progs-tests/snap1
>     btrfs quota enable /mnt/btrfs-progs-tests
>     btrfs quota rescan /mnt/btrfs-progs-tests
>     btrfs quota rescan -s /mnt/btrfs-progs-tests
>     btrfs quota rescan -w /mnt/btrfs-progs-tests
>     btrfs quota disable /mnt/btrfs-progs-tests
>     btrfs quota enable /mnt/btrfs-progs-tests
>     btrfs qgroup create 1/5 /mnt/btrfs-progs-tests
>     btrfs qgroup create 2/5 /mnt/btrfs-progs-tests
>     btrfs qgroup assign 1/5 2/5 /mnt/btrfs-progs-tests
>     btrfs qgroup limit 1G 1/5 /mnt/btrfs-progs-tests
>     btrfs qgroup show /mnt/btrfs-progs-tests
>     btrfs qgroup show -p -c -r -e -F -f /mnt/btrfs-progs-tests
>     btrfs qgroup remove 1/5 2/5 /mnt/btrfs-progs-tests
>     btrfs qgroup destroy 2/5 /mnt/btrfs-progs-tests
>     btrfs qgroup destroy 1/5 /mnt/btrfs-progs-tests
>     btrfs quota disable /mnt/btrfs-progs-tests
>     btrfs replace start -f -B /dev/sda6 /dev/sda10 /mnt/btrfs-progs-tests
>     btrfs replace status /mnt/btrfs-progs-tests
>     btrfs replace start -f -B /dev/sda10 /dev/sda6 /mnt/btrfs-progs-tests
>     btrfs-convert /dev/sda6
>     btrfs-convert -r /dev/sda6
>     btrfs-convert -d /dev/sda6
>     btrfs-convert -i /dev/sda6
>     btrfs-convert -n /dev/sda6
>     btrfs-convert -N 4096 /dev/sda6
>     btrfs-convert -l test /dev/sda6
>     btrfs-convert -L /dev/sda6
>     btrfs-convert --no-progress /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -c 0 /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -c 9 /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -t 0 /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -t 1 /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -t 32 /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -w /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     mkfs.btrfs -f /dev/sda6
>     btrfs-image -w /dev/sda6 /tmp/btrfs_image.img
>     btrfs-image -r /tmp/btrfs_image.img /dev/sda6
>     btrfs-image -r -t 0 /tmp/btrfs_image.img /dev/sda6
>     btrfs-image -r -t 1 /tmp/btrfs_image.img /dev/sda6
>     btrfs-image -r -t 32 /tmp/btrfs_image.img /dev/sda6
>     btrfs-image -r -o /tmp/btrfs_image.img /dev/sda6
> 3: Manual check relation source by:
>     grep DUP *.c
>     Confirmed that all source are modified.
> 4: Use this raid type manually, do some operations in fs,
>     no error found in command and dmesg.
> 5: Combination of dup conversion with fsck
>     Confirmed OK with relative kernel patch titled:
>     [PATCH] btrfs: Support convert to -d dup for btrfs-convert
>
>     export TEST_DEV='/dev/vdc'
>     export TEST_DIR='/var/ltf/tester/mnt'
>
>     do_dup_test()
>     {
>         local m_from="$1"
>         local d_from="$2"
>         local m_to="$3"
>         local d_to="$4"
>
>         echo "Convert from -m $m_from -d $d_from to -m $m_to -d $d_to"
>
>         umount "$TEST_DIR" &>/dev/null
>         ./mkfs.btrfs -f -m "$m_from" -d "$d_from" "$TEST_DEV" >/dev/null || return 1
>         mount "$TEST_DEV" "$TEST_DIR" || return 1
>
>         cp -a /sbin/* "$TEST_DIR"
>
>         [[ "$m_from" != "$m_to" ]] && {
>             ./btrfs balance start -f -mconvert="$m_to" "$TEST_DIR" || return 1
>         }
>
>         [[ "$d_from" != "$d_to" ]] && {
>         local opt=()
>             [[ "$d_to" == single ]] && opt+=("-f")
>             ./btrfs balance start "${opt[@]}" -dconvert="$d_to" "$TEST_DIR" || return 1
>         }
>
>         umount "$TEST_DIR" || return 1
>         ./btrfsck "$TEST_DEV" || return 1
>         echo
>
>         return 0
>     }
>
>     test_all()
>     {
>         for m_from in single dup; do
>         for d_from in single dup; do
>         for m_to in single dup; do
>         for d_to in single dup; do
>         do_dup_test "$m_from" "$d_from" "$m_to" "$d_to" || return 1
>         done
>         done
>         done
>         done
>     }
>
>     test_all
>
> Changelog v2->v3:
> 1: Fix a compile warning of "unused variable"
> 2: Tested "convert to dup case" with kernel patch
>
> Changelog v1->v2:
> 1: Fix a bug in v1 which cause no dup chunk created, found by above
>     check command.
>
> Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Seeing as I forgot to reply to the previous version after testing it, 
I'll just reply here now that I've run this version through the same 
tests I did on the last one.

I threw everything I could think of at it, and nothing broke, so you can 
add:
Tested-by: Austin S. Hemmelgarn


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 3019 bytes --]

  reply	other threads:[~2015-11-19 21:14 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19  9:36 [PATCH v3] btrfs-progs: mkfs: Enable -d dup for single device Zhao Lei
2015-11-19 21:14 ` Austin S Hemmelgarn [this message]
2015-11-26 15:00   ` David Sterba

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=564E3BA8.9020909@gmail.com \
    --to=ahferroin7@gmail.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=zhaolei@cn.fujitsu.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