mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
xend: Fix scheduler parameters of rebooted domain
When I changed the scheduler parameters of a domain with
xm sched-credit, the information of xm sched-credit was changed.
But as for the information of xm list, the values of the domain
configuration definition were kept.
And, then I rebooted the domain. The information of xm list was
not changed. But as for the information of xm sched-credit, the
values of the domain configuration definition were returned.
# xm create /xen/PVdomain.1 cpu_cap=150 cpu_weight=512
Using config file "/xen/PVdomain.1".
Started domain PVdomain.1
# xm sched-credit -d PVdomain.1
Name ID Weight Cap
PVdomain.1 1 512 150
# xm sched-credit -d PVdomain.1 -c 75 -w 384
# xm sched-credit -d PVdomain.1
Name ID Weight Cap
PVdomain.1 1 384 75
# xm list --long PVdomain.1 | grep cpu_
(cpu_weight 512)
(cpu_cap 150)
(cpu_time 29.353831745)
# xm reboot PVdomain.1
# xm sched-credit -d PVdomain.1
Name ID Weight Cap
PVdomain.1 2 512 150
# xm list --long PVdomain.1 | grep cpu_
(cpu_weight 512)
(cpu_cap 150)
(cpu_time 5.950247186)
If the scheduler parameters of the domain were changed with
xm sched-credit, I think that xm list should show the current
values about the scheduler parameters.
And, then if the domain is rebooted, I think that the rebooted
domain should keep the preceding values about the scheduler
parameters.
Signed-off-by: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
This commit is contained in:
1 parent
7ffb087b8c
commit
8cc22ae8d1
2 files changed
+19
-1
No files matched your search
@@ -1402,6 +1402,8 @@ class XendDomain:
|
||||
@type cap: int
|
||||
@rtype: 0
|
||||
"""
|
||||
set_weight = False
|
||||
set_cap = False
|
||||
dominfo = self.domain_lookup_nr(domid)
|
||||
if not dominfo:
|
||||
raise XendInvalidDomain(str(domid))
|
||||
@@ -1410,16 +1412,26 @@ class XendDomain:
|
||||
weight = int(0)
|
||||
elif weight < 1 or weight > 65535:
|
||||
raise XendError("weight is out of range")
|
||||
else:
|
||||
set_weight = True
|
||||
|
||||
if cap is None:
|
||||
cap = int(~0)
|
||||
elif cap < 0 or cap > dominfo.getVCpuCount() * 100:
|
||||
raise XendError("cap is out of range")
|
||||
else:
|
||||
set_cap = True
|
||||
|
||||
assert type(weight) == int
|
||||
assert type(cap) == int
|
||||
|
||||
return xc.sched_credit_domain_set(dominfo.getDomid(), weight, cap)
|
||||
rc = xc.sched_credit_domain_set(dominfo.getDomid(), weight, cap)
|
||||
if rc == 0:
|
||||
if set_weight:
|
||||
dominfo.setWeight(weight)
|
||||
if set_cap:
|
||||
dominfo.setCap(cap)
|
||||
return rc
|
||||
except Exception, ex:
|
||||
log.exception(ex)
|
||||
raise XendError(str(ex))
|
||||
|
||||
@@ -1009,9 +1009,15 @@ class XendDomainInfo:
|
||||
def getCap(self):
|
||||
return self.info.get('cpu_cap', 0)
|
||||
|
||||
def setCap(self, cpu_cap):
|
||||
self.info['cpu_cap'] = cpu_cap
|
||||
|
||||
def getWeight(self):
|
||||
return self.info.get('cpu_weight', 256)
|
||||
|
||||
def setWeight(self, cpu_weight):
|
||||
self.info['cpu_weight'] = cpu_weight
|
||||
|
||||
def setResume(self, state):
|
||||
self._resume = state
|
||||
|
||||
|
||||