xref: /openbmc/qemu/tests/migration-stress/guestperf/scenario.py (revision 9af3d9a931156142199c61518937506bfa5475f1)
1212c1933SFabiano Rosas#
2212c1933SFabiano Rosas# Migration test scenario parameter description
3212c1933SFabiano Rosas#
4212c1933SFabiano Rosas# Copyright (c) 2016 Red Hat, Inc.
5212c1933SFabiano Rosas#
6212c1933SFabiano Rosas# This library is free software; you can redistribute it and/or
7212c1933SFabiano Rosas# modify it under the terms of the GNU Lesser General Public
8212c1933SFabiano Rosas# License as published by the Free Software Foundation; either
9212c1933SFabiano Rosas# version 2.1 of the License, or (at your option) any later version.
10212c1933SFabiano Rosas#
11212c1933SFabiano Rosas# This library is distributed in the hope that it will be useful,
12212c1933SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of
13212c1933SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14212c1933SFabiano Rosas# Lesser General Public License for more details.
15212c1933SFabiano Rosas#
16212c1933SFabiano Rosas# You should have received a copy of the GNU Lesser General Public
17212c1933SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>.
18212c1933SFabiano Rosas#
19212c1933SFabiano Rosas
20212c1933SFabiano Rosas
21212c1933SFabiano Rosasclass Scenario(object):
22212c1933SFabiano Rosas
23212c1933SFabiano Rosas    def __init__(self, name,
24212c1933SFabiano Rosas                 downtime=500,
25212c1933SFabiano Rosas                 bandwidth=125000, # 1000 gig-e, effectively unlimited
26212c1933SFabiano Rosas                 max_iters=30,
27212c1933SFabiano Rosas                 max_time=300,
28212c1933SFabiano Rosas                 pause=False, pause_iters=5,
29212c1933SFabiano Rosas                 post_copy=False, post_copy_iters=5,
30212c1933SFabiano Rosas                 auto_converge=False, auto_converge_step=10,
31212c1933SFabiano Rosas                 compression_mt=False, compression_mt_threads=1,
32212c1933SFabiano Rosas                 compression_xbzrle=False, compression_xbzrle_cache=10,
33*45f34156SHyman Huang                 multifd=False, multifd_channels=2, multifd_compression="",
34212c1933SFabiano Rosas                 dirty_limit=False, x_vcpu_dirty_limit_period=500,
35212c1933SFabiano Rosas                 vcpu_dirty_limit=1):
36212c1933SFabiano Rosas
37212c1933SFabiano Rosas        self._name = name
38212c1933SFabiano Rosas
39212c1933SFabiano Rosas        # General migration tunables
40212c1933SFabiano Rosas        self._downtime = downtime  # milliseconds
41212c1933SFabiano Rosas        self._bandwidth = bandwidth # MiB per second
42212c1933SFabiano Rosas        self._max_iters = max_iters
43212c1933SFabiano Rosas        self._max_time = max_time # seconds
44212c1933SFabiano Rosas
45212c1933SFabiano Rosas
46212c1933SFabiano Rosas        # Strategies for ensuring completion
47212c1933SFabiano Rosas        self._pause = pause
48212c1933SFabiano Rosas        self._pause_iters = pause_iters
49212c1933SFabiano Rosas
50212c1933SFabiano Rosas        self._post_copy = post_copy
51212c1933SFabiano Rosas        self._post_copy_iters = post_copy_iters
52212c1933SFabiano Rosas
53212c1933SFabiano Rosas        self._auto_converge = auto_converge
54212c1933SFabiano Rosas        self._auto_converge_step = auto_converge_step # percentage CPU time
55212c1933SFabiano Rosas
56212c1933SFabiano Rosas        self._compression_mt = compression_mt
57212c1933SFabiano Rosas        self._compression_mt_threads = compression_mt_threads
58212c1933SFabiano Rosas
59212c1933SFabiano Rosas        self._compression_xbzrle = compression_xbzrle
60212c1933SFabiano Rosas        self._compression_xbzrle_cache = compression_xbzrle_cache # percentage of guest RAM
61212c1933SFabiano Rosas
62212c1933SFabiano Rosas        self._multifd = multifd
63212c1933SFabiano Rosas        self._multifd_channels = multifd_channels
64*45f34156SHyman Huang        self._multifd_compression = multifd_compression
65212c1933SFabiano Rosas
66212c1933SFabiano Rosas        self._dirty_limit = dirty_limit
67212c1933SFabiano Rosas        self._x_vcpu_dirty_limit_period = x_vcpu_dirty_limit_period
68212c1933SFabiano Rosas        self._vcpu_dirty_limit = vcpu_dirty_limit
69212c1933SFabiano Rosas
70212c1933SFabiano Rosas    def serialize(self):
71212c1933SFabiano Rosas        return {
72212c1933SFabiano Rosas            "name": self._name,
73212c1933SFabiano Rosas            "downtime": self._downtime,
74212c1933SFabiano Rosas            "bandwidth": self._bandwidth,
75212c1933SFabiano Rosas            "max_iters": self._max_iters,
76212c1933SFabiano Rosas            "max_time": self._max_time,
77212c1933SFabiano Rosas            "pause": self._pause,
78212c1933SFabiano Rosas            "pause_iters": self._pause_iters,
79212c1933SFabiano Rosas            "post_copy": self._post_copy,
80212c1933SFabiano Rosas            "post_copy_iters": self._post_copy_iters,
81212c1933SFabiano Rosas            "auto_converge": self._auto_converge,
82212c1933SFabiano Rosas            "auto_converge_step": self._auto_converge_step,
83212c1933SFabiano Rosas            "compression_mt": self._compression_mt,
84212c1933SFabiano Rosas            "compression_mt_threads": self._compression_mt_threads,
85212c1933SFabiano Rosas            "compression_xbzrle": self._compression_xbzrle,
86212c1933SFabiano Rosas            "compression_xbzrle_cache": self._compression_xbzrle_cache,
87212c1933SFabiano Rosas            "multifd": self._multifd,
88212c1933SFabiano Rosas            "multifd_channels": self._multifd_channels,
89*45f34156SHyman Huang            "multifd_compression": self._multifd_compression,
90212c1933SFabiano Rosas            "dirty_limit": self._dirty_limit,
91212c1933SFabiano Rosas            "x_vcpu_dirty_limit_period": self._x_vcpu_dirty_limit_period,
92212c1933SFabiano Rosas            "vcpu_dirty_limit": self._vcpu_dirty_limit,
93212c1933SFabiano Rosas        }
94212c1933SFabiano Rosas
95212c1933SFabiano Rosas    @classmethod
96212c1933SFabiano Rosas    def deserialize(cls, data):
97212c1933SFabiano Rosas        return cls(
98212c1933SFabiano Rosas            data["name"],
99212c1933SFabiano Rosas            data["downtime"],
100212c1933SFabiano Rosas            data["bandwidth"],
101212c1933SFabiano Rosas            data["max_iters"],
102212c1933SFabiano Rosas            data["max_time"],
103212c1933SFabiano Rosas            data["pause"],
104212c1933SFabiano Rosas            data["pause_iters"],
105212c1933SFabiano Rosas            data["post_copy"],
106212c1933SFabiano Rosas            data["post_copy_iters"],
107212c1933SFabiano Rosas            data["auto_converge"],
108212c1933SFabiano Rosas            data["auto_converge_step"],
109212c1933SFabiano Rosas            data["compression_mt"],
110212c1933SFabiano Rosas            data["compression_mt_threads"],
111212c1933SFabiano Rosas            data["compression_xbzrle"],
112212c1933SFabiano Rosas            data["compression_xbzrle_cache"],
113212c1933SFabiano Rosas            data["multifd"],
114*45f34156SHyman Huang            data["multifd_channels"],
115*45f34156SHyman Huang            data["multifd_compression"])
116