xref: /openbmc/qemu/tests/migration-stress/guestperf/progress.py (revision bdce9bc9179bd7b6f4e12c759dd3cd6794e26a6b)
1*212c1933SFabiano Rosas#
2*212c1933SFabiano Rosas# Migration test migration operation progress
3*212c1933SFabiano Rosas#
4*212c1933SFabiano Rosas# Copyright (c) 2016 Red Hat, Inc.
5*212c1933SFabiano Rosas#
6*212c1933SFabiano Rosas# This library is free software; you can redistribute it and/or
7*212c1933SFabiano Rosas# modify it under the terms of the GNU Lesser General Public
8*212c1933SFabiano Rosas# License as published by the Free Software Foundation; either
9*212c1933SFabiano Rosas# version 2.1 of the License, or (at your option) any later version.
10*212c1933SFabiano Rosas#
11*212c1933SFabiano Rosas# This library is distributed in the hope that it will be useful,
12*212c1933SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of
13*212c1933SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14*212c1933SFabiano Rosas# Lesser General Public License for more details.
15*212c1933SFabiano Rosas#
16*212c1933SFabiano Rosas# You should have received a copy of the GNU Lesser General Public
17*212c1933SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>.
18*212c1933SFabiano Rosas#
19*212c1933SFabiano Rosas
20*212c1933SFabiano Rosas
21*212c1933SFabiano Rosasclass ProgressStats(object):
22*212c1933SFabiano Rosas
23*212c1933SFabiano Rosas    def __init__(self,
24*212c1933SFabiano Rosas                 transferred_bytes,
25*212c1933SFabiano Rosas                 remaining_bytes,
26*212c1933SFabiano Rosas                 total_bytes,
27*212c1933SFabiano Rosas                 duplicate_pages,
28*212c1933SFabiano Rosas                 skipped_pages,
29*212c1933SFabiano Rosas                 normal_pages,
30*212c1933SFabiano Rosas                 normal_bytes,
31*212c1933SFabiano Rosas                 dirty_rate_pps,
32*212c1933SFabiano Rosas                 transfer_rate_mbs,
33*212c1933SFabiano Rosas                 iterations):
34*212c1933SFabiano Rosas        self._transferred_bytes = transferred_bytes
35*212c1933SFabiano Rosas        self._remaining_bytes = remaining_bytes
36*212c1933SFabiano Rosas        self._total_bytes = total_bytes
37*212c1933SFabiano Rosas        self._duplicate_pages = duplicate_pages
38*212c1933SFabiano Rosas        self._skipped_pages = skipped_pages
39*212c1933SFabiano Rosas        self._normal_pages = normal_pages
40*212c1933SFabiano Rosas        self._normal_bytes = normal_bytes
41*212c1933SFabiano Rosas        self._dirty_rate_pps = dirty_rate_pps
42*212c1933SFabiano Rosas        self._transfer_rate_mbs = transfer_rate_mbs
43*212c1933SFabiano Rosas        self._iterations = iterations
44*212c1933SFabiano Rosas
45*212c1933SFabiano Rosas    def serialize(self):
46*212c1933SFabiano Rosas        return {
47*212c1933SFabiano Rosas            "transferred_bytes": self._transferred_bytes,
48*212c1933SFabiano Rosas            "remaining_bytes": self._remaining_bytes,
49*212c1933SFabiano Rosas            "total_bytes": self._total_bytes,
50*212c1933SFabiano Rosas            "duplicate_pages": self._duplicate_pages,
51*212c1933SFabiano Rosas            "skipped_pages": self._skipped_pages,
52*212c1933SFabiano Rosas            "normal_pages": self._normal_pages,
53*212c1933SFabiano Rosas            "normal_bytes": self._normal_bytes,
54*212c1933SFabiano Rosas            "dirty_rate_pps": self._dirty_rate_pps,
55*212c1933SFabiano Rosas            "transfer_rate_mbs": self._transfer_rate_mbs,
56*212c1933SFabiano Rosas            "iterations": self._iterations,
57*212c1933SFabiano Rosas        }
58*212c1933SFabiano Rosas
59*212c1933SFabiano Rosas    @classmethod
60*212c1933SFabiano Rosas    def deserialize(cls, data):
61*212c1933SFabiano Rosas        return cls(
62*212c1933SFabiano Rosas            data["transferred_bytes"],
63*212c1933SFabiano Rosas            data["remaining_bytes"],
64*212c1933SFabiano Rosas            data["total_bytes"],
65*212c1933SFabiano Rosas            data["duplicate_pages"],
66*212c1933SFabiano Rosas            data["skipped_pages"],
67*212c1933SFabiano Rosas            data["normal_pages"],
68*212c1933SFabiano Rosas            data["normal_bytes"],
69*212c1933SFabiano Rosas            data["dirty_rate_pps"],
70*212c1933SFabiano Rosas            data["transfer_rate_mbs"],
71*212c1933SFabiano Rosas            data["iterations"])
72*212c1933SFabiano Rosas
73*212c1933SFabiano Rosas
74*212c1933SFabiano Rosasclass Progress(object):
75*212c1933SFabiano Rosas
76*212c1933SFabiano Rosas    def __init__(self,
77*212c1933SFabiano Rosas                 status,
78*212c1933SFabiano Rosas                 ram,
79*212c1933SFabiano Rosas                 now,
80*212c1933SFabiano Rosas                 duration,
81*212c1933SFabiano Rosas                 downtime,
82*212c1933SFabiano Rosas                 downtime_expected,
83*212c1933SFabiano Rosas                 setup_time,
84*212c1933SFabiano Rosas                 throttle_pcent,
85*212c1933SFabiano Rosas                 dirty_limit_throttle_time_per_round,
86*212c1933SFabiano Rosas                 dirty_limit_ring_full_time):
87*212c1933SFabiano Rosas
88*212c1933SFabiano Rosas        self._status = status
89*212c1933SFabiano Rosas        self._ram = ram
90*212c1933SFabiano Rosas        self._now = now
91*212c1933SFabiano Rosas        self._duration = duration
92*212c1933SFabiano Rosas        self._downtime = downtime
93*212c1933SFabiano Rosas        self._downtime_expected = downtime_expected
94*212c1933SFabiano Rosas        self._setup_time = setup_time
95*212c1933SFabiano Rosas        self._throttle_pcent = throttle_pcent
96*212c1933SFabiano Rosas        self._dirty_limit_throttle_time_per_round = \
97*212c1933SFabiano Rosas            dirty_limit_throttle_time_per_round
98*212c1933SFabiano Rosas        self._dirty_limit_ring_full_time = \
99*212c1933SFabiano Rosas            dirty_limit_ring_full_time
100*212c1933SFabiano Rosas
101*212c1933SFabiano Rosas    def serialize(self):
102*212c1933SFabiano Rosas        return {
103*212c1933SFabiano Rosas            "status": self._status,
104*212c1933SFabiano Rosas            "ram": self._ram.serialize(),
105*212c1933SFabiano Rosas            "now": self._now,
106*212c1933SFabiano Rosas            "duration": self._duration,
107*212c1933SFabiano Rosas            "downtime": self._downtime,
108*212c1933SFabiano Rosas            "downtime_expected": self._downtime_expected,
109*212c1933SFabiano Rosas            "setup_time": self._setup_time,
110*212c1933SFabiano Rosas            "throttle_pcent": self._throttle_pcent,
111*212c1933SFabiano Rosas            "dirty_limit_throttle_time_per_round":
112*212c1933SFabiano Rosas                self._dirty_limit_throttle_time_per_round,
113*212c1933SFabiano Rosas            "dirty_limit_ring_full_time":
114*212c1933SFabiano Rosas                self._dirty_limit_ring_full_time,
115*212c1933SFabiano Rosas        }
116*212c1933SFabiano Rosas
117*212c1933SFabiano Rosas    @classmethod
118*212c1933SFabiano Rosas    def deserialize(cls, data):
119*212c1933SFabiano Rosas        return cls(
120*212c1933SFabiano Rosas            data["status"],
121*212c1933SFabiano Rosas            ProgressStats.deserialize(data["ram"]),
122*212c1933SFabiano Rosas            data["now"],
123*212c1933SFabiano Rosas            data["duration"],
124*212c1933SFabiano Rosas            data["downtime"],
125*212c1933SFabiano Rosas            data["downtime_expected"],
126*212c1933SFabiano Rosas            data["setup_time"],
127*212c1933SFabiano Rosas            data["throttle_pcent"],
128*212c1933SFabiano Rosas            data["dirty_limit_throttle_time_per_round"],
129*212c1933SFabiano Rosas            data["dirty_limit_ring_full_time"])
130