bitkeeper revision 1.1159.1.247 (41770cc6Kk3qrDm03nejgR15F8G8Ng)

Full balloon driver support for 2.6, including control interface
and plumbing into xend / xm.
This commit is contained in:
mwilli2@equilibrium.research committed 2004-10-21 01:11:34 +00:00
1 parent c87b660321
commit f8e32a93e5
10 files changed
+97 -4

No files matched your search

+8
View File
@@ -479,6 +479,10 @@ static PyObject *xu_message_get_payload(PyObject *self, PyObject *args)
case TYPE(CMSG_NETIF_BE, CMSG_NETIF_BE_DRIVER_STATUS):
C2P(netif_be_driver_status_t, status, Int, Long);
return dict;
case TYPE(CMSG_MEM_REQUEST, CMSG_MEM_REQUEST_SET):
C2P(mem_request_t, target, Int, Long);
C2P(mem_request_t, status, Int, Long);
return dict;
}
return PyString_FromStringAndSize(xum->msg.msg, xum->msg.length);
@@ -640,6 +644,10 @@ static PyObject *xu_message_new(PyObject *self, PyObject *args)
P2C(netif_fe_driver_status_t, status, u32);
P2C(netif_fe_driver_status_t, max_handle, u32);
break;
case TYPE(CMSG_MEM_REQUEST, CMSG_MEM_REQUEST_SET):
P2C(mem_request_t, target, u32);
P2C(mem_request_t, status, u32);
break;
}
if ( dict_items_parsed != PyDict_Size(payload) )
+6
View File
@@ -350,6 +350,12 @@ class Xend:
{'op' : 'inject',
'event' : fileof(sxpr) })
def xend_domain_mem_target_set(self, id, mem_target):
val = self.xendPost(self.domainurl(id),
{'op' : 'mem_target_set',
'target' : mem_target })
return val
def getAsynchXendClientProtocol():
"""Load AsynchXendClientProtocol on demand to avoid the cost.
"""
+4
View File
@@ -811,6 +811,10 @@ class XendDomain:
except Exception, ex:
raise XendError(str(ex))
def domain_mem_target_set(self, id, target):
return xend.domain_mem_target_set(id, target)
def instance():
"""Singleton constructor. Use this instead of the class constructor.
+10
View File
@@ -706,6 +706,16 @@ class Daemon:
raise XendError('No domain controller: %s' % dom)
ctrl.shutdown(reason)
return 0
def domain_mem_target_set(self, dom, target):
"""Set memory target for a domain.
"""
dom = int(dom)
ctrl = self.domainCF.getController(dom)
if not ctrl:
raise XendError('No domain controller: %s' % dom)
ctrl.mem_target_set(target)
return 0
def instance():
global inst
+8 -1
View File
@@ -194,12 +194,19 @@ class SrvDomain(SrvDir):
val = fn(req.args, {'dom': self.dom.id})
return val
def op_mem_target_set(self, op, req):
fn = FormFn(self.xd.domain_mem_target_set,
[['dom', 'str'],
['target', 'int']])
val = fn(req.args, {'dom': self.dom.id})
return val
def render_POST(self, req):
return self.perform(req)
def render_GET(self, req):
op = req.args.get('op')
if op and op[0] in ['vifs', 'vif', 'vbds', 'vbd']:
if op and op[0] in ['vifs', 'vif', 'vbds', 'vbd', 'mem_target_set']:
return self.perform(req)
if self.use_sxp(req):
req.setHeader("Content-Type", sxp.mime_type)
+7
View File
@@ -33,6 +33,7 @@ class DomainController(controller.Controller):
def __init__(self, factory, dom):
controller.Controller.__init__(self, factory, dom)
self.addMethod(CMSG_SHUTDOWN, 0, None)
self.addMethod(CMSG_MEM_REQUEST, 0, None)
self.registerChannel()
def shutdown(self, reason):
@@ -45,3 +46,9 @@ class DomainController(controller.Controller):
raise XendError('invalid reason:' + reason)
msg = packMsg(msgtype, {})
self.writeRequest(msg)
def mem_target_set(self, target):
"""Set domain memory target in pages.
"""
msg = packMsg('mem_request_t', { 'target' : target * (1 << 8)} )
self.writeRequest(msg)
+13
View File
@@ -215,8 +215,21 @@ shutdown_formats = {
msg_formats.update(shutdown_formats)
#============================================================================
# Domain memory reservation message.
#============================================================================
CMSG_MEM_REQUEST = 7
CMSG_MEM_REQUEST_SET = 0
mem_request_formats = {
'mem_request_t':
(CMSG_MEM_REQUEST, CMSG_MEM_REQUEST_SET)
}
msg_formats.update(mem_request_formats)
#============================================================================
class Msg:
pass
+18
View File
@@ -466,6 +466,24 @@ class ProgMaxmem(Prog):
xm.prog(ProgMaxmem)
class ProgBalloon(Prog):
group = 'domain'
name = 'balloon'
info = """Set the domain's memory footprint using the balloon driver."""
def help(self, args):
print args[0], "DOM MEMORY_TARGET"
print """\nRequest domain DOM to adjust its memory footprint to
MEMORY_TARGET megabytes"""
def main(self, args):
if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0])
dom = args[1]
mem_target = int(args[2])
server.xend_domain_mem_target_set(dom, mem_target)
xm.prog(ProgBalloon)
class ProgDomid(Prog):
group = 'domain'
name = 'domid'
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.