All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: hch@lst.de
Cc: Kevin Wolf <kwolf@redhat.com>, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 1/3] qemu-iotests: Align test requests according to cluster size
Date: Mon, 28 Sep 2009 14:06:31 +0200	[thread overview]
Message-ID: <1254139592-4061-2-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1254139592-4061-1-git-send-email-kwolf@redhat.com>

Change the io_test and io_test2 functions to take the cluster size of the image
and the number of test requests to issue. Tests are changed to specify a
cluster size (usually 4k), but expected test results stay the same for now
(apart from qemu-img printing the cluster size now).

Based on a patch written by Christoph Hellwig.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 013            |    9 ++++---
 013.out        |    2 +-
 014            |    6 +++-
 014.out        |    2 +-
 019            |    1 +
 019.out        |    4 +-
 022            |    5 ++-
 022.out        |    2 +-
 common.pattern |   68 +++++++++++++++++++++++++++++++------------------------
 common.rc      |    4 +++
 10 files changed, 60 insertions(+), 43 deletions(-)

diff --git a/013 b/013
index 565071f..bd9fdef 100755
--- a/013
+++ b/013
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# qcow2 pattern test, empty and compressed image
+# qcow2 pattern test, empty and compressed image - 4k cluster patterns
 #
 # Copyright (C) 2009 Red Hat, Inc.
 #
@@ -45,6 +45,7 @@ _supported_os Linux
 
 TEST_OFFSETS="0 4294967296"
 TEST_OPS="writev read write readv"
+CLUSTER_SIZE=4096
 
 _make_test_img 6G
 
@@ -54,7 +55,7 @@ echo
 for offset in $TEST_OFFSETS; do
     echo "At offset $offset:"
     for op in $TEST_OPS; do
-        io_test $op $offset
+        io_test $op $offset $CLUSTER_SIZE 8
     done
     _check_test_img
 done
@@ -72,7 +73,7 @@ echo
 for offset in $TEST_OFFSETS; do
     echo "With offset $offset:"
     for op in read readv; do
-        io_test $op $offset
+        io_test $op $offset $CLUSTER_SIZE 8
     done
     _check_test_img
 done
@@ -85,7 +86,7 @@ for offset in $TEST_OFFSETS; do
     offset=$((offset + 512))
     echo "With offset $offset:"
     for op in $TEST_OPS; do
-        io_test $op $offset
+        io_test $op $offset $CLUSTER_SIZE 8
     done
     _check_test_img
 done
diff --git a/013.out b/013.out
index 01d306d..4072e8d 100644
--- a/013.out
+++ b/013.out
@@ -1,5 +1,5 @@
 QA output created by 013
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 cluster_size=4096 
 Testing empty image
 
 At offset 0:
diff --git a/014 b/014
index d7f50af..ee7bf21 100755
--- a/014
+++ b/014
@@ -1,6 +1,7 @@
 #!/bin/sh
 #
 # qcow2 pattern test, complex patterns including compression and snapshots
+# Using patterns for 4k cluster size.
 #
 #
 # Copyright (C) 2009 Red Hat, Inc.
@@ -46,13 +47,14 @@ _supported_os Linux
 
 TEST_OFFSETS="0 4294967296"
 TEST_OPS="writev read write readv"
+CLUSTER_SIZE=4096
 
 _make_test_img 6G
 
 echo "Testing empty image:"
 for offset in $TEST_OFFSETS; do
     echo test2: With offset $offset
-    io_test2 $offset
+    io_test2 $offset $CLUSTER_SIZE 256
     _check_test_img
 done
 
@@ -62,7 +64,7 @@ for i in `seq 1 3`; do
     for offset in $TEST_OFFSETS; do
         echo With snapshot test$i, offset $offset
         for op in $TEST_OPS; do
-            io_test $op $offset
+            io_test $op $offset $CLUSTER_SIZE 8
         done
         _check_test_img
     done
diff --git a/014.out b/014.out
index b2c0176..3fbc3a5 100644
--- a/014.out
+++ b/014.out
@@ -1,5 +1,5 @@
 QA output created by 014
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 cluster_size=4096 
 Testing empty image:
 test2: With offset 0
 === Clusters to be compressed [1]
diff --git a/019 b/019
index 0c84d2f..c3bf950 100755
--- a/019
+++ b/019
@@ -48,6 +48,7 @@ _supported_fmt qcow qcow2 vmdk
 _supported_os Linux
 
 TEST_OFFSETS="0 4294967296"
