summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberto Garcia <berto@igalia.com>2016-10-17 18:46:03 +0300
committerMichael Roth <mdroth@linux.vnet.ibm.com>2016-11-02 18:19:00 -0500
commite389e44a351dfeb5ebff15662c08816a8f1c6324 (patch)
treeded28f62c7111a64813203a90518067704a14351
parentb1fdc9419322247fd7faaa8e795fa80176825459 (diff)
downloadqemu-e389e44a351dfeb5ebff15662c08816a8f1c6324.tar.gz
qemu-iotests: Test I/O in a single drive from a throttling group
iotest 093 contains a test that creates a throttling group with several drives and performs I/O in all of them. This patch adds a new test that creates a similar setup but only performs I/O in one of the drives at the same time. This is useful to test that the round robin algorithm is behaving properly in these scenarios, and is specifically written using the regression introduced in 27ccdd52598290f0f8b58be56e as an example. Signed-off-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> (cherry picked from commit a26ddb43963e77aeebc2a4f011d27b2d9c017f21) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rwxr-xr-xtests/qemu-iotests/09333
-rw-r--r--tests/qemu-iotests/093.out4
2 files changed, 30 insertions, 7 deletions
diff --git a/tests/qemu-iotests/093 b/tests/qemu-iotests/093
index ffcb271b36..2ed393a548 100755
--- a/tests/qemu-iotests/093
+++ b/tests/qemu-iotests/093
@@ -53,7 +53,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
result = self.vm.qmp("block_set_io_throttle", conv_keys=False, **params)
self.assert_qmp(result, 'return', {})
- def do_test_throttle(self, ndrives, seconds, params):
+ def do_test_throttle(self, ndrives, seconds, params, first_drive = 0):
def check_limit(limit, num):
# IO throttling algorithm is discrete, allow 10% error so the test
# is more robust
@@ -85,12 +85,14 @@ class ThrottleTestCase(iotests.QMPTestCase):
# Send I/O requests to all drives
for i in range(rd_nr):
for drive in range(0, ndrives):
- self.vm.hmp_qemu_io("drive%d" % drive, "aio_read %d %d" %
+ idx = first_drive + drive
+ self.vm.hmp_qemu_io("drive%d" % idx, "aio_read %d %d" %
(i * rq_size, rq_size))
for i in range(wr_nr):
for drive in range(0, ndrives):
- self.vm.hmp_qemu_io("drive%d" % drive, "aio_write %d %d" %
+ idx = first_drive + drive
+ self.vm.hmp_qemu_io("drive%d" % idx, "aio_write %d %d" %
(i * rq_size, rq_size))
# We'll store the I/O stats for each drive in these arrays
@@ -105,15 +107,17 @@ class ThrottleTestCase(iotests.QMPTestCase):
# Read the stats before advancing the clock
for i in range(0, ndrives):
+ idx = first_drive + i
start_rd_bytes[i], start_rd_iops[i], start_wr_bytes[i], \
- start_wr_iops[i] = self.blockstats('drive%d' % i)
+ start_wr_iops[i] = self.blockstats('drive%d' % idx)
self.vm.qtest("clock_step %d" % ns)
# Read the stats after advancing the clock
for i in range(0, ndrives):
+ idx = first_drive + i
end_rd_bytes[i], end_rd_iops[i], end_wr_bytes[i], \
- end_wr_iops[i] = self.blockstats('drive%d' % i)
+ end_wr_iops[i] = self.blockstats('drive%d' % idx)
# Check that the I/O is within the limits and evenly distributed
for i in range(0, ndrives):
@@ -129,6 +133,7 @@ class ThrottleTestCase(iotests.QMPTestCase):
self.assertTrue(check_limit(params['iops_rd'], rd_iops))
self.assertTrue(check_limit(params['iops_wr'], wr_iops))
+ # Connect N drives to a VM and test I/O in all of them
def test_all(self):
params = {"bps": 4096,
"bps_rd": 4096,
@@ -146,6 +151,24 @@ class ThrottleTestCase(iotests.QMPTestCase):
self.configure_throttle(ndrives, limits)
self.do_test_throttle(ndrives, 5, limits)
+ # Connect N drives to a VM and test I/O in just one of them a time
+ def test_one(self):
+ params = {"bps": 4096,
+ "bps_rd": 4096,
+ "bps_wr": 4096,
+ "iops": 10,
+ "iops_rd": 10,
+ "iops_wr": 10,
+ }
+ # Repeat the test for each one of the drives
+ for drive in range(0, self.max_drives):
+ # Pick each out of all possible params and test
+ for tk in params:
+ limits = dict([(k, 0) for k in params])
+ limits[tk] = params[tk] * self.max_drives
+ self.configure_throttle(self.max_drives, limits)
+ self.do_test_throttle(1, 5, limits, drive)
+
def test_burst(self):
params = {"bps": 4096,
"bps_rd": 4096,
diff --git a/tests/qemu-iotests/093.out b/tests/qemu-iotests/093.out
index 914e3737bd..2f7d3902f2 100644
--- a/tests/qemu-iotests/093.out
+++ b/tests/qemu-iotests/093.out
@@ -1,5 +1,5 @@
-.....
+.......
----------------------------------------------------------------------
-Ran 5 tests
+Ran 7 tests
OK