All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Fehlig <jfehlig@suse.com>
To: libvir-list@redhat.com
Cc: Jim Fehlig <jfehlig@suse.com>, xen-devel@lists.xen.org
Subject: [PATCH V2 3/3] libxl: support vif outgoing bandwidth QoS
Date: Mon,  4 Jan 2016 18:08:15 -0700	[thread overview]
Message-ID: <1451956095-25353-4-git-send-email-jfehlig@suse.com> (raw)
In-Reply-To: <1451956095-25353-1-git-send-email-jfehlig@suse.com>

The libxl_device_nic structure supports specifying an outgoing rate
limit based on a time interval and bytes allowed per interval. In xl
config a rate limit is specified as "<RATE>/s@<INTERVAL>". INTERVAL
is optional and defaults to 50ms.

libvirt expresses outgoing limits by average (required), peak, burst,
and floor attributes in units of KB/s. This patch supports the outgoing
bandwidth limit by converting the average KB/s to bytes per interval
based on the same default interval (50ms) used by xl.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
---
 src/libxl/libxl_conf.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 23c74e7..6320421 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -1093,6 +1093,7 @@ libxlMakeNic(virDomainDefPtr def,
 {
     bool ioemu_nic = def->os.type == VIR_DOMAIN_OSTYPE_HVM;
     virDomainNetType actual_type = virDomainNetGetActualType(l_nic);
+    virNetDevBandwidthPtr actual_bw;
 
     /* TODO: Where is mtu stored?
      *
@@ -1206,6 +1207,44 @@ libxlMakeNic(virDomainDefPtr def,
 #endif
     }
 
+    /*
+     * Set bandwidth.
+     * From $xen-sources/docs/misc/xl-network-configuration.markdown:
+     *
+     *
+     * Specifies the rate at which the outgoing traffic will be limited to.
+     * The default if this keyword is not specified is unlimited.
+     *
+     * The rate may be specified as "<RATE>/s" or optionally "<RATE>/s@<INTERVAL>".
+     *
+     * `RATE` is in bytes and can accept suffixes:
+     *     GB, MB, KB, B for bytes.
+     *     Gb, Mb, Kb, b for bits.
+     * `INTERVAL` is in microseconds and can accept suffixes: ms, us, s.
+     *     It determines the frequency at which the vif transmission credit
+     *     is replenished. The default is 50ms.
+
+     * Vif rate limiting is credit-based. It means that for "1MB/s@20ms",
+     * the available credit will be equivalent of the traffic you would have
+     * done at "1MB/s" during 20ms. This will results in a credit of 20,000
+     * bytes replenished every 20,000 us.
+     *
+     *
+     * libvirt doesn't support the notion of rate limiting over an interval.
+     * Similar to xl's behavior when interval is not specified, set a default
+     * interval of 50ms and calculate the number of bytes per interval based
+     * on the specified average bandwidth.
+     */
+    actual_bw = virDomainNetGetActualBandwidth(l_nic);
+    if (actual_bw && actual_bw->out && actual_bw->out->average) {
+        uint64_t bytes_per_sec = actual_bw->out->average * 1024;
+        uint64_t bytes_per_interval =
+            (((uint64_t) bytes_per_sec * 50000UL) / 1000000UL);
+
+        x_nic->rate_bytes_per_interval = bytes_per_interval;
+        x_nic->rate_interval_usecs =  50000UL;
+    }
+
     return 0;
 }
 
-- 
2.1.4

  parent reply	other threads:[~2016-01-05  1:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1451956095-25353-1-git-send-email-jfehlig@suse.com>
2016-01-05  1:08 ` [PATCH V2 1/3] xenconfig: support vif bandwidth in sexpr parser and formatter Jim Fehlig
2016-01-05  1:08 ` [PATCH V2 2/3] xenconfig: support vif bandwidth in xm and xl " Jim Fehlig
2016-01-05  1:08 ` Jim Fehlig [this message]
2016-01-08 16:45 ` [libvirt] [PATCH V2 0/3] Xen: Support vif outging bandwidth QoS Michal Privoznik
     [not found] ` <568FE7AC.9050004@redhat.com>
2016-01-09  1:59   ` Jim Fehlig
     [not found] ` <1451956095-25353-2-git-send-email-jfehlig@suse.com>
2016-01-12 13:41   ` [libvirt] [PATCH V2 1/3] xenconfig: support vif bandwidth in sexpr parser and formatter John Ferlan

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=1451956095-25353-4-git-send-email-jfehlig@suse.com \
    --to=jfehlig@suse.com \
    --cc=libvir-list@redhat.com \
    --cc=xen-devel@lists.xen.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.