+CLUSTER_SIZE=65536
 
 _make_test_img 6G
 
diff --git a/019.out b/019.out
index 9ac1a21..ef82d02 100644
--- a/019.out
+++ b/019.out
@@ -1,5 +1,5 @@
 QA output created by 019
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 cluster_size=65536 
 Filling base image
 
 === IO: pattern 0
@@ -269,7 +269,7 @@ qemu-io> wrote 65536/65536 bytes at offset 4296081408
 qemu-io> No errors were found on the image.
 Creating test image with backing file
 
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' 
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file='TEST_DIR/t.IMGFMT.base' cluster_size=65536 
 Filling test image
 
 === IO: pattern 1
diff --git a/022 b/022
index ca5df99..ccf2319 100755
--- a/022
+++ b/022
@@ -46,6 +46,7 @@ _supported_fmt qcow2
 _supported_os Linux
 
 TEST_OFFSETS="10485760 4294967296"
+CLUSTER_SIZE="4096"
 
 _make_test_img 6G
 
@@ -54,8 +55,8 @@ echo
 
 for offset in $TEST_OFFSETS; do
     echo "At offset $offset:"
-    io_test "write -b" $offset
-    io_test "read -b" $offset
+    io_test "write -b" $offset $CLUSTER_SIZE 8
+    io_test "read -b" $offset $CLUSTER_SIZE 8
     _check_test_img
 done
 
diff --git a/022.out b/022.out
index 0100f67..d1a610d 100644
--- a/022.out
+++ b/022.out
@@ -1,5 +1,5 @@
 QA output created by 022
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 cluster_size=4096 
 Testing empty image
 
 At offset 10485760:
diff --git a/common.pattern b/common.pattern
index 08e1cda..ae28863 100644
--- a/common.pattern
+++ b/common.pattern
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 #
 # Copyright (C) 2009 Red Hat, Inc.
 #
