sch_cake: Make gso-splitting configurable from userspace
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>
This commit is contained in:
parent
27defe9d8f
commit
2db6dc2662
1 changed files with 7 additions and 6 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue