diff options
author | Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk> | 2016-06-20 17:00:44 +0200 |
---|---|---|
committer | Zoltan HERPAI <wigyori@uid0.hu> | 2016-06-20 17:00:44 +0200 |
commit | a4ac32b1db088b91c4748338d39700ad4df5706f (patch) | |
tree | 8968e14f65e2b34311665b95588962efef827ed5 /target | |
parent | ee57ff57f10937841b49380a8f1ef8e438021736 (diff) | |
download | master-187ad058-a4ac32b1db088b91c4748338d39700ad4df5706f.tar.gz master-187ad058-a4ac32b1db088b91c4748338d39700ad4df5706f.tar.bz2 master-187ad058-a4ac32b1db088b91c4748338d39700ad4df5706f.zip |
kernel: fq_codel match flows_cnt to limit sizing
OpenWRT changed the default fq_codel sch->limit from 10240 to 1024,
without also adjusting q->flows_cnt. Eric Dumazet explains below that
you must also adjust the buckets (q->flows_cnt) for this not to break.
Eric explains: Limit of 1024 packets and 1024 flows is not wise I think.
(If all buckets are in use, each bucket has a virtual queue of 1 packet,
which is almost the same than having no queue at all)
I suggest to have at least 8 packets per bucket, to let Codel have a
chance to trigger. So you could either reduce number of buckets to 128
(if memory is tight), or increase limit to 8192.
flows_cnt is now set to 1024/8=128
Signed-off-by: Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>
Diffstat (limited to 'target')
3 files changed, 12 insertions, 6 deletions
diff --git a/target/linux/generic/patches-3.18/660-fq_codel_defaults.patch b/target/linux/generic/patches-3.18/660-fq_codel_defaults.patch index 8c99e62cec..e0f73dedb9 100644 --- a/target/linux/generic/patches-3.18/660-fq_codel_defaults.patch +++ b/target/linux/generic/patches-3.18/660-fq_codel_defaults.patch @@ -1,11 +1,13 @@ --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c -@@ -387,7 +387,7 @@ static int fq_codel_init(struct Qdisc *s +@@ -387,8 +387,8 @@ static int fq_codel_init(struct Qdisc *s struct fq_codel_sched_data *q = qdisc_priv(sch); int i; - sch->limit = 10*1024; +- q->flows_cnt = 1024; + sch->limit = 1024; - q->flows_cnt = 1024; ++ q->flows_cnt = 128; q->quantum = psched_mtu(qdisc_dev(sch)); q->perturbation = prandom_u32(); + INIT_LIST_HEAD(&q->new_flows); diff --git a/target/linux/generic/patches-4.1/660-fq_codel_defaults.patch b/target/linux/generic/patches-4.1/660-fq_codel_defaults.patch index 8c99e62cec..e0f73dedb9 100644 --- a/target/linux/generic/patches-4.1/660-fq_codel_defaults.patch +++ b/target/linux/generic/patches-4.1/660-fq_codel_defaults.patch @@ -1,11 +1,13 @@ --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c -@@ -387,7 +387,7 @@ static int fq_codel_init(struct Qdisc *s +@@ -387,8 +387,8 @@ static int fq_codel_init(struct Qdisc *s struct fq_codel_sched_data *q = qdisc_priv(sch); int i; - sch->limit = 10*1024; +- q->flows_cnt = 1024; + sch->limit = 1024; - q->flows_cnt = 1024; ++ q->flows_cnt = 128; q->quantum = psched_mtu(qdisc_dev(sch)); q->perturbation = prandom_u32(); + INIT_LIST_HEAD(&q->new_flows); diff --git a/target/linux/generic/patches-4.4/660-fq_codel_defaults.patch b/target/linux/generic/patches-4.4/660-fq_codel_defaults.patch index cf4ff6fb18..5d99cd7fb4 100644 --- a/target/linux/generic/patches-4.4/660-fq_codel_defaults.patch +++ b/target/linux/generic/patches-4.4/660-fq_codel_defaults.patch @@ -1,11 +1,13 @@ --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c -@@ -412,7 +412,7 @@ static int fq_codel_init(struct Qdisc *s +@@ -412,8 +412,8 @@ static int fq_codel_init(struct Qdisc *s struct fq_codel_sched_data *q = qdisc_priv(sch); int i; - sch->limit = 10*1024; +- q->flows_cnt = 1024; + sch->limit = 1024; - q->flows_cnt = 1024; ++ q->flows_cnt = 128; q->quantum = psched_mtu(qdisc_dev(sch)); q->perturbation = prandom_u32(); + INIT_LIST_HEAD(&q->new_flows); |