xref: /qemu/scripts/simplebench/bench-example.py (revision 28c4992adf18f0da43d088f6dec7fa3e7730a032)
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