diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2021-05-21 12:02:34 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2021-05-21 12:02:34 +0100 |
commit | 6c769690ac845fa62642a5f93b4e4bd906adab95 (patch) | |
tree | 39efec1a186c28786874160db4f27d7c75bfb1d7 /scripts/simplebench/bench_block_job.py | |
parent | da9076f323d1470c65634893aa2427987699d4f1 (diff) | |
parent | e34bd02694026722410b80cee02ab7f33f893e9b (diff) |
Merge remote-tracking branch 'remotes/vsementsov/tags/pull-simplebench-2021-05-04' into staging
scripts/simplebench improvements for 2021-05-04
# gpg: Signature made Tue 04 May 2021 09:45:15 BST
# gpg: using RSA key 8B9C26CDB2FD147C880E86A1561F24C1F19F79FB
# gpg: Good signature from "Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg: There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 8B9C 26CD B2FD 147C 880E 86A1 561F 24C1 F19F 79FB
* remotes/vsementsov/tags/pull-simplebench-2021-05-04:
MAINTAINERS: update Benchmark util: add git tree
simplebench/bench-backup: add --drop-caches argument
simplebench/bench-backup: add --count and --no-initial-run
simplebench/bench-backup: support qcow2 source files
simplebench/bench_block_job: handle error in BLOCK_JOB_COMPLETED
simplebench/bench-backup: add target-cache argument
simplebench/bench-backup: add --compressed option
simplebench: bench_one(): support count=1
simplebench: bench_one(): add slow_limit argument
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'scripts/simplebench/bench_block_job.py')
-rwxr-xr-x | scripts/simplebench/bench_block_job.py | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/scripts/simplebench/bench_block_job.py b/scripts/simplebench/bench_block_job.py index 7332845c1c..4f03c12169 100755 --- a/scripts/simplebench/bench_block_job.py +++ b/scripts/simplebench/bench_block_job.py @@ -21,6 +21,7 @@ import sys import os +import subprocess import socket import json @@ -69,6 +70,10 @@ def bench_block_job(cmd, cmd_args, qemu_args): vm.shutdown() return {'error': 'block-job failed: ' + str(e), 'vm-log': vm.get_log()} + if 'error' in e['data']: + vm.shutdown() + return {'error': 'block-job failed: ' + e['data']['error'], + 'vm-log': vm.get_log()} end_ms = e['timestamp']['seconds'] * 1000000 + \ e['timestamp']['microseconds'] finally: @@ -77,11 +82,34 @@ def bench_block_job(cmd, cmd_args, qemu_args): return {'seconds': (end_ms - start_ms) / 1000000.0} +def get_image_size(path): + out = subprocess.run(['qemu-img', 'info', '--out=json', path], + stdout=subprocess.PIPE, check=True).stdout + return json.loads(out)['virtual-size'] + + +def get_blockdev_size(obj): + img = obj['filename'] if 'filename' in obj else obj['file']['filename'] + return get_image_size(img) + + # Bench backup or mirror def bench_block_copy(qemu_binary, cmd, cmd_options, source, target): """Helper to run bench_block_job() for mirror or backup""" assert cmd in ('blockdev-backup', 'blockdev-mirror') + if target['driver'] == 'qcow2': + try: + os.remove(target['file']['filename']) + except OSError: + pass + + subprocess.run(['qemu-img', 'create', '-f', 'qcow2', + target['file']['filename'], + str(get_blockdev_size(source))], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, check=True) + source['node-name'] = 'source' target['node-name'] = 'target' @@ -96,9 +124,13 @@ def bench_block_copy(qemu_binary, cmd, cmd_options, source, target): '-blockdev', json.dumps(target)]) -def drv_file(filename): - return {'driver': 'file', 'filename': filename, - 'cache': {'direct': True}, 'aio': 'native'} +def drv_file(filename, o_direct=True): + node = {'driver': 'file', 'filename': filename} + if o_direct: + node['cache'] = {'direct': True} + node['aio'] = 'native' + + return node def drv_nbd(host, port): @@ -106,6 +138,10 @@ def drv_nbd(host, port): 'server': {'type': 'inet', 'host': host, 'port': port}} +def drv_qcow2(file): + return {'driver': 'qcow2', 'file': file} + + if __name__ == '__main__': import sys |