1# 2# Migration test scenario parameter description 3# 4# Copyright (c) 2016 Red Hat, Inc. 5# 6# This library is free software; you can redistribute it and/or 7# modify it under the terms of the GNU Lesser General Public 8# License as published by the Free Software Foundation; either 9# version 2.1 of the License, or (at your option) any later version. 10# 11# This library is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14# Lesser General Public License for more details. 15# 16# You should have received a copy of the GNU Lesser General Public 17# License along with this library; if not, see <http://www.gnu.org/licenses/>. 18# 19 20 21class Scenario(object): 22 23 def __init__(self, name, 24 downtime=500, 25 bandwidth=125000, # 1000 gig-e, effectively unlimited 26 max_iters=30, 27 max_time=300, 28 pause=False, pause_iters=5, 29 post_copy=False, post_copy_iters=5, 30 auto_converge=False, auto_converge_step=10, 31 compression_mt=False, compression_mt_threads=1, 32 compression_xbzrle=False, compression_xbzrle_cache=10): 33 34 self._name = name 35 36 # General migration tunables 37 self._downtime = downtime # milliseconds 38 self._bandwidth = bandwidth # MiB per second 39 self._max_iters = max_iters 40 self._max_time = max_time # seconds 41 42 43 # Strategies for ensuring completion 44 self._pause = pause 45 self._pause_iters = pause_iters 46 47 self._post_copy = post_copy 48 self._post_copy_iters = post_copy_iters 49 50 self._auto_converge = auto_converge 51 self._auto_converge_step = auto_converge_step # percentage CPU time 52 53 self._compression_mt = compression_mt 54 self._compression_mt_threads = compression_mt_threads 55 56 self._compression_xbzrle = compression_xbzrle 57 self._compression_xbzrle_cache = compression_xbzrle_cache # percentage of guest RAM 58 59 def serialize(self): 60 return { 61 "name": self._name, 62 "downtime": self._downtime, 63 "bandwidth": self._bandwidth, 64 "max_iters": self._max_iters, 65 "max_time": self._max_time, 66 "pause": self._pause, 67 "pause_iters": self._pause_iters, 68 "post_copy": self._post_copy, 69 "post_copy_iters": self._post_copy_iters, 70 "auto_converge": self._auto_converge, 71 "auto_converge_step": self._auto_converge_step, 72 "compression_mt": self._compression_mt, 73 "compression_mt_threads": self._compression_mt_threads, 74 "compression_xbzrle": self._compression_xbzrle, 75 "compression_xbzrle_cache": self._compression_xbzrle_cache, 76 } 77 78 @classmethod 79 def deserialize(cls, data): 80 return cls( 81 data["name"], 82 data["downtime"], 83 data["bandwidth"], 84 data["max_iters"], 85 data["max_time"], 86 data["pause"], 87 data["pause_iters"], 88 data["post_copy"], 89 data["post_copy_iters"], 90 data["auto_converge"], 91 data["auto_converge_step"], 92 data["compression_mt"], 93 data["compression_mt_threads"], 94 data["compression_xbzrle"], 95 data["compression_xbzrle_cache"]) 96