From: David Scott <dave.scott@eu.citrix.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH 3 of 5] libxl: add NIC QoS parameters
Date: Mon, 28 Mar 2011 13:26:37 +0100 [thread overview]
Message-ID: <3aab79c907a2c78f4e81.1301315197@ely> (raw)
In-Reply-To: <patchbomb.1301315194@ely>
# HG changeset patch
# User David Scott <dave.scott@eu.citrix.com>
# Date 1301314652 -3600
# Node ID 3aab79c907a2c78f4e81362944ee65ddf6f2cc6f
# Parent 45326ad6a0d396bfcd3c83d209ab7a19d6499896
libxl: add NIC QoS parameters
The parameters are:
qos_kib_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 45326ad6a0d3 -r 3aab79c907a2 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c Mon Mar 28 13:17:32 2011 +0100
+++ b/tools/libxl/libxl.c Mon Mar 28 13:17:32 2011 +0100
@@ -1194,6 +1194,8 @@
libxl_xen_script_dir_path()) < 0 )
return ERROR_FAIL;
nic_info->nictype = NICTYPE_IOEMU;
+ nic_info->qos_kib_per_sec = 0;
+ nic_info->qos_timeslice_usec = 0;
return 0;
}
@@ -1205,6 +1207,7 @@
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,11 @@
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_kib_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 45326ad6a0d3 -r 3aab79c907a2 tools/libxl/libxl.idl
--- a/tools/libxl/libxl.idl Mon Mar 28 13:17:32 2011 +0100
+++ b/tools/libxl/libxl.idl Mon Mar 28 13:17:32 2011 +0100
@@ -225,6 +225,8 @@
("ifname", string),
("script", string),
("nictype", libxl_nic_type),
+ ("qos_kib_per_sec", uint32),
+ ("qos_timeslice_usec", uint32),
])
libxl_device_net2 = Struct("device_net2", [
diff -r 45326ad6a0d3 -r 3aab79c907a2 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c Mon Mar 28 13:17:32 2011 +0100
+++ b/tools/libxl/xl_cmdimpl.c Mon Mar 28 13:17:32 2011 +0100
@@ -880,7 +880,10 @@
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, "%u,%u", &(nic->qos_kib_per_sec), &(nic->qos_timeslice_usec)) != 2) {
+ fprintf(stderr, "Specified rate parameter needs to take the form: kib_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 @@
free(nic.model);
nic.model = strdup((*argv) + 6);
} else if (!strncmp("rate=", *argv, 5)) {
+ if (sscanf((*argv) + 5, "%u,%u", &(nic.qos_kib_per_sec), &(nic.qos_timeslice_usec)) != 2) {
+ fprintf(stderr, "Specified rate parameter needs to take the form: kib_per_sec,timeslice_usec\n");
+ return 1;
+ }
} else if (!strncmp("accel=", *argv, 6)) {
} else {
fprintf(stderr, "unrecognized argument `%s'\n", *argv);
next prev parent reply other threads:[~2011-03-28 12:26 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-28 12:26 [PATCH 0 of 5] Improvements to libxl VIF hotplug, unplug; xapi can now use these functions David Scott
2011-03-28 12:26 ` [PATCH 1 of 5] libxl: fix memory management in "xl network-attach" David Scott
2011-03-28 14:37 ` Stefano Stabellini
2011-03-29 8:30 ` Ian Campbell
2011-03-28 12:26 ` [PATCH 2 of 5] tools: ocaml: move the nic_info record into a module to the field labels live in a separate namespace David Scott
2011-03-29 8:42 ` Ian Campbell
2011-03-30 17:18 ` Dave Scott
2011-03-28 12:26 ` David Scott [this message]
2011-03-28 14:37 ` [PATCH 3 of 5] libxl: add NIC QoS parameters Stefano Stabellini
2011-03-29 8:48 ` Ian Campbell
2011-03-28 12:26 ` [PATCH 4 of 5] tools: ocaml: add NIC QoS parameters to the ocaml libxl interface David Scott
2011-03-29 8:49 ` Ian Campbell
2011-03-28 12:26 ` [PATCH 5 of 5] tools: ocaml: rename nic_remove to nic_del, for consistency with libxl David Scott
2011-03-29 8:52 ` 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=3aab79c907a2c78f4e81.1301315197@ely \
--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).