From: Eric Dumazet <eric.dumazet@gmail.com>
To: Jesper Dangaard Brouer <brouer@redhat.com>
Cc: "Toke Høiland-Jørgensen" <toke@toke.dk>,
"Mike Frysinger" <vapier@gentoo.org>,
"Jiri Pirko" <jpirko@redhat.com>,
netdev@vger.kernel.org, "Jiri Benc" <jbenc@redhat.com>,
"Patrick McHardy" <kaber@trash.net>,
"Steven Barth" <cyrus@openwrt.org>,
bloat@lists.bufferbloat.net, "David Miller" <davem@redhat.com>,
"Jussi Kivilinna" <jussi.kivilinna@mbnet.fi>,
"Felix Fietkau" <nbd@nbd.name>, "Michal Soltys" <soltys@ziu.info>
Subject: Re: [Bloat] Bad shaping at low rates, after commit 56b765b79 (htb: improved accuracy at high rates)
Date: Tue, 04 Jun 2013 08:55:06 -0700 [thread overview]
Message-ID: <1370361306.24311.214.camel@edumazet-glaptop> (raw)
In-Reply-To: <1370359133.24311.208.camel@edumazet-glaptop>
On Tue, 2013-06-04 at 08:18 -0700, Eric Dumazet wrote:
> I have a good idea of what's going on for htb at low rates, I am testing
> a fix, thanks for the report !
>
Yes, we need to convert whole thing to use ns units, instead
of a mix of 64ns and 1ns units.
Please test the following patch :
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c
index 79b1876..6c53341 100644
--- a/net/sched/sch_htb.c
+++ b/net/sched/sch_htb.c
@@ -109,7 +109,7 @@ struct htb_class {
} un;
struct rb_node node[TC_HTB_NUMPRIO]; /* node for self or feed tree */
struct rb_node pq_node; /* node for event queue */
- psched_time_t pq_key;
+ s64 pq_key;
int prio_activity; /* for which prios are we active */
enum htb_cmode cmode; /* current mode of the class */
@@ -124,7 +124,7 @@ struct htb_class {
s64 buffer, cbuffer; /* token bucket depth/rate */
psched_tdiff_t mbuffer; /* max wait time */
s64 tokens, ctokens; /* current number of tokens */
- psched_time_t t_c; /* checkpoint time */
+ s64 t_c; /* checkpoint time */
};
struct htb_sched {
@@ -141,7 +141,7 @@ struct htb_sched {
struct rb_root wait_pq[TC_HTB_MAXDEPTH];
/* time of nearest event per level (row) */
- psched_time_t near_ev_cache[TC_HTB_MAXDEPTH];
+ s64 near_ev_cache[TC_HTB_MAXDEPTH];
int defcls; /* class where unclassified flows go to */
@@ -149,7 +149,7 @@ struct htb_sched {
struct tcf_proto *filter_list;
int rate2quantum; /* quant = rate / rate2quantum */
- psched_time_t now; /* cached dequeue time */
+ s64 now; /* cached dequeue time */
struct qdisc_watchdog watchdog;
/* non shaped skbs; let them go directly thru */
@@ -664,8 +664,8 @@ static void htb_charge_class(struct htb_sched *q, struct htb_class *cl,
* next pending event (0 for no event in pq, q->now for too many events).
* Note: Applied are events whose have cl->pq_key <= q->now.
*/
-static psched_time_t htb_do_events(struct htb_sched *q, int level,
- unsigned long start)
+static s64 htb_do_events(struct htb_sched *q, int level,
+ unsigned long start)
{
/* don't run for longer than 2 jiffies; 2 is used instead of
* 1 to simplify things when jiffy is going to be incremented
@@ -857,7 +857,7 @@ static struct sk_buff *htb_dequeue(struct Qdisc *sch)
struct sk_buff *skb;
struct htb_sched *q = qdisc_priv(sch);
int level;
- psched_time_t next_event;
+ s64 next_event;
unsigned long start_at;
/* try to dequeue direct packets as high prio (!) to minimize cpu work */
@@ -880,7 +880,7 @@ ok:
for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
/* common case optimization - skip event handler quickly */
int m;
- psched_time_t event;
+ s64 event;
if (q->now >= q->near_ev_cache[level]) {
event = htb_do_events(q, level, start_at);
@@ -1200,7 +1200,7 @@ static void htb_parent_to_leaf(struct htb_sched *q, struct htb_class *cl,
parent->un.leaf.q = new_q ? new_q : &noop_qdisc;
parent->tokens = parent->buffer;
parent->ctokens = parent->cbuffer;
- parent->t_c = psched_get_time();
+ parent->t_c = ktime_to_ns(ktime_get());
parent->cmode = HTB_CAN_SEND;
}
@@ -1417,8 +1417,8 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
/* set class to be in HTB_CAN_SEND state */
cl->tokens = PSCHED_TICKS2NS(hopt->buffer);
cl->ctokens = PSCHED_TICKS2NS(hopt->cbuffer);
- cl->mbuffer = 60 * PSCHED_TICKS_PER_SEC; /* 1min */
- cl->t_c = psched_get_time();
+ cl->mbuffer = 60ULL * NSEC_PER_SEC; /* 1min */
+ cl->t_c = ktime_to_ns(ktime_get());
cl->cmode = HTB_CAN_SEND;
/* attach to the hash list and parent's family */
next prev parent reply other threads:[~2013-06-04 15:55 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-29 13:13 [Bloat] tc linklayer ADSL calc broken " Jesper Dangaard Brouer
2013-05-29 15:52 ` Eric Dumazet
2013-05-29 22:50 ` Stephen Hemminger
2013-05-29 23:18 ` Eric Dumazet
2013-05-30 9:15 ` Jesper Dangaard Brouer
2013-05-30 9:52 ` Steinar H. Gunderson
2013-05-30 0:34 ` Dave Taht
2013-05-30 8:09 ` Jesper Dangaard Brouer
2013-05-30 7:51 ` Jesper Dangaard Brouer
2013-05-30 14:39 ` Eric Dumazet
2013-05-30 15:55 ` Jesper Dangaard Brouer
2013-06-02 21:15 ` Eric Dumazet
2013-06-04 12:13 ` [Bloat] Bad shaping at low rates, " Jesper Dangaard Brouer
2013-06-04 15:18 ` Eric Dumazet
2013-06-04 15:55 ` Eric Dumazet [this message]
2013-06-04 16:02 ` Eric Dumazet
2013-06-04 17:11 ` [Bloat] [PATCH] net_sched: htb: do not mix 1ns and 64ns time units Eric Dumazet
2013-06-04 20:21 ` Jesper Dangaard Brouer
2013-06-04 20:26 ` Dave Taht
2013-06-04 21:02 ` Eric Dumazet
2013-06-04 20:50 ` Eric Dumazet
2013-06-05 0:44 ` David Miller
2013-06-06 13:55 ` [Bloat] RFC: Proposed fix for tc linklayer calc broken after commit 56b765b79 (htb: improved accuracy at high rates) Jesper Dangaard Brouer
2013-06-06 14:28 ` Eric Dumazet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.bufferbloat.net/postorius/lists/bloat.lists.bufferbloat.net/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1370361306.24311.214.camel@edumazet-glaptop \
--to=eric.dumazet@gmail.com \
--cc=bloat@lists.bufferbloat.net \
--cc=brouer@redhat.com \
--cc=cyrus@openwrt.org \
--cc=davem@redhat.com \
--cc=jbenc@redhat.com \
--cc=jpirko@redhat.com \
--cc=jussi.kivilinna@mbnet.fi \
--cc=kaber@trash.net \
--cc=nbd@nbd.name \
--cc=netdev@vger.kernel.org \
--cc=soltys@ziu.info \
--cc=toke@toke.dk \
--cc=vapier@gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox