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 13 of 14] libxl: add NIC QoS parameters

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 13 of 14] libxl: add NIC QoS parameters
From: David Scott <dave.scott@xxxxxxxxxxxxx>
Date: Wed, 30 Mar 2011 19:05:34 +0100
Delivery-date: Wed, 30 Mar 2011 14:49:33 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1301508321@xxxxxxxxxxxxxxxxxxxxx>
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/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1301508321@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.6.4
# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1301507668 -3600
# Node ID 2501899ab12fcc128ac62b0319b7a6f0b8982a42
# Parent  62443233adf0d2319da50210057041380d7bd07f
libxl: add NIC QoS parameters

The parameters are:
  qos_kb_per_sec:     maximum rate in KiB/sec
  qos_timeslice_usec: time period over which the average rate is enforced in
                      usec

One can now execute commands like
  xl network-attach ... rate=1024,50000
which should impose an average limit of 1MiB/sec, over intervals of 50ms

The "rate" key in the network backend is interpreted by netback. It wants:
  bytes_per_interval, interval_length

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 62443233adf0 -r 2501899ab12f tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Wed Mar 30 18:54:28 2011 +0100
+++ b/tools/libxl/libxl.c       Wed Mar 30 18:54:28 2011 +0100
@@ -1194,6 +1194,8 @@ int libxl_device_nic_init(libxl_device_n
                libxl_xen_script_dir_path()) < 0 )
         return ERROR_FAIL;
     nic_info->nictype = NICTYPE_IOEMU;
+    nic_info->qos_kb_per_sec = 0;
+    nic_info->qos_timeslice_usec = 0;
     return 0;
 }
 
@@ -1205,6 +1207,7 @@ int libxl_device_nic_add(libxl_ctx *ctx,
     libxl__device device;
     char *dompath, **l;
     unsigned int nb, rc;
+    uint32_t bytes_per_interval; 
 
     front = flexarray_make(16, 1);
     if (!front) {
@@ -1263,6 +1266,14 @@ int libxl_device_nic_add(libxl_ctx *ctx,
     flexarray_append(back, libxl__strdup(&gc, nic->bridge));
     flexarray_append(back, "handle");
     flexarray_append(back, libxl__sprintf(&gc, "%d", nic->devid));
+    if (nic->qos_timeslice_usec > 0) {
+        bytes_per_interval = (uint32_t) 
+            (((uint64_t)nic->qos_kb_per_sec * 1024L * 
+              (uint64_t)nic->qos_timeslice_usec) / 1000000L);
+        flexarray_append(back, "rate");
+        flexarray_append(back, libxl__sprintf(&gc, "%u,%u", 
+            bytes_per_interval, nic->qos_timeslice_usec));
+    }
 
     flexarray_append(front, "backend-id");
     flexarray_append(front, libxl__sprintf(&gc, "%d", nic->backend_domid));
diff -r 62443233adf0 -r 2501899ab12f tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl     Wed Mar 30 18:54:28 2011 +0100
+++ b/tools/libxl/libxl.idl     Wed Mar 30 18:54:28 2011 +0100
@@ -225,6 +225,8 @@ libxl_device_nic = Struct("device_nic", 
     ("ifname", string),
     ("script", string),
     ("nictype", libxl_nic_type),
+    ("qos_kb_per_sec", uint32, False, "maximum rate in KiB/sec"),
+    ("qos_timeslice_usec", uint32, False, "time period over which the rate is 
enforced in usec"),
     ])
 
 libxl_device_net2 = Struct("device_net2", [
diff -r 62443233adf0 -r 2501899ab12f tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Wed Mar 30 18:54:28 2011 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Wed Mar 30 18:54:28 2011 +0100
@@ -880,7 +880,10 @@ static void parse_config_data(const char
                         nic->backend_domid = 0;
                     }
                 } else if (!strcmp(p, "rate")) {
-                    fprintf(stderr, "the rate parameter for vifs is currently 
not supported\n");
+                    if (sscanf(p2 + 1, "%"PRIu32",%"PRIu32, 
&(nic->qos_kb_per_sec), &(nic->qos_timeslice_usec)) != 2) {
+                        fprintf(stderr, "Specified rate parameter needs to 
take the form: kb_per_sec,timeslice_usec\n");
+                        break;
+                    }
                 } else if (!strcmp(p, "accel")) {
                     fprintf(stderr, "the accel parameter for vifs is currently 
not supported\n");
                 }
@@ -4298,6 +4301,10 @@ int main_networkattach(int argc, char **
             free(nic.model);
             nic.model = strdup((*argv) + 6);
         } else if (!strncmp("rate=", *argv, 5)) {
+            if (sscanf((*argv) + 5, "%u,%u", &(nic.qos_kb_per_sec), 
&(nic.qos_timeslice_usec)) != 2) {
+                fprintf(stderr, "Specified rate parameter needs to take the 
form: kb_per_sec,timeslice_usec\n");
+                return 1;
+            }
         } else if (!strncmp("accel=", *argv, 6)) {
         } else {
             fprintf(stderr, "unrecognized argument `%s'\n", *argv);

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

<Prev in Thread] Current Thread [Next in Thread>