Message ID | 1505763382.29839.27.camel@edumazet-glaptop3.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net_sched: sch_htb: add per class overlimits counter | expand |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Mon, 18 Sep 2017 12:36:22 -0700 > From: Eric Dumazet <edumazet@google.com> > > HTB qdisc overlimits counter is properly increased, but we have no per > class counter, meaning it is difficult to diagnose HTB problems. > > This patch adds this counter, visible in "tc -s class show dev eth0", > with current iproute2. > > Signed-off-by: Eric Dumazet <edumazet@google.com> > Reported-by: Denys Fedoryshchenko <nuclearcat@nuclearcat.com> Applied, thanks Eric.
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 7e148376ba528efabe5a53a09653f9161c264be7..c6d7ae81b41f4e277afb93a3003fefcd3f27de35 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c @@ -142,6 +142,7 @@ struct htb_class { struct rb_node node[TC_HTB_NUMPRIO]; /* node for self or feed tree */ unsigned int drops ____cacheline_aligned_in_smp; + unsigned int overlimits; }; struct htb_level { @@ -533,6 +534,9 @@ htb_change_class_mode(struct htb_sched *q, struct htb_class *cl, s64 *diff) if (new_mode == cl->cmode) return; + if (new_mode == HTB_CANT_SEND) + cl->overlimits++; + if (cl->prio_activity) { /* not necessary: speed optimization */ if (cl->cmode != HTB_CANT_SEND) htb_deactivate_prios(q, cl); @@ -1143,6 +1147,7 @@ htb_dump_class_stats(struct Qdisc *sch, unsigned long arg, struct gnet_dump *d) struct htb_class *cl = (struct htb_class *)arg; struct gnet_stats_queue qs = { .drops = cl->drops, + .overlimits = cl->overlimits, }; __u32 qlen = 0;