Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Jan 2005 15:23:34 -0600 (CST)
From:      Mike Silbersack <silby@silby.com>
To:        Colin Percival <cperciva@freebsd.org>
Cc:        current@freebsd.org
Subject:   Re: tcp_isn_tick() / dummynet() callout madness ?
Message-ID:  <20050130151427.U59844@odysseus.silby.com>
In-Reply-To: <41FD24C2.5070700@freebsd.org>
References:  <Pine.NEB.3.96L.1050130112410.15336A-100000@fledge.watson.org> <41FD24C2.5070700@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On Sun, 30 Jan 2005, Colin Percival wrote:

> Robert Watson wrote:
>> since the callout_reset() is one of the more
>> expensive parts of this code, Colin has been looking at some locking
>> optimizations to lower the cost.
>
> To elaborate somewhat: I think I can avoid the spinlock cost when
> callouts reset themselves (which is the case here).  However, while
> this will reduce the time spent in the callouts themselves, it's
> really only a 50% solution -- softclock locks and unlocks the callout
> spin lock each time it launches a callout.  If we're spending 5% of
> our cpu time in these two callouts, then they're actually responsible
> for using 10% of our cpu time; I think I can cut that in half, but in
> the end we can't avoid the cost of a mtx_lock_spin / mtx_unlock_spin
> pair (in softclock) for each callout.
>
> Colin Percival

Is there any way to get around that cost with some relatively simple 
change to the callout API?  Just a few places in the kernel account for 
most of the use of callouts, so even if a rewrite of those would be 
necessary, it should pay off.

Or, potentially crazy idea here; instead of incurring the cost of a 
spinlock to remove a callout entry from a bucket, could you do some atomic 
operation to mark that entry as done, and then only remove those entries 
once and a while?

I guess if spinlocks weren't so expensive, this wouldn't be a big deal... 
why do they need to be spinlocks? :)

Mike "Silby" Silbersack



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050130151427.U59844>