[ovs-dev] [PATCH] netdev-linux: Make htb quantum always no less than mtu.
Alex Wang
alexw at nicira.com
Fri Mar 27 18:48:34 UTC 2015
Currently, ovs uses hardcoded rate2quantum = 10 for each htb qdisc.
When qdisc class's rate is small, the resulting quantum (calculated
by min_rate / rate2quantum) will be smaller than MTU. This is not
recommended and tc will keep complaining the following in syslog.
localhost kernel: HTB: quantum of class 10003 is small. Consider r2q change.
localhost kernel: HTB: quantum of class 10004 is small. Consider r2q change.
localhost kernel: HTB: quantum of class 10005 is small. Consider r2q change.
localhost kernel: HTB: quantum of class 10006 is small. Consider r2q change.
To fix the issue, this commit makes ovs always use htb quantum no less
than the MTU.
Signed-off-by: Alex Wang <alexw at nicira.com>
---
lib/netdev-linux.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 5e6f01e..5c0fdff 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -3497,6 +3497,7 @@ static const struct tc_ops tc_ops_sfq = {
/* HTB traffic control class. */
#define HTB_N_QUEUES 0xf000
+#define HTB_RATE2QUANTUM 10
struct htb {
struct tc tc;
@@ -3555,7 +3556,7 @@ htb_setup_qdisc__(struct netdev *netdev)
nl_msg_put_string(&request, TCA_KIND, "htb");
memset(&opt, 0, sizeof opt);
- opt.rate2quantum = 10;
+ opt.rate2quantum = HTB_RATE2QUANTUM;
opt.version = 3;
opt.defcls = 1;
@@ -3589,6 +3590,9 @@ htb_setup_class__(struct netdev *netdev, unsigned int handle,
memset(&opt, 0, sizeof opt);
tc_fill_rate(&opt.rate, class->min_rate, mtu);
tc_fill_rate(&opt.ceil, class->max_rate, mtu);
+ if ((class->min_rate / HTB_RATE2QUANTUM) < mtu) {
+ opt.quantum = mtu;
+ }
opt.buffer = tc_calc_buffer(opt.rate.rate, mtu, class->burst);
opt.cbuffer = tc_calc_buffer(opt.ceil.rate, mtu, class->burst);
opt.prio = class->priority;
--
1.7.9.5
More information about the dev
mailing list