so, I went and tested that patch. Turned out len was signed... I'd put
it in the wrong place... and the very act of doing that test at all
permutes the result.
cake unshaped at 1gig, always splitting, ends up with a bql value of
about 42,000, full throughput, e.g.
if (skb_is_gso(skb)) {
...
avg median # data pts
Ping (ms) ICMP : 0.80 0.77 ms 341
TCP upload avg : 235.40 235.39 Mbits/s 301
TCP upload sum : 941.61 941.55 Mbits/s 301
TCP upload::1 : 235.36 235.39 Mbits/s 290
TCP upload::2 : 235.46 235.39 Mbits/s 291
TCP upload::3 : 235.38 235.45 Mbits/s 275
TCP upload::4 : 235.41 235.44 Mbits/s 278
conditionally splitting, either never or always, gives me bql of: 140852
if (skb_is_gso(skb) && len >= q->split_gso) {
avg median # data pts
Ping (ms) ICMP : 1.64 1.71 ms 347
TCP upload avg : 235.40 235.38 Mbits/s 301
TCP upload sum : 941.59 941.52 Mbits/s 301
TCP upload::1 : 235.35 235.44 Mbits/s 280
TCP upload::2 : 235.40 235.39 Mbits/s 276
TCP upload::3 : 235.47 235.43 Mbits/s 276
TCP upload::4 : 235.37 235.45 Mbits/s 282
the cache line miss can't possibly have cost that much. (?) Guess I
have to go check the range of len.
I WANT MY 800usec back!
PS For giggles, I accidentally ended up using pfifo_fast for one run.
I thought I'd broke something.
Summary of tcp_nup test run 'split_gso_test_again_len_512000_bql_auto'
(at 2018-07-25 20:51:10.533339):
avg median # data pts
Ping (ms) ICMP : 3.32 3.59 ms 347
TCP upload avg : 235.38 235.38 Mbits/s 301
TCP upload sum : 941.52 941.54 Mbits/s 301
TCP upload::1 : 152.48 150.93 Mbits/s 281
TCP upload::2 : 152.54 150.35 Mbits/s 286
TCP upload::3 : 483.96 491.12 Mbits/s 284
TCP upload::4 : 152.54 150.49 Mbits/s 284
On Tue, Jul 24, 2018 at 10:01 PM Dave Taht <[email protected]> wrote:
>
> Ah... 1gbit, BQL at a sane size, 750 usec RTT. I guess I have to go
> compile this patch now.....
>
>
> --
>
> Dave Täht
> CEO, TekLibre, LLC
> http://www.teklibre.com
> Tel: 1-669-226-2619
--
Dave Täht
CEO, TekLibre, LLC
http://www.teklibre.com
Tel: 1-669-226-2619
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index 539c949..488cfc6 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -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
@@ -164,6 +163,7 @@ struct cake_tin_data {
u16 unresponsive_flow_count;
u32 max_skblen;
+ u32 split_gso;
struct list_head new_flows;
struct list_head old_flows;
@@ -260,7 +260,6 @@ enum {
CAKE_FLAG_AUTORATE_INGRESS = BIT(1),
CAKE_FLAG_INGRESS = BIT(2),
CAKE_FLAG_WASH = BIT(3),
- CAKE_FLAG_SPLIT_GSO = BIT(4)
};
/* COBALT operates the Codel and BLUE algorithms in parallel, in order to
@@ -1651,7 +1650,7 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
if (unlikely(len > b->max_skblen))
b->max_skblen = len;
- if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) {
+ if (skb_is_gso(skb) && q->split_gso < len ) {
struct sk_buff *segs, *nskb;
netdev_features_t features = netif_skb_features(skb);
unsigned int slen = 0;
@@ -2569,10 +2568,8 @@ 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])
+ q->split_gso = nla_get_u32(tb[TCA_CAKE_SPLIT_GSO]);
if (q->tins) {
sch_tree_lock(sch);
@@ -2611,7 +2608,7 @@ static int cake_init(struct Qdisc *sch, struct nlattr *opt,
q->cur_tin = 0;
q->cur_flow = 0;
-
+ q->split_gso = ~0; /* always split gso packets */
qdisc_watchdog_init(&q->watchdog, sch);
if (opt) {
@@ -2729,8 +2726,7 @@ static int cake_dump(struct Qdisc *sch, struct sk_buff *skb)
if (nla_put_u32(skb, TCA_CAKE_MPU, q->rate_mpu))
goto nla_put_failure;
- if (nla_put_u32(skb, TCA_CAKE_SPLIT_GSO,
- !!(q->rate_flags & CAKE_FLAG_SPLIT_GSO)))
+ if (nla_put_u32(skb, TCA_CAKE_SPLIT_GSO, q->split_gso))
goto nla_put_failure;
return nla_nest_end(skb, opts);
_______________________________________________
Cake mailing list
[email protected]
https://lists.bufferbloat.net/listinfo/cake