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-changelog

[Xen-changelog] [xen-unstable] xend: VBD QoS policy bits

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xend: VBD QoS policy bits
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 14 Aug 2009 09:15:15 -0700
Delivery-date: Fri, 14 Aug 2009 09:16:13 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1250266211 -3600
# Node ID 135b350496fb4f3d8b41a1026e04d7e52bfaa8cb
# Parent  d2ec750f9b415f5e4f265218a2aba399aaf03141
xend: VBD QoS policy bits

Add the ability to define VBD QoS policy in the xend layer.

Consider the following vbd entry:

vbd = [
   'phy:/dev/server/virtualmachine1-disk,xvda1,w,credit=3D5000/s@50ms',
]

This means that a VM may perform 5000 I/O operations per second, with
credit being replenished every 50 milliseconds.

The 'credit' xenstore value is by the blkback driver to ratelimit I/O
operations for the specific device.

Signed-off-by: William Pitcock <nenolod@xxxxxxxxxxxxxxxx>
---
 tools/python/README.sxpcfg            |    1 
 tools/python/xen/xend/server/blkif.py |   43 +++++++++++++++++++++++++++++++---
 2 files changed, 41 insertions(+), 3 deletions(-)

diff -r d2ec750f9b41 -r 135b350496fb tools/python/README.sxpcfg
--- a/tools/python/README.sxpcfg        Fri Aug 14 17:09:39 2009 +0100
+++ b/tools/python/README.sxpcfg        Fri Aug 14 17:10:11 2009 +0100
@@ -82,6 +82,7 @@ vbd
   - uname
   - dev (ioemu:, .. etc)
   - mode (r, w. w!)
+  - credit
 
 vif
   - type
diff -r d2ec750f9b41 -r 135b350496fb tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py     Fri Aug 14 17:09:39 2009 +0100
+++ b/tools/python/xen/xend/server/blkif.py     Fri Aug 14 17:10:11 2009 +0100
@@ -42,6 +42,37 @@ class BlkifController(DevController):
 
         return os.access(auxbin.scripts_dir() + '/block-%s' % protocol, 
os.X_OK)
 
+    def _calculateRateLimit(self, credstr):
+        """Calculate the rate limit, given a string like: 5000/s@50ms.
+        If this fails, the limit is unlimited.
+        """
+        credit_per_interval = 0xffffffffL
+        interval_usecs = 0L
+
+        credit_re = re.compile("^([0-9]+)/s(@([0-9]+)([mu]?)s)?$")
+
+        m = credit_re.match(credstr)
+        if m:
+            credit_per_sec = m.group(1)
+
+            if m.group(2) is None:
+                interval_usecs = 50000L      # 50ms default
+            else:
+                interval_usecs = long(m.group(5))
+                if m.group(3) == '':
+                    interval_usecs *= 1000 * 1000
+                elif m.group(3) == 'm':
+                    interval_usecs *= 1000
+
+            credit_per_interval = (credit_per_sec * interval_usecs) / 1000000L
+
+            # overflow / underflow checking: default to unlimited rate
+            if credit_per_interval == 0 or credit_per_interval > 0xffffffffL 
or \
+               interval_usecs == 0 or interval_usecs > 0xffffffffL:
+                credit_per_interval = 0xffffffffL
+                interval_usecs     = 0L
+
+        return "%lu,%lu" % (credit_per_interval, interval_usecs)
 
     def getDeviceDetails(self, config):
         """@see DevController.getDeviceDetails"""
@@ -90,6 +121,10 @@ class BlkifController(DevController):
 
         if security.on() == xsconstants.XS_POLICY_USE:
             self.do_access_control(config, uname)
+
+        cred = config.get('credit', '')
+        if cred:
+            back['credit'] = self._calculateRateLimit(cred)
 
         (device_path, devid) = blkif.blkdev_name_to_number(dev)
         if devid is None:
@@ -153,12 +188,12 @@ class BlkifController(DevController):
         config = DevController.getDeviceConfiguration(self, devid, transaction)
         if transaction is None:
             devinfo = self.readBackend(devid, 'dev', 'type', 'params', 'mode',
-                                       'uuid', 'bootable')
+                                       'uuid', 'bootable', 'credit')
         else:
             devinfo = self.readBackendTxn(transaction, devid,
                                           'dev', 'type', 'params', 'mode', 
'uuid',
-                                          'bootable')
-        dev, typ, params, mode, uuid, bootable = devinfo
+                                          'bootable', 'credit')
+        dev, typ, params, mode, uuid, bootable, credit = devinfo
         
         if dev:
             if transaction is None:
@@ -178,6 +213,8 @@ class BlkifController(DevController):
             config['uuid'] = uuid
         if bootable != None:
             config['bootable'] = int(bootable)
+        if credit:
+            config['credit'] = credit
 
         proto = self.readFrontend(devid, 'protocol')
         if proto:

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] xend: VBD QoS policy bits, Xen patchbot-unstable <=