[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20160524.144939.1690436082295084190.davem@davemloft.net>
Date: Tue, 24 May 2016 14:49:39 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: eric.dumazet@...il.com
Cc: alexander.duyck@...il.com, netdev@...r.kernel.org,
aduyck@...antis.com, john.r.fastabend@...el.com, jhs@...atatu.com,
brouer@...hat.com
Subject: Re: [PATCH net] net_sched: avoid too many hrtimer_start() calls
From: Eric Dumazet <eric.dumazet@...il.com>
Date: Mon, 23 May 2016 14:24:56 -0700
> From: Eric Dumazet <edumazet@...gle.com>
>
> I found a serious performance bug in packet schedulers using hrtimers.
>
> sch_htb and sch_fq are definitely impacted by this problem.
>
> We constantly rearm high resolution timers if some packets are throttled
> in one (or more) class, and other packets are flying through qdisc on
> another (non throttled) class.
>
> hrtimer_start() does not have the mod_timer() trick of doing nothing if
> expires value does not change :
>
> if (timer_pending(timer) &&
> timer->expires == expires)
> return 1;
>
> This issue is particularly visible when multiple cpus can queue/dequeue
> packets on the same qdisc, as hrtimer code has to lock a remote base.
>
> I used following fix :
>
> 1) Change htb to use qdisc_watchdog_schedule_ns() instead of open-coding
> it.
>
> 2) Cache watchdog prior expiration. hrtimer might provide this, but I
> prefer to not rely on some hrtimer internal.
>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
This looks fine, applied, thanks Eric.
Powered by blists - more mailing lists