qmemman: don't use xenapi, use hypercalls to do mem-set

This commit is contained in:
Rafal Wojtczuk 2010-09-03 16:19:48 +02:00
parent 10408d61db
commit 7dcb7cb196

View File

@ -1,45 +1,23 @@
import xmlrpclib
from xen.xm import XenAPI
import xen.lowlevel.xc
import xen.lowlevel.xs
import string
import time
import qmemman_algo
import os
class XendSession(object):
def __init__(self):
# self.get_xend_session_old_api()
self.get_xend_session_new_api()
# def get_xend_session_old_api(self):
# from xen.xend import XendClient
# from xen.util.xmlrpcclient import ServerProxy
# self.xend_server = ServerProxy(XendClient.uri)
# if self.xend_server is None:
# print "get_xend_session_old_api(): cannot open session!"
def get_xend_session_new_api(self):
xend_socket_uri = "httpu:///var/run/xend/xen-api.sock"
self.session = XenAPI.Session (xend_socket_uri)
self.session.login_with_password ("", "")
if self.session is None:
print "get_xend_session_new_api(): cannot open session!"
class DomainState:
def __init__(self, id):
self.meminfo = None
self.memory_actual = None
self.mem_used = None
self.uuid = None
self.id = id
self.meminfo_updated = False
class SystemState:
def __init__(self):
self.xend_session = XendSession()
self.domdict = {}
self.xc = xen.lowlevel.xc.xc()
self.xs = xen.lowlevel.xs.xs()
self.BALOON_DELAY = 0.1
def add_domain(self, id):
@ -57,24 +35,10 @@ class SystemState:
# return long(ret)
def refresh_memactual(self):
update_uuid_info = False
for domain in self.xc.domain_getinfo():
id = str(domain['domid'])
if self.domdict.has_key(id):
self.domdict[id].memory_actual = domain['mem_kb']*1024
if self.domdict[id].uuid is None:
update_uuid_info = True
if not update_uuid_info:
return
dom_recs = self.xend_session.session.xenapi.VM.get_all_records()
# dom_metrics_recs = self.xend_session.session.xenapi.VM_metrics.get_all_records()
for dom_ref, dom_rec in dom_recs.items():
# dom_metrics_rec = dom_metrics_recs[dom_rec['metrics']]
id = dom_rec['domid']
# mem = int(dom_metrics_rec['memory_actual'])/1024
if (self.domdict.has_key(id)):
# self.domdict[id].memory_actual = mem
self.domdict[id].uuid = dom_rec['uuid']
def parse_meminfo(self, meminfo):
dict = {}
@ -98,11 +62,12 @@ class SystemState:
return dict
#the below works (and is fast), but then 'xm list' shows unchanged memory value
def mem_set_alternative(self, id, val):
os.system('xenstore-write /local/domain/' + id + '/memory/target ' + str(val/1024))
def mem_set(self, id, val):
print 'mem-set domain', id, 'to', val
self.xs.write('', '/local/domain/' + id + '/memory/target', str(val/1024))
self.xc.domain_set_target_mem(int(id), val/1024)
def mem_set(self, id, val):
def mem_set_obsolete(self, id, val):
uuid = self.domdict[id].uuid
if val >= 2**31:
print 'limiting memory from ', val, 'to maxint because of xml-rpc lameness'