[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 2/3] scripts/simplebench: allow writing to non-empty image
From: |
Andrey Shinkevich |
Subject: |
[PATCH v3 2/3] scripts/simplebench: allow writing to non-empty image |
Date: |
Sun, 12 Jul 2020 20:17:13 +0300 |
Add 'empty_image' parameter to the function bench_write_req() and to
the test cases that will allow writing to the non-empty clusters of the
image if the 'empty_image' parameter set to False.
Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
scripts/simplebench/bench_write_req.py | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/scripts/simplebench/bench_write_req.py
b/scripts/simplebench/bench_write_req.py
index c61c8d2..ceb0ab6 100755
--- a/scripts/simplebench/bench_write_req.py
+++ b/scripts/simplebench/bench_write_req.py
@@ -29,7 +29,7 @@ def bench_func(env, case):
""" Handle one "cell" of benchmarking table. """
return bench_write_req(env['qemu_img'], env['image_name'],
case['block_size'], case['block_offset'],
- case['requests'])
+ case['requests'], case['empty_image'])
def qemu_img_pipe(*args):
@@ -45,7 +45,8 @@ def qemu_img_pipe(*args):
return subp.communicate()[0]
-def bench_write_req(qemu_img, image_name, block_size, block_offset, requests):
+def bench_write_req(qemu_img, image_name, block_size, block_offset, requests,
+ empty_image):
"""Benchmark write requests
The function creates a QCOW2 image with the given path/name and fills it
@@ -58,6 +59,7 @@ def bench_write_req(qemu_img, image_name, block_size,
block_offset, requests):
block_size -- size of a block to write to clusters
block_offset -- offset of the block in clusters
requests -- number of write requests per cluster
+ empty_image -- if not True, fills image with random data
Returns {'seconds': int} on success and {'error': str} on failure.
Return value is compatible with simplebench lib.
@@ -107,6 +109,15 @@ def bench_write_req(qemu_img, image_name, block_size,
block_offset, requests):
try:
qemu_img_pipe(*args_create)
+
+ if not empty_image:
+ dd = ['dd', 'if=/dev/urandom', f'of={image_name}',
+ f'bs={cluster_size}', f'seek={seek}',
+ f'count={dd_count}']
+ devnull = open('/dev/null', 'w')
+ subprocess.run(dd, stderr=devnull, stdout=devnull)
+ subprocess.run('sync')
+
except OSError as e:
os.remove(image_name)
return {'error': 'qemu_img create failed: ' + str(e)}
@@ -141,25 +152,29 @@ if __name__ == '__main__':
'id': '<simple case>',
'block_size': 0,
'block_offset': 0,
- 'requests': 10
+ 'requests': 10,
+ 'empty_image': True
},
{
'id': '<general case>',
'block_size': 4096,
'block_offset': 0,
- 'requests': 10
+ 'requests': 10,
+ 'empty_image': True
},
{
'id': '<cluster middle>',
'block_size': 4096,
'block_offset': 524288,
- 'requests': 10
+ 'requests': 10,
+ 'empty_image': True
},
{
'id': '<cluster overlap>',
'block_size': 524288,
'block_offset': 4096,
- 'requests': 2
+ 'requests': 2,
+ 'empty_image': True
},
]
--
1.8.3.1