128c4992aSVladimir Sementsov-Ogievskiy#!/usr/bin/env python3 228c4992aSVladimir Sementsov-Ogievskiy# 328c4992aSVladimir Sementsov-Ogievskiy# Benchmark example 428c4992aSVladimir Sementsov-Ogievskiy# 528c4992aSVladimir Sementsov-Ogievskiy# Copyright (c) 2019 Virtuozzo International GmbH. 628c4992aSVladimir Sementsov-Ogievskiy# 728c4992aSVladimir Sementsov-Ogievskiy# This program is free software; you can redistribute it and/or modify 828c4992aSVladimir Sementsov-Ogievskiy# it under the terms of the GNU General Public License as published by 928c4992aSVladimir Sementsov-Ogievskiy# the Free Software Foundation; either version 2 of the License, or 1028c4992aSVladimir Sementsov-Ogievskiy# (at your option) any later version. 1128c4992aSVladimir Sementsov-Ogievskiy# 1228c4992aSVladimir Sementsov-Ogievskiy# This program is distributed in the hope that it will be useful, 1328c4992aSVladimir Sementsov-Ogievskiy# but WITHOUT ANY WARRANTY; without even the implied warranty of 1428c4992aSVladimir Sementsov-Ogievskiy# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1528c4992aSVladimir Sementsov-Ogievskiy# GNU General Public License for more details. 1628c4992aSVladimir Sementsov-Ogievskiy# 1728c4992aSVladimir Sementsov-Ogievskiy# You should have received a copy of the GNU General Public License 1828c4992aSVladimir Sementsov-Ogievskiy# along with this program. If not, see <http://www.gnu.org/licenses/>. 1928c4992aSVladimir Sementsov-Ogievskiy# 2028c4992aSVladimir Sementsov-Ogievskiy 2128c4992aSVladimir Sementsov-Ogievskiyimport simplebench 228e979febSVladimir Sementsov-Ogievskiyfrom results_to_text import results_to_text 2328c4992aSVladimir Sementsov-Ogievskiyfrom bench_block_job import bench_block_copy, drv_file, drv_nbd 2428c4992aSVladimir Sementsov-Ogievskiy 2528c4992aSVladimir Sementsov-Ogievskiy 2628c4992aSVladimir Sementsov-Ogievskiydef bench_func(env, case): 2728c4992aSVladimir Sementsov-Ogievskiy """ Handle one "cell" of benchmarking table. """ 28*9ebfc5a5SStefan Weil return bench_block_copy(env['qemu_binary'], env['cmd'], {}, 2928c4992aSVladimir Sementsov-Ogievskiy case['source'], case['target']) 3028c4992aSVladimir Sementsov-Ogievskiy 3128c4992aSVladimir Sementsov-Ogievskiy 3228c4992aSVladimir Sementsov-Ogievskiy# You may set the following five variables to correct values, to turn this 3328c4992aSVladimir Sementsov-Ogievskiy# example to real benchmark. 3428c4992aSVladimir Sementsov-Ogievskiyssd_source = '/path-to-raw-source-image-at-ssd' 3528c4992aSVladimir Sementsov-Ogievskiyssd_target = '/path-to-raw-target-image-at-ssd' 3628c4992aSVladimir Sementsov-Ogievskiyhdd_target = '/path-to-raw-source-image-at-hdd' 3728c4992aSVladimir Sementsov-Ogievskiynbd_ip = 'nbd-ip-addr' 3828c4992aSVladimir Sementsov-Ogievskiynbd_port = 'nbd-port-number' 3928c4992aSVladimir Sementsov-Ogievskiy 4028c4992aSVladimir Sementsov-Ogievskiy# Test-cases are "rows" in benchmark resulting table, 'id' is a caption for 4128c4992aSVladimir Sementsov-Ogievskiy# the row, other fields are handled by bench_func. 4228c4992aSVladimir Sementsov-Ogievskiytest_cases = [ 4328c4992aSVladimir Sementsov-Ogievskiy { 4428c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> ssd', 4528c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 4628c4992aSVladimir Sementsov-Ogievskiy 'target': drv_file(ssd_target) 4728c4992aSVladimir Sementsov-Ogievskiy }, 4828c4992aSVladimir Sementsov-Ogievskiy { 4928c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> hdd', 5028c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 5128c4992aSVladimir Sementsov-Ogievskiy 'target': drv_file(hdd_target) 5228c4992aSVladimir Sementsov-Ogievskiy }, 5328c4992aSVladimir Sementsov-Ogievskiy { 5428c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> nbd', 5528c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 5628c4992aSVladimir Sementsov-Ogievskiy 'target': drv_nbd(nbd_ip, nbd_port) 5728c4992aSVladimir Sementsov-Ogievskiy }, 5828c4992aSVladimir Sementsov-Ogievskiy] 5928c4992aSVladimir Sementsov-Ogievskiy 6028c4992aSVladimir Sementsov-Ogievskiy# Test-envs are "columns" in benchmark resulting table, 'id is a caption for 6128c4992aSVladimir Sementsov-Ogievskiy# the column, other fields are handled by bench_func. 6228c4992aSVladimir Sementsov-Ogievskiytest_envs = [ 6328c4992aSVladimir Sementsov-Ogievskiy { 6428c4992aSVladimir Sementsov-Ogievskiy 'id': 'backup-1', 6528c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-backup', 6628c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-1' 6728c4992aSVladimir Sementsov-Ogievskiy }, 6828c4992aSVladimir Sementsov-Ogievskiy { 6928c4992aSVladimir Sementsov-Ogievskiy 'id': 'backup-2', 7028c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-backup', 7128c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-2' 7228c4992aSVladimir Sementsov-Ogievskiy }, 7328c4992aSVladimir Sementsov-Ogievskiy { 7428c4992aSVladimir Sementsov-Ogievskiy 'id': 'mirror', 7528c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-mirror', 7628c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-1' 7728c4992aSVladimir Sementsov-Ogievskiy } 7828c4992aSVladimir Sementsov-Ogievskiy] 7928c4992aSVladimir Sementsov-Ogievskiy 8028c4992aSVladimir Sementsov-Ogievskiyresult = simplebench.bench(bench_func, test_envs, test_cases, count=3) 818e979febSVladimir Sementsov-Ogievskiyprint(results_to_text(result)) 82