From: Ilya Dryomov Date: Fri, 1 Feb 2019 09:35:33 +0000 (+0100) Subject: qa: update krbd tests for zeroout X-Git-Tag: v14.1.0~217^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=04f5b343f9987f0cf67509c2a76ddf7ef46288e5;p=ceph-ci.git qa: update krbd tests for zeroout Discard no longer guarantees zeroing, use BLKZEROOUT and "fallocate -z" instead (blkdiscard(8) in xenial doesn't support -z). Signed-off-by: Ilya Dryomov --- diff --git a/qa/rbd/krbd_whole_object_discard.t b/qa/rbd/krbd_whole_object_discard.t deleted file mode 100644 index f5276074fcb..00000000000 --- a/qa/rbd/krbd_whole_object_discard.t +++ /dev/null @@ -1,143 +0,0 @@ - - $ get_block_name_prefix() { - > rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']" - > } - - $ rbd create --size 200M img - $ DEV=$(sudo rbd map img) - $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null - $ sudo rbd unmap $DEV - $ rbd snap create img@snap - $ rbd snap protect img@snap - -cloneimg1: -1 object in an object set, 4M -25 full object sets -25 objects in total - - $ rbd clone img@snap cloneimg1 - $ DEV=$(sudo rbd map cloneimg1) - $ hexdump $DEV - 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ blkdiscard -l 100M $DEV - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - $ DEV=$(sudo rbd map cloneimg1) - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - -cloneimg2: -7 objects in an object set, 28M -3 full object sets -min((100M % 28M) / 512K, 7) = 7 objects in the last object set -28 objects in total - - $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2 - $ DEV=$(sudo rbd map cloneimg2) - $ hexdump $DEV - 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ blkdiscard -l 100M $DEV - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - $ DEV=$(sudo rbd map cloneimg2) - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - -cloneimg3: -23 objects in an object set, 92M -1 full object set -min((100M % 92M) / 512K, 23) = 16 objects in the last object set -39 objects in total - - $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3 - $ DEV=$(sudo rbd map cloneimg3) - $ hexdump $DEV - 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ blkdiscard -l 100M $DEV - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - $ DEV=$(sudo rbd map cloneimg3) - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - -cloneimg4: -65 objects in an object set, 260M -0 full object sets -min((100M % 260M) / 512K, 65) = 65 objects in the last object set -65 objects in total - - $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4 - $ DEV=$(sudo rbd map cloneimg4) - $ hexdump $DEV - 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ blkdiscard -l 100M $DEV - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - $ DEV=$(sudo rbd map cloneimg4) - $ hexdump $DEV - 0000000 0000 0000 0000 0000 0000 0000 0000 0000 - * - 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd - * - c800000 - $ sudo rbd unmap $DEV - - $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1) - 25 - $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2) - 28 - $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3) - 39 - $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4) - 65 - - $ rbd rm --no-progress cloneimg4 - $ rbd rm --no-progress cloneimg3 - $ rbd rm --no-progress cloneimg2 - $ rbd rm --no-progress cloneimg1 - $ rbd snap unprotect img@snap - $ rbd snap rm --no-progress img@snap - $ rbd rm --no-progress img diff --git a/qa/rbd/krbd_whole_object_zeroout.t b/qa/rbd/krbd_whole_object_zeroout.t new file mode 100644 index 00000000000..3530f93e600 --- /dev/null +++ b/qa/rbd/krbd_whole_object_zeroout.t @@ -0,0 +1,143 @@ + + $ get_block_name_prefix() { + > rbd info --format=json $1 | python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix']" + > } + + $ rbd create --size 200M img + $ DEV=$(sudo rbd map img) + $ xfs_io -c 'pwrite -b 4M 0 200M' $DEV >/dev/null + $ sudo rbd unmap $DEV + $ rbd snap create img@snap + $ rbd snap protect img@snap + +cloneimg1: +1 object in an object set, 4M +25 full object sets +25 objects in total + + $ rbd clone img@snap cloneimg1 + $ DEV=$(sudo rbd map cloneimg1) + $ hexdump $DEV + 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ fallocate -z -l 100M $DEV + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + $ DEV=$(sudo rbd map cloneimg1) + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + +cloneimg2: +7 objects in an object set, 28M +3 full object sets +min((100M % 28M) / 512K, 7) = 7 objects in the last object set +28 objects in total + + $ rbd clone --stripe-unit 512K --stripe-count 7 img@snap cloneimg2 + $ DEV=$(sudo rbd map cloneimg2) + $ hexdump $DEV + 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ fallocate -z -l 100M $DEV + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + $ DEV=$(sudo rbd map cloneimg2) + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + +cloneimg3: +23 objects in an object set, 92M +1 full object set +min((100M % 92M) / 512K, 23) = 16 objects in the last object set +39 objects in total + + $ rbd clone --stripe-unit 512K --stripe-count 23 img@snap cloneimg3 + $ DEV=$(sudo rbd map cloneimg3) + $ hexdump $DEV + 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ fallocate -z -l 100M $DEV + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + $ DEV=$(sudo rbd map cloneimg3) + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + +cloneimg4: +65 objects in an object set, 260M +0 full object sets +min((100M % 260M) / 512K, 65) = 65 objects in the last object set +65 objects in total + + $ rbd clone --stripe-unit 512K --stripe-count 65 img@snap cloneimg4 + $ DEV=$(sudo rbd map cloneimg4) + $ hexdump $DEV + 0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ fallocate -z -l 100M $DEV + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + $ DEV=$(sudo rbd map cloneimg4) + $ hexdump $DEV + 0000000 0000 0000 0000 0000 0000 0000 0000 0000 + * + 6400000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd + * + c800000 + $ sudo rbd unmap $DEV + + $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg1) + 25 + $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg2) + 28 + $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg3) + 39 + $ rados -p rbd ls | grep -c $(get_block_name_prefix cloneimg4) + 65 + + $ rbd rm --no-progress cloneimg4 + $ rbd rm --no-progress cloneimg3 + $ rbd rm --no-progress cloneimg2 + $ rbd rm --no-progress cloneimg1 + $ rbd snap unprotect img@snap + $ rbd snap rm --no-progress img@snap + $ rbd rm --no-progress img diff --git a/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml b/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml deleted file mode 100644 index 9c558a3cd2a..00000000000 --- a/qa/suites/krbd/basic/tasks/krbd_whole_object_discard.yaml +++ /dev/null @@ -1,5 +0,0 @@ -tasks: -- cram: - clients: - client.0: - - qa/rbd/krbd_whole_object_discard.t diff --git a/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml b/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml new file mode 100644 index 00000000000..3b0ff8d1efb --- /dev/null +++ b/qa/suites/krbd/basic/tasks/krbd_whole_object_zeroout.yaml @@ -0,0 +1,5 @@ +tasks: +- cram: + clients: + client.0: + - qa/rbd/krbd_whole_object_zeroout.t diff --git a/src/test/librbd/fsx.cc b/src/test/librbd/fsx.cc index cc95976659b..e0b40937d31 100644 --- a/src/test/librbd/fsx.cc +++ b/src/test/librbd/fsx.cc @@ -1090,7 +1090,7 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len) int ret; /* - * BLKDISCARD goes straight to disk and doesn't do anything + * BLKZEROOUT goes straight to disk and doesn't do anything * about dirty buffers. This means we need to flush so that * * write 0..3M @@ -1104,19 +1104,22 @@ krbd_discard(struct rbd_ctx *ctx, uint64_t off, uint64_t len) * * returns "data 0000 data" rather than "data data data" in * case 1..2M was cached. + * + * Note: These cache coherency issues are supposed to be fixed + * in recent kernels. */ ret = __krbd_flush(ctx, true); if (ret < 0) return ret; /* - * off and len must be 512-byte aligned, otherwise BLKDISCARD + * off and len must be 512-byte aligned, otherwise BLKZEROOUT * will fail with -EINVAL. This means that -K (enable krbd * mode) requires -h 512 or similar. */ - if (ioctl(ctx->krbd_fd, BLKDISCARD, &range) < 0) { + if (ioctl(ctx->krbd_fd, BLKZEROOUT, &range) < 0) { ret = -errno; - prt("BLKDISCARD(%llu, %llu) failed\n", off, len); + prt("BLKZEROOUT(%llu, %llu) failed\n", off, len); return ret; }