xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: David Scott <dave.scott@eu.citrix.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH 13 of 14] libxl: add NIC QoS parameters
Date: Wed, 30 Mar 2011 19:05:34 +0100	[thread overview]
Message-ID: <2501899ab12fcc128ac6.1301508334@localhost.localdomain> (raw)
In-Reply-To: <patchbomb.1301508321@localhost.localdomain>

# HG changeset patch
# User David Scott <dave.scott@eu.citrix.com>
# 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@eu.citrix.com>

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);

  parent reply	other threads:[~2011-03-30 18:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-30 18:05 [PATCH 00 of 14] Improvements to libxl VIF hotplug and ocaml bindings (v2) David Scott
2011-03-30 18:05 ` [PATCH 01 of 14] libxl: fix memory management in "xl network-attach" David Scott
2011-03-31 18:19   ` Ian Jackson
2011-03-30 18:05 ` [PATCH 02 of 14] tools: ocaml: rename the device_nic types and functions David Scott
2011-03-30 18:05 ` [PATCH 03 of 14] tools: ocaml: rename the disk_info " David Scott
2011-03-30 18:05 ` [PATCH 04 of 14] tools: ocaml: rename the console " David Scott
2011-03-30 18:05 ` [PATCH 05 of 14] tools: ocaml: rename the vkb " David Scott
2011-03-30 18:05 ` [PATCH 06 of 14] tools: ocaml: rename the pci " David Scott
2011-03-30 18:05 ` [PATCH 07 of 14] tools: ocaml: remove the domain_make and domain_build functions since they don't work David Scott
2011-03-30 18:05 ` [PATCH 08 of 14] tools: ocaml: rename the create_info types and functions David Scott
2011-03-30 18:05 ` [PATCH 09 of 14] tools: ocaml: rename the build_info " David Scott
2011-03-30 18:05 ` [PATCH 10 of 14] tools: ocaml: rename the device_build_state " David Scott
2011-03-30 18:05 ` [PATCH 11 of 14] tools: ocaml: rename the physinfo " David Scott
2011-03-30 18:05 ` [PATCH 12 of 14] tools: ocaml: rename the sched_credit " David Scott
2011-03-30 18:05 ` David Scott [this message]
2011-03-31  9:13   ` [PATCH 13 of 14] libxl: add NIC QoS parameters Ian Campbell
2011-03-30 18:05 ` [PATCH 14 of 14] tools: ocaml: add NIC QoS parameters to the ocaml libxl interface David Scott
2011-03-31  8:36 ` [PATCH 00 of 14] Improvements to libxl VIF hotplug and ocaml bindings (v2) Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2501899ab12fcc128ac6.1301508334@localhost.localdomain \
    --to=dave.scott@eu.citrix.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).