xref: /qemu/tests/migration-stress/guestperf/scenario.py (revision 45f34156e4d9c3f4215402b34d7da32f00073066)
1409437e1SDaniel P. Berrange#
2409437e1SDaniel P. Berrange# Migration test scenario parameter description
3409437e1SDaniel P. Berrange#
4409437e1SDaniel P. Berrange# Copyright (c) 2016 Red Hat, Inc.
5409437e1SDaniel P. Berrange#
6409437e1SDaniel P. Berrange# This library is free software; you can redistribute it and/or
7409437e1SDaniel P. Berrange# modify it under the terms of the GNU Lesser General Public
8409437e1SDaniel P. Berrange# License as published by the Free Software Foundation; either
93a645d36SGan Qixin# version 2.1 of the License, or (at your option) any later version.
10409437e1SDaniel P. Berrange#
11409437e1SDaniel P. Berrange# This library is distributed in the hope that it will be useful,
12409437e1SDaniel P. Berrange# but WITHOUT ANY WARRANTY; without even the implied warranty of
13409437e1SDaniel P. Berrange# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14409437e1SDaniel P. Berrange# Lesser General Public License for more details.
15409437e1SDaniel P. Berrange#
16409437e1SDaniel P. Berrange# You should have received a copy of the GNU Lesser General Public
17409437e1SDaniel P. Berrange# License along with this library; if not, see <http://www.gnu.org/licenses/>.
18409437e1SDaniel P. Berrange#
19409437e1SDaniel P. Berrange
20409437e1SDaniel P. Berrange
21409437e1SDaniel P. Berrangeclass Scenario(object):
22409437e1SDaniel P. Berrange
23409437e1SDaniel P. Berrange    def __init__(self, name,
24409437e1SDaniel P. Berrange                 downtime=500,
25409437e1SDaniel P. Berrange                 bandwidth=125000, # 1000 gig-e, effectively unlimited
26409437e1SDaniel P. Berrange                 max_iters=30,
27409437e1SDaniel P. Berrange                 max_time=300,
28409437e1SDaniel P. Berrange                 pause=False, pause_iters=5,
29409437e1SDaniel P. Berrange                 post_copy=False, post_copy_iters=5,
30409437e1SDaniel P. Berrange                 auto_converge=False, auto_converge_step=10,
31409437e1SDaniel P. Berrange                 compression_mt=False, compression_mt_threads=1,
321c3baa1aSHyman                 compression_xbzrle=False, compression_xbzrle_cache=10,
33*45f34156SHyman Huang                 multifd=False, multifd_channels=2, multifd_compression="",
3422b7cb2cSHyman Huang                 dirty_limit=False, x_vcpu_dirty_limit_period=500,
3522b7cb2cSHyman Huang                 vcpu_dirty_limit=1):
36409437e1SDaniel P. Berrange
37409437e1SDaniel P. Berrange        self._name = name
38409437e1SDaniel P. Berrange
39409437e1SDaniel P. Berrange        # General migration tunables
40409437e1SDaniel P. Berrange        self._downtime = downtime  # milliseconds
41409437e1SDaniel P. Berrange        self._bandwidth = bandwidth # MiB per second
42409437e1SDaniel P. Berrange        self._max_iters = max_iters
43409437e1SDaniel P. Berrange        self._max_time = max_time # seconds
44409437e1SDaniel P. Berrange
45409437e1SDaniel P. Berrange
46409437e1SDaniel P. Berrange        # Strategies for ensuring completion
47409437e1SDaniel P. Berrange        self._pause = pause
48409437e1SDaniel P. Berrange        self._pause_iters = pause_iters
49409437e1SDaniel P. Berrange
50409437e1SDaniel P. Berrange        self._post_copy = post_copy
51409437e1SDaniel P. Berrange        self._post_copy_iters = post_copy_iters
52409437e1SDaniel P. Berrange
53409437e1SDaniel P. Berrange        self._auto_converge = auto_converge
54409437e1SDaniel P. Berrange        self._auto_converge_step = auto_converge_step # percentage CPU time
55409437e1SDaniel P. Berrange
56409437e1SDaniel P. Berrange        self._compression_mt = compression_mt
57409437e1SDaniel P. Berrange        self._compression_mt_threads = compression_mt_threads
58409437e1SDaniel P. Berrange
59409437e1SDaniel P. Berrange        self._compression_xbzrle = compression_xbzrle
60409437e1SDaniel P. Berrange        self._compression_xbzrle_cache = compression_xbzrle_cache # percentage of guest RAM
61409437e1SDaniel P. Berrange
621c3baa1aSHyman        self._multifd = multifd
631c3baa1aSHyman        self._multifd_channels = multifd_channels
64*45f34156SHyman Huang        self._multifd_compression = multifd_compression
651c3baa1aSHyman
6622b7cb2cSHyman Huang        self._dirty_limit = dirty_limit
6722b7cb2cSHyman Huang        self._x_vcpu_dirty_limit_period = x_vcpu_dirty_limit_period
6822b7cb2cSHyman Huang        self._vcpu_dirty_limit = vcpu_dirty_limit
6922b7cb2cSHyman Huang
70409437e1SDaniel P. Berrange    def serialize(self):
71409437e1SDaniel P. Berrange        return {
72409437e1SDaniel P. Berrange            "name": self._name,
73409437e1SDaniel P. Berrange            "downtime": self._downtime,
74409437e1SDaniel P. Berrange            "bandwidth": self._bandwidth,
75409437e1SDaniel P. Berrange            "max_iters": self._max_iters,
76409437e1SDaniel P. Berrange            "max_time": self._max_time,
77409437e1SDaniel P. Berrange            "pause": self._pause,
78409437e1SDaniel P. Berrange            "pause_iters": self._pause_iters,
79409437e1SDaniel P. Berrange            "post_copy": self._post_copy,
80409437e1SDaniel P. Berrange            "post_copy_iters": self._post_copy_iters,
81409437e1SDaniel P. Berrange            "auto_converge": self._auto_converge,
82409437e1SDaniel P. Berrange            "auto_converge_step": self._auto_converge_step,
83409437e1SDaniel P. Berrange            "compression_mt": self._compression_mt,
84409437e1SDaniel P. Berrange            "compression_mt_threads": self._compression_mt_threads,
85409437e1SDaniel P. Berrange            "compression_xbzrle": self._compression_xbzrle,
86409437e1SDaniel P. Berrange            "compression_xbzrle_cache": self._compression_xbzrle_cache,
871c3baa1aSHyman            "multifd": self._multifd,
881c3baa1aSHyman            "multifd_channels": self._multifd_channels,
89*45f34156SHyman Huang            "multifd_compression": self._multifd_compression,
9022b7cb2cSHyman Huang            "dirty_limit": self._dirty_limit,
9122b7cb2cSHyman Huang            "x_vcpu_dirty_limit_period": self._x_vcpu_dirty_limit_period,
9222b7cb2cSHyman Huang            "vcpu_dirty_limit": self._vcpu_dirty_limit,
93409437e1SDaniel P. Berrange        }
94409437e1SDaniel P. Berrange
95409437e1SDaniel P. Berrange    @classmethod
96409437e1SDaniel P. Berrange    def deserialize(cls, data):
97409437e1SDaniel P. Berrange        return cls(
98409437e1SDaniel P. Berrange            data["name"],
99409437e1SDaniel P. Berrange            data["downtime"],
100409437e1SDaniel P. Berrange            data["bandwidth"],
101409437e1SDaniel P. Berrange            data["max_iters"],
102409437e1SDaniel P. Berrange            data["max_time"],
103409437e1SDaniel P. Berrange            data["pause"],
104409437e1SDaniel P. Berrange            data["pause_iters"],
105409437e1SDaniel P. Berrange            data["post_copy"],
106409437e1SDaniel P. Berrange            data["post_copy_iters"],
107409437e1SDaniel P. Berrange            data["auto_converge"],
108409437e1SDaniel P. Berrange            data["auto_converge_step"],
109409437e1SDaniel P. Berrange            data["compression_mt"],
110409437e1SDaniel P. Berrange            data["compression_mt_threads"],
111409437e1SDaniel P. Berrange            data["compression_xbzrle"],
1121c3baa1aSHyman            data["compression_xbzrle_cache"],
1131c3baa1aSHyman            data["multifd"],
114*45f34156SHyman Huang            data["multifd_channels"],
115*45f34156SHyman Huang            data["multifd_compression"])
116