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>
This commit is contained in:
		 Kevin Darbyshire-Bryant
					Kevin Darbyshire-Bryant
				
			
				
					committed by
					
						 John Crispin
						John Crispin
					
				
			
			
				
	
			
			
			 John Crispin
						John Crispin
					
				
			
						parent
						
							374cae9e6f
						
					
				
				
					commit
					e288e1bd32
				
			| @@ -1,11 +1,13 @@ | |||||||
| --- a/net/sched/sch_fq_codel.c | --- a/net/sched/sch_fq_codel.c | ||||||
| +++ b/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); |  	struct fq_codel_sched_data *q = qdisc_priv(sch); | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| -	sch->limit = 10*1024; | -	sch->limit = 10*1024; | ||||||
|  | -	q->flows_cnt = 1024; | ||||||
| +	sch->limit = 1024; | +	sch->limit = 1024; | ||||||
|  	q->flows_cnt = 1024; | +	q->flows_cnt = 128; | ||||||
|  	q->quantum = psched_mtu(qdisc_dev(sch)); |  	q->quantum = psched_mtu(qdisc_dev(sch)); | ||||||
|  	q->perturbation = prandom_u32(); |  	q->perturbation = prandom_u32(); | ||||||
|  |  	INIT_LIST_HEAD(&q->new_flows); | ||||||
|   | |||||||
| @@ -1,11 +1,13 @@ | |||||||
| --- a/net/sched/sch_fq_codel.c | --- a/net/sched/sch_fq_codel.c | ||||||
| +++ b/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); |  	struct fq_codel_sched_data *q = qdisc_priv(sch); | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| -	sch->limit = 10*1024; | -	sch->limit = 10*1024; | ||||||
|  | -	q->flows_cnt = 1024; | ||||||
| +	sch->limit = 1024; | +	sch->limit = 1024; | ||||||
|  	q->flows_cnt = 1024; | +	q->flows_cnt = 128; | ||||||
|  	q->quantum = psched_mtu(qdisc_dev(sch)); |  	q->quantum = psched_mtu(qdisc_dev(sch)); | ||||||
|  	q->perturbation = prandom_u32(); |  	q->perturbation = prandom_u32(); | ||||||
|  |  	INIT_LIST_HEAD(&q->new_flows); | ||||||
|   | |||||||
| @@ -1,11 +1,13 @@ | |||||||
| --- a/net/sched/sch_fq_codel.c | --- a/net/sched/sch_fq_codel.c | ||||||
| +++ b/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); |  	struct fq_codel_sched_data *q = qdisc_priv(sch); | ||||||
|  	int i; |  	int i; | ||||||
|   |   | ||||||
| -	sch->limit = 10*1024; | -	sch->limit = 10*1024; | ||||||
|  | -	q->flows_cnt = 1024; | ||||||
| +	sch->limit = 1024; | +	sch->limit = 1024; | ||||||
|  	q->flows_cnt = 1024; | +	q->flows_cnt = 128; | ||||||
|  	q->quantum = psched_mtu(qdisc_dev(sch)); |  	q->quantum = psched_mtu(qdisc_dev(sch)); | ||||||
|  	q->perturbation = prandom_u32(); |  	q->perturbation = prandom_u32(); | ||||||
|  |  	INIT_LIST_HEAD(&q->new_flows); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user