mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-11-02 19:35:02 +00:00
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_QUEUES (1024)
|
||||||
#define CAKE_FLOW_MASK 63
|
#define CAKE_FLOW_MASK 63
|
||||||
#define CAKE_FLOW_NAT_FLAG 64
|
#define CAKE_FLOW_NAT_FLAG 64
|
||||||
#define CAKE_SPLIT_GSO_THRESHOLD (125000000) /* 1Gbps */
|
|
||||||
|
|
||||||
/* struct cobalt_params - contains codel and blue parameters
|
/* struct cobalt_params - contains codel and blue parameters
|
||||||
* @interval: codel initial drop rate
|
* @interval: codel initial drop rate
|
||||||
|
|
@ -2569,10 +2568,12 @@ static int cake_change(struct Qdisc *sch, struct nlattr *opt,
|
||||||
if (tb[TCA_CAKE_MEMORY])
|
if (tb[TCA_CAKE_MEMORY])
|
||||||
q->buffer_config_limit = nla_get_u32(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)
|
if (tb[TCA_CAKE_SPLIT_GSO]) {
|
||||||
|
if (!!nla_get_u32(tb[TCA_CAKE_SPLIT_GSO]))
|
||||||
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
|
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
|
||||||
else
|
else
|
||||||
q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO;
|
q->rate_flags &= ~CAKE_FLAG_SPLIT_GSO;
|
||||||
|
}
|
||||||
|
|
||||||
if (q->tins) {
|
if (q->tins) {
|
||||||
sch_tree_lock(sch);
|
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
|
q->target = 5000; /* 5ms: codel RFC argues
|
||||||
* for 5 to 10% of interval
|
* for 5 to 10% of interval
|
||||||
*/
|
*/
|
||||||
|
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
|
||||||
q->cur_tin = 0;
|
q->cur_tin = 0;
|
||||||
q->cur_flow = 0;
|
q->cur_flow = 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue