WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] Implement auto-ballooning for Solaris

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] Implement auto-ballooning for Solaris
From: john.levon@xxxxxxx
Date: Thu, 22 Mar 2007 15:00:50 -0700
Delivery-date: Thu, 22 Mar 2007 14:59:56 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User john.levon@xxxxxxx
# 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@xxxxxxx>

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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] Implement auto-ballooning for Solaris, john . levon <=