john.levon@sun.com
2007-Mar-22 22:00 UTC
[Xen-devel] [PATCH] Implement auto-ballooning for Solaris
# HG changeset patch
# User john.levon@sun.com
# Date 1174600845 25200
# Node ID 9a830a5502563c5f95378c6d51d969a1cf8f350b
# Parent 507cf151b3c0302ce25ef153d01f4460a4c70c70
Implement auto-ballooning for Solaris
/proc/xen/balloon is Linux-specific. Implement a Solaris backend too. Also fix
the
FMRI for xend.
Signed-off-by: Ryan Scott <ryan.scott@sun.com>
diff --git a/tools/python/xen/lowlevel/scf/scf.c
b/tools/python/xen/lowlevel/scf/scf.c
--- a/tools/python/xen/lowlevel/scf/scf.c
+++ b/tools/python/xen/lowlevel/scf/scf.c
@@ -26,7 +26,7 @@
#include <libscf.h>
#include <stdio.h>
-#define XEND_FMRI "svc:/system/xen/xend:default"
+#define XEND_FMRI "svc:/system/xctl/xend:default"
#define XEND_PG "config"
static PyObject *scf_exc;
diff --git a/tools/python/xen/xend/balloon.py b/tools/python/xen/xend/balloon.py
--- a/tools/python/xen/xend/balloon.py
+++ b/tools/python/xen/xend/balloon.py
@@ -25,9 +25,7 @@ import XendOptions
import XendOptions
from XendLogging import log
from XendError import VmError
-
-
-PROC_XEN_BALLOON = ''/proc/xen/balloon''
+import osdep
RETRY_LIMIT = 20
RETRY_LIMIT_INCR = 5
@@ -51,19 +49,7 @@ def _get_proc_balloon(label):
"""Returns the value for the named label. Returns None if
the label was
not found or the value was non-numeric."""
- f = file(PROC_XEN_BALLOON, ''r'')
- try:
- for line in f:
- keyvalue = line.split('':'')
- if keyvalue[0] == label:
- values = keyvalue[1].split()
- if values[0].isdigit():
- return int(values[0])
- else:
- return None
- return None
- finally:
- f.close()
+ return osdep.lookup_balloon_stat(label)
def get_dom0_current_alloc():
"""Returns the current memory allocation (in KiB) of
dom0."""
diff --git a/tools/python/xen/xend/osdep.py b/tools/python/xen/xend/osdep.py
--- a/tools/python/xen/xend/osdep.py
+++ b/tools/python/xen/xend/osdep.py
@@ -41,6 +41,55 @@ _vif_script = {
"SunOS": "vif-vnic"
}
+def _linux_balloon_stat(label):
+ """Returns the value for the named label, or None if an
error occurs."""
+
+ PROC_XEN_BALLOON = ''/proc/xen/balloon''
+ f = file(PROC_XEN_BALLOON, ''r'')
+ try:
+ for line in f:
+ keyvalue = line.split('':'')
+ if keyvalue[0] == label:
+ values = keyvalue[1].split()
+ if values[0].isdigit():
+ return int(values[0])
+ else:
+ return None
+ return None
+ finally:
+ f.close()
+
+def _solaris_balloon_stat(label):
+ """Returns the value for the named label, or None if an
error occurs."""
+
+ import fcntl
+ import array
+ DEV_XEN_BALLOON = ''/dev/xen/balloon''
+ BLN_IOCTL_CURRENT = 0x4201
+ BLN_IOCTL_TARGET = 0x4202
+ BLN_IOCTL_LOW = 0x4203
+ BLN_IOCTL_HIGH = 0x4204
+ BLN_IOCTL_LIMIT = 0x4205
+ label_to_ioctl = { ''Current allocation'' :
BLN_IOCTL_CURRENT,
+ ''Requested target'' : BLN_IOCTL_TARGET,
+ ''Low-mem balloon'' : BLN_IOCTL_LOW,
+ ''High-mem balloon'' : BLN_IOCTL_HIGH,
+ ''Xen hard limit'' : BLN_IOCTL_LIMIT }
+
+ f = file(DEV_XEN_BALLOON, ''r'')
+ try:
+ values = array.array(''L'', [0])
+ if fcntl.ioctl(f.fileno(), label_to_ioctl[label], values, 1) == 0:
+ return values[0]
+ else:
+ return None
+ finally:
+ f.close()
+
+_balloon_stat = {
+ "SunOS": _solaris_balloon_stat
+}
+
def _get(var, default=None):
return var.get(os.uname()[0], default)
@@ -49,3 +98,4 @@ pygrub_path = _get(_pygrub_path, "/usr/b
pygrub_path = _get(_pygrub_path, "/usr/bin/pygrub")
netback_type = _get(_netback_type, "netfront")
vif_script = _get(_vif_script, "vif-bridge")
+lookup_balloon_stat = _get(_balloon_stat, _linux_balloon_stat)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel