iproute2: cake AQM prepare tc for COBALT algorithm

Cake AQM is experimenting with a codel/blue hybrid AQM COBALT instead
of just using codel alone. This patch updates tc to cope with some new
stats produced by COBALT.

Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
This commit is contained in:
Kevin Darbyshire-Bryant 2016-06-27 11:16:57 +01:00 committed by Jo-Philipp Wich
parent c2bd469521
commit 6d7f54ccdb
2 changed files with 14 additions and 11 deletions

View file

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=iproute2 PKG_NAME:=iproute2
PKG_VERSION:=4.4.0 PKG_VERSION:=4.4.0
PKG_RELEASE:=2 PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2 PKG_SOURCE_URL:=@KERNEL/linux/utils/net/iproute2

View file

@ -1,6 +1,6 @@
--- a/include/linux/pkt_sched.h --- a/include/linux/pkt_sched.h
+++ b/include/linux/pkt_sched.h +++ b/include/linux/pkt_sched.h
@@ -877,4 +877,55 @@ struct tc_pie_xstats { @@ -877,4 +877,56 @@ struct tc_pie_xstats {
__u32 maxq; /* maximum queue size */ __u32 maxq; /* maximum queue size */
__u32 ecn_mark; /* packets marked with ecn*/ __u32 ecn_mark; /* packets marked with ecn*/
}; };
@ -29,7 +29,7 @@
+ +
+#define TC_CAKE_MAX_TINS (8) +#define TC_CAKE_MAX_TINS (8)
+struct tc_cake_xstats { +struct tc_cake_xstats {
+ __u16 version; /* == 3, increments when struct extended */ + __u16 version; /* == 4, increments when struct extended */
+ __u8 max_tins; /* == TC_CAKE_MAX_TINS */ + __u8 max_tins; /* == TC_CAKE_MAX_TINS */
+ __u8 tin_cnt; /* <= TC_CAKE_MAX_TINS */ + __u8 tin_cnt; /* <= TC_CAKE_MAX_TINS */
+ +
@ -48,7 +48,8 @@
+ __u32 base_delay_us [TC_CAKE_MAX_TINS]; /* ~= delay to sparse flows */ + __u32 base_delay_us [TC_CAKE_MAX_TINS]; /* ~= delay to sparse flows */
+ __u16 sparse_flows [TC_CAKE_MAX_TINS]; + __u16 sparse_flows [TC_CAKE_MAX_TINS];
+ __u16 bulk_flows [TC_CAKE_MAX_TINS]; + __u16 bulk_flows [TC_CAKE_MAX_TINS];
+ __u32 last_skblen [TC_CAKE_MAX_TINS]; /* skb_headlen */ + __u16 unresponse_flows [TC_CAKE_MAX_TINS]; /* v4 - was u32 last_len */
+ __u16 spare [TC_CAKE_MAX_TINS]; /* v4 - split last_len */
+ __u32 max_skblen [TC_CAKE_MAX_TINS]; + __u32 max_skblen [TC_CAKE_MAX_TINS];
+ __u32 capacity_estimate; /* version 2 */ + __u32 capacity_estimate; /* version 2 */
+ __u32 memory_limit; /* version 3 */ + __u32 memory_limit; /* version 3 */
@ -68,7 +69,7 @@
--- /dev/null --- /dev/null
+++ b/tc/q_cake.c +++ b/tc/q_cake.c
@@ -0,0 +1,598 @@ @@ -0,0 +1,600 @@
+/* +/*
+ * Common Applications Kept Enhanced -- CAKE + * Common Applications Kept Enhanced -- CAKE
+ * + *
@ -557,11 +558,11 @@
+ +
+ switch(stnc->tin_cnt) { + switch(stnc->tin_cnt) {
+ case 4: + case 4:
+ fprintf(f, " Bulk Best Effort Video Voice\n"); + fprintf(f, " Bulk Best Effort Video Voice\n");
+ break; + break;
+ +
+ case 5: + case 5:
+ fprintf(f, " Low Loss Best Effort Low Delay Bulk Net Control\n"); + fprintf(f, " Low Loss Best Effort Low Delay Bulk Net Control\n");
+ break; + break;
+ +
+ default: + default:
@ -646,10 +647,12 @@
+ fprintf(f, "%12u", stnc->bulk_flows[i]); + fprintf(f, "%12u", stnc->bulk_flows[i]);
+ fprintf(f, "\n"); + fprintf(f, "\n");
+ +
+ fprintf(f, " last_len"); + if(stnc->version >= 4) {
+ for(i=0; i < stnc->tin_cnt; i++) + fprintf(f, " un_flows");
+ fprintf(f, "%12u", stnc->last_skblen[i]); + for(i=0; i < stnc->tin_cnt; i++)
+ fprintf(f, "\n"); + fprintf(f, "%12u", stnc->unresponse_flows[i]);
+ fprintf(f, "\n");
+ }
+ +
+ fprintf(f, " max_len "); + fprintf(f, " max_len ");
+ for(i=0; i < stnc->tin_cnt; i++) + for(i=0; i < stnc->tin_cnt; i++)