@@ -63,69 +63,77 @@ function io_zero() {
 function io_test() {
     local op=$1
     local offset=$2
+    local cluster_size=$3
 
-    # Complete clusters (size = 4k)
-    io "$op" $offset 4096 4096 256
-    offset=$((offset + 256 * 4096))
+    local num_large=$4
+    local num_medium=$((num_large * num_large))
+    local num_small=$((4 * num_medium))
+
+    local half_cluster=$((cluster_size / 2))
+    local quarter_cluster=$((cluster_size / 4))
+    local l2_size=$((cluster_size * cluster_size / 8))
+
+    # Complete clusters
+    io "$op" $offset $cluster_size $cluster_size $num_small
+    offset=$((offset + num_small * $cluster_size))
 
     # From somewhere in the middle to the end of a cluster
-    io "$op" $((offset + 2048)) 2048 4096 256
-    offset=$((offset + 256 * 4096))
+    io "$op" $((offset + $half_cluster)) $half_cluster $cluster_size $num_small
+    offset=$((offset + num_small * $cluster_size))
 
     # From the start to somewhere in the middle of a cluster
-    io "$op" $offset 2048 4096 256
-    offset=$((offset + 256 * 4096))
+    io "$op" $offset $half_cluster $cluster_size $num_small
+    offset=$((offset + num_small * $cluster_size))
 
     # Completely misaligned (and small)
-    io "$op" $((offset + 1024)) 2048 4096 256
-    offset=$((offset + 256 * 4096))
+    io "$op" $((offset + $quarter_cluster)) $half_cluster $cluster_size $num_small
+    offset=$((offset + num_small * $cluster_size))
 
     # Spanning multiple clusters
-    io "$op" $((offset + 2048)) 8192 12288 64
-    offset=$((offset + 64 * 12288))
+    io "$op" $((offset + $half_cluster)) $((cluster_size * 2)) $((cluster_size * 3)) $num_medium
+    offset=$((offset + num_medium * 3 * $cluster_size))
 
     # Spanning multiple L2 tables
     # L2 table size: 512 clusters of 4k = 2M
-    io "$op" $((offset + 2048)) 4194304 4999680 8
-    offset=$((offset + 8 * 4999680))
-
-    if false; then
-        true
-    fi
+    io "$op" $((offset + $half_cluster)) $((2 * l2_size)) 4999680 $num_large
+    offset=$((offset + num_large * (2 * l2_size + 512 * 1573)))
 }
 
 function io_test2() {
     local orig_offset=$1
+    local cluster_size=$2
+    local num=$3
 
     # Pattern (repeat after 9 clusters):
-    # used - used - free - used - compressed - compressed - free - free - compressed
+    #	used - used - free - used - compressed - compressed -
+    #	free - free - compressed
 
     # Write the clusters to be compressed
     echo === Clusters to be compressed [1]
-    io_pattern writev $((offset + 4 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 4 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
     echo === Clusters to be compressed [2]
-    io_pattern writev $((offset + 5 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 5 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
     echo === Clusters to be compressed [3]
-    io_pattern writev $((offset + 8 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 8 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
 
     mv $TEST_IMG $TEST_IMG.orig
     $QEMU_IMG convert -f $IMGFMT -O $IMGFMT -c $TEST_IMG.orig $TEST_IMG
 
     # Write the used clusters
     echo === Used clusters [1]
-    io_pattern writev $((offset + 0 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 0 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
     echo === Used clusters [2]
-    io_pattern writev $((offset + 1 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 1 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
     echo === Used clusters [3]
-    io_pattern writev $((offset + 3 * 4096)) 4096 $((9 * 4096)) 256 165
+    io_pattern writev $((offset + 3 * $cluster_size)) $cluster_size $((9 * $cluster_size)) $num 165
 
     # Read them
     echo === Read used/compressed clusters
-    io_pattern readv $((offset + 0 * 4096)) $((2 * 4096)) $((9 * 4096)) 256 165
-    io_pattern readv $((offset + 3 * 4096)) $((3 * 4096)) $((9 * 4096)) 256 165
-    io_pattern readv $((offset + 8 * 4096)) $((1 * 4096)) $((9 * 4096)) 256 165
+    io_pattern readv $((offset + 0 * $cluster_size)) $((2 * $cluster_size)) $((9 * $cluster_size)) $num 165
+    io_pattern readv $((offset + 3 * $cluster_size)) $((3 * $cluster_size)) $((9 * $cluster_size)) $num 165
+    io_pattern readv $((offset + 8 * $cluster_size)) $((1 * $cluster_size)) $((9 * $cluster_size)) $num 165
 
     echo === Read zeros
-    io_zero readv $((offset + 2 * 4096)) $((1 * 4096)) $((9 * 4096)) 256
-    io_zero readv $((offset + 6 * 4096)) $((2 * 4096)) $((9 * 4096)) 256
+    io_zero readv $((offset + 2 * $cluster_size)) $((1 * $cluster_size)) $((9 * $cluster_size)) $num
+    io_zero readv $((offset + 6 * $cluster_size)) $((2 * $cluster_size)) $((9 * $cluster_size)) $num
 }
diff --git a/common.rc b/common.rc
index 6ef6b51..0a7ba00 100644
--- a/common.rc
+++ b/common.rc
@@ -55,6 +55,10 @@ _make_test_img()
     # at least one argument (the image size) needs to be added
     local extra_img_options=$*
 
+    if [ "$IMGFMT" = "qcow2" -a -n "$CLUSTER_SIZE" ]; then
+        extra_img_options="-o cluster_size=$CLUSTER_SIZE $extra_img_options"
+    fi
+
     # XXX(hch): have global image options?
     $QEMU_IMG create -f $IMGFMT $TEST_IMG $extra_img_options | \
     	sed -e "s#$TEST_DIR#TEST_DIR#g" | \
-- 
1.6.2.5

  reply	other threads:[~2009-09-28 12:07 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-28 12:06 [Qemu-devel] [PATCH 0/3] qemu-iotests: Variable cluster size Kevin Wolf
2009-09-28 12:06 ` Kevin Wolf [this message]
2009-09-28 12:06 ` [Qemu-devel] [PATCH 2/3] qemu-iotests: 019: Make cluster size dynamic Kevin Wolf
2009-09-28 12:13 ` [Qemu-devel] [PATCH 3/3] qemu-iotests: Tests on non-4k clusters Kevin Wolf
2009-10-01 17:47 ` [Qemu-devel] [PATCH 0/3] qemu-iotests: Variable cluster size Christoph Hellwig

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=1254139592-4061-2-git-send-email-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=hch@lst.de \
    --cc=qemu-devel@nongnu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.