-
- Downloads
net: sched: do not acquire qdisc spinlock in qdisc/class stats dump
Large tc dumps (tc -s {qdisc|class} sh dev ethX) done by Google BwE host agent [1] are problematic at scale : For each qdisc/class found in the dump, we currently lock the root qdisc spinlock in order to get stats. Sampling stats every 5 seconds from thousands of HTB classes is a challenge when the root qdisc spinlock is under high pressure. Not only the dumps take time, they also slow down the fast path (queue/dequeue packets) by 10 % to 20 % in some cases. An audit of existing qdiscs showed that sch_fq_codel is the only qdisc that might need the qdisc lock in fq_codel_dump_stats() and fq_codel_dump_class_stats() In v2 of this patch, I now use the Qdisc running seqcount to provide consistent reads of packets/bytes counters, regardless of 32/64 bit arches. I also changed rate estimators to use the same infrastructure so that they no longer need to lock root qdisc lock. [1] http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43838.pdf Signed-off-by:Eric Dumazet <edumazet@google.com> Cc: Cong Wang <xiyou.wangcong@gmail.com> Cc: Jamal Hadi Salim <jhs@mojatatu.com> Cc: John Fastabend <john.fastabend@gmail.com> Cc: Kevin Athey <kda@google.com> Cc: Xiaotian Pei <xiaotian@google.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- Documentation/networking/gen_stats.txt 1 addition, 1 deletionDocumentation/networking/gen_stats.txt
- include/net/gen_stats.h 8 additions, 4 deletionsinclude/net/gen_stats.h
- include/net/sch_generic.h 8 additions, 0 deletionsinclude/net/sch_generic.h
- net/core/gen_estimator.c 16 additions, 8 deletionsnet/core/gen_estimator.c
- net/core/gen_stats.c 23 additions, 11 deletionsnet/core/gen_stats.c
- net/netfilter/xt_RATEEST.c 1 addition, 1 deletionnet/netfilter/xt_RATEEST.c
- net/sched/act_api.c 2 additions, 2 deletionsnet/sched/act_api.c
- net/sched/act_police.c 2 additions, 1 deletionnet/sched/act_police.c
- net/sched/sch_api.c 11 additions, 10 deletionsnet/sched/sch_api.c
- net/sched/sch_atm.c 2 additions, 1 deletionnet/sched/sch_atm.c
- net/sched/sch_cbq.c 6 additions, 3 deletionsnet/sched/sch_cbq.c
- net/sched/sch_drr.c 6 additions, 3 deletionsnet/sched/sch_drr.c
- net/sched/sch_fq_codel.c 11 additions, 4 deletionsnet/sched/sch_fq_codel.c
- net/sched/sch_hfsc.c 5 additions, 5 deletionsnet/sched/sch_hfsc.c
- net/sched/sch_htb.c 6 additions, 5 deletionsnet/sched/sch_htb.c
- net/sched/sch_mq.c 1 addition, 1 deletionnet/sched/sch_mq.c
- net/sched/sch_mqprio.c 7 additions, 4 deletionsnet/sched/sch_mqprio.c
- net/sched/sch_multiq.c 2 additions, 1 deletionnet/sched/sch_multiq.c
- net/sched/sch_prio.c 2 additions, 1 deletionnet/sched/sch_prio.c
- net/sched/sch_qfq.c 6 additions, 3 deletionsnet/sched/sch_qfq.c
Loading
Please register or sign in to comment