1*28c4992aSVladimir Sementsov-Ogievskiy#!/usr/bin/env python3 2*28c4992aSVladimir Sementsov-Ogievskiy# 3*28c4992aSVladimir Sementsov-Ogievskiy# Benchmark example 4*28c4992aSVladimir Sementsov-Ogievskiy# 5*28c4992aSVladimir Sementsov-Ogievskiy# Copyright (c) 2019 Virtuozzo International GmbH. 6*28c4992aSVladimir Sementsov-Ogievskiy# 7*28c4992aSVladimir Sementsov-Ogievskiy# This program is free software; you can redistribute it and/or modify 8*28c4992aSVladimir Sementsov-Ogievskiy# it under the terms of the GNU General Public License as published by 9*28c4992aSVladimir Sementsov-Ogievskiy# the Free Software Foundation; either version 2 of the License, or 10*28c4992aSVladimir Sementsov-Ogievskiy# (at your option) any later version. 11*28c4992aSVladimir Sementsov-Ogievskiy# 12*28c4992aSVladimir Sementsov-Ogievskiy# This program is distributed in the hope that it will be useful, 13*28c4992aSVladimir Sementsov-Ogievskiy# but WITHOUT ANY WARRANTY; without even the implied warranty of 14*28c4992aSVladimir Sementsov-Ogievskiy# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15*28c4992aSVladimir Sementsov-Ogievskiy# GNU General Public License for more details. 16*28c4992aSVladimir Sementsov-Ogievskiy# 17*28c4992aSVladimir Sementsov-Ogievskiy# You should have received a copy of the GNU General Public License 18*28c4992aSVladimir Sementsov-Ogievskiy# along with this program. If not, see <http://www.gnu.org/licenses/>. 19*28c4992aSVladimir Sementsov-Ogievskiy# 20*28c4992aSVladimir Sementsov-Ogievskiy 21*28c4992aSVladimir Sementsov-Ogievskiyimport simplebench 22*28c4992aSVladimir Sementsov-Ogievskiyfrom bench_block_job import bench_block_copy, drv_file, drv_nbd 23*28c4992aSVladimir Sementsov-Ogievskiy 24*28c4992aSVladimir Sementsov-Ogievskiy 25*28c4992aSVladimir Sementsov-Ogievskiydef bench_func(env, case): 26*28c4992aSVladimir Sementsov-Ogievskiy """ Handle one "cell" of benchmarking table. """ 27*28c4992aSVladimir Sementsov-Ogievskiy return bench_block_copy(env['qemu_binary'], env['cmd'], 28*28c4992aSVladimir Sementsov-Ogievskiy case['source'], case['target']) 29*28c4992aSVladimir Sementsov-Ogievskiy 30*28c4992aSVladimir Sementsov-Ogievskiy 31*28c4992aSVladimir Sementsov-Ogievskiy# You may set the following five variables to correct values, to turn this 32*28c4992aSVladimir Sementsov-Ogievskiy# example to real benchmark. 33*28c4992aSVladimir Sementsov-Ogievskiyssd_source = '/path-to-raw-source-image-at-ssd' 34*28c4992aSVladimir Sementsov-Ogievskiyssd_target = '/path-to-raw-target-image-at-ssd' 35*28c4992aSVladimir Sementsov-Ogievskiyhdd_target = '/path-to-raw-source-image-at-hdd' 36*28c4992aSVladimir Sementsov-Ogievskiynbd_ip = 'nbd-ip-addr' 37*28c4992aSVladimir Sementsov-Ogievskiynbd_port = 'nbd-port-number' 38*28c4992aSVladimir Sementsov-Ogievskiy 39*28c4992aSVladimir Sementsov-Ogievskiy# Test-cases are "rows" in benchmark resulting table, 'id' is a caption for 40*28c4992aSVladimir Sementsov-Ogievskiy# the row, other fields are handled by bench_func. 41*28c4992aSVladimir Sementsov-Ogievskiytest_cases = [ 42*28c4992aSVladimir Sementsov-Ogievskiy { 43*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> ssd', 44*28c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 45*28c4992aSVladimir Sementsov-Ogievskiy 'target': drv_file(ssd_target) 46*28c4992aSVladimir Sementsov-Ogievskiy }, 47*28c4992aSVladimir Sementsov-Ogievskiy { 48*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> hdd', 49*28c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 50*28c4992aSVladimir Sementsov-Ogievskiy 'target': drv_file(hdd_target) 51*28c4992aSVladimir Sementsov-Ogievskiy }, 52*28c4992aSVladimir Sementsov-Ogievskiy { 53*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'ssd -> nbd', 54*28c4992aSVladimir Sementsov-Ogievskiy 'source': drv_file(ssd_source), 55*28c4992aSVladimir Sementsov-Ogievskiy 'target': drv_nbd(nbd_ip, nbd_port) 56*28c4992aSVladimir Sementsov-Ogievskiy }, 57*28c4992aSVladimir Sementsov-Ogievskiy] 58*28c4992aSVladimir Sementsov-Ogievskiy 59*28c4992aSVladimir Sementsov-Ogievskiy# Test-envs are "columns" in benchmark resulting table, 'id is a caption for 60*28c4992aSVladimir Sementsov-Ogievskiy# the column, other fields are handled by bench_func. 61*28c4992aSVladimir Sementsov-Ogievskiytest_envs = [ 62*28c4992aSVladimir Sementsov-Ogievskiy { 63*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'backup-1', 64*28c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-backup', 65*28c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-1' 66*28c4992aSVladimir Sementsov-Ogievskiy }, 67*28c4992aSVladimir Sementsov-Ogievskiy { 68*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'backup-2', 69*28c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-backup', 70*28c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-2' 71*28c4992aSVladimir Sementsov-Ogievskiy }, 72*28c4992aSVladimir Sementsov-Ogievskiy { 73*28c4992aSVladimir Sementsov-Ogievskiy 'id': 'mirror', 74*28c4992aSVladimir Sementsov-Ogievskiy 'cmd': 'blockdev-mirror', 75*28c4992aSVladimir Sementsov-Ogievskiy 'qemu_binary': '/path-to-qemu-binary-1' 76*28c4992aSVladimir Sementsov-Ogievskiy } 77*28c4992aSVladimir Sementsov-Ogievskiy] 78*28c4992aSVladimir Sementsov-Ogievskiy 79*28c4992aSVladimir Sementsov-Ogievskiyresult = simplebench.bench(bench_func, test_envs, test_cases, count=3) 80*28c4992aSVladimir Sementsov-Ogievskiyprint(simplebench.ascii(result)) 81