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:
parent
c2bd469521
commit
6d7f54ccdb
2 changed files with 14 additions and 11 deletions
|
@ -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
|
||||||
|
|
|
@ -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++)
|
||||||
|
|
Loading…
Reference in a new issue