]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
sch_cake: Make gso-splitting configurable from userspace
authorDave Taht <dave.taht@gmail.com>
Fri, 27 Jul 2018 02:45:10 +0000 (19:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Jul 2018 20:38:20 +0000 (13:38 -0700)
This patch restores cake's deployed behavior at line rate to always
split gso, and makes gso splitting configurable from userspace.

running cake unlimited (unshaped) at 1gigE, local traffic:

no-split-gso bql limit: 131966
split-gso bql limit:   ~42392-45420

On this 4 stream test splitting gso apart results in halving the
observed interpacket latency at no loss in throughput.

Summary of tcp_nup test run 'gso-split' (at 2018-07-26 16:03:51.824728):

 Ping (ms) ICMP :         0.83         0.81 ms              341
 TCP upload avg :       235.43       235.39 Mbits/s         301
 TCP upload sum :       941.71       941.56 Mbits/s         301
 TCP upload::1  :       235.45       235.43 Mbits/s         271
 TCP upload::2  :       235.45       235.41 Mbits/s         289
 TCP upload::3  :       235.40       235.40 Mbits/s         288
 TCP upload::4  :       235.41       235.40 Mbits/s         291

verses

Summary of tcp_nup test run 'no-split-gso' (at 2018-07-26 16:37:23.563960):

                           avg       median          # data pts
 Ping (ms) ICMP :         1.67         1.73 ms              348
 TCP upload avg :       234.56       235.37 Mbits/s         301
 TCP upload sum :       938.24       941.49 Mbits/s         301
 TCP upload::1  :       234.55       235.38 Mbits/s         285
 TCP upload::2  :       234.57       235.37 Mbits/s         286
 TCP upload::3  :       234.58       235.37 Mbits/s         274
 TCP upload::4  :       234.54       235.42 Mbits/s         288

Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_cake.c

index 539c9490c3086c4120a48c24cf9a1c3ce44f44fe..35fc7252187c1f54fbcbceb827d7270381b2da5b 100644 (file)
@@ -80,7 +80,6 @@
 #define CAKE_QUEUES (1024)
 #define CAKE_FLOW_MASK 63
 #define CAKE_FLOW_NAT_FLAG 64
-#define CAKE_SPLIT_GSO_THRESHOLD (125000000) /* 1Gbps */
 
 /* struct cobalt_params - contains codel and blue parameters
  * @interval:  codel initial drop rate
@@ -2569,10 +2568,12 @@ static int cake_change(struct Qdisc *sch, struct nlattr *opt,
        if (tb[TCA_CAKE_MEMORY])
                q->buffer_config_limit = nla_get_u32(tb[TCA_CAKE_MEMORY]);
 
-       if (q->rate_bps && q->rate_bps <= CAKE_SPLIT_GSO_THRESHOLD)
-               q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
-       else
-               q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO;
+       if (tb[TCA_CAKE_SPLIT_GSO]) {
+               if (!!nla_get_u32(tb[TCA_CAKE_SPLIT_GSO]))
+                       q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
+               else
+                       q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO;
+       }
 
        if (q->tins) {
                sch_tree_lock(sch);
@@ -2608,7 +2609,7 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt,
        q->target   =   5000; /* 5ms: codel RFC argues
                               * for 5 to 10% of interval
                               */
-
+       q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
        q->cur_tin = 0;
        q->cur_flow  = 0;