From: Eric Dumazet <dada1@cosmosbay.com>
To: Andi Kleen <andi@firstfloor.org>
Cc: "David S. Miller" <davem@davemloft.net>,
Linux Netdev List <netdev@vger.kernel.org>
Subject: Re: [PATCH] NET : rt_check_expire() can take a long time, add a cond_resched()
Date: Thu, 15 Nov 2007 09:25:59 +0100 [thread overview]
Message-ID: <473C0297.5090004@cosmosbay.com> (raw)
In-Reply-To: <p73r6isc6ev.fsf@bingen.suse.de>
Andi Kleen a écrit :
> Eric Dumazet <dada1@cosmosbay.com> writes:
>> Using a "if (need_resched())" test before calling "cond_resched();" is
>> necessary to avoid spending too much time doing the resched check.
>
> The only difference between cond_resched() and if (need_resched())
> cond_resched() is one function call less and one might_sleep less. If
> the might_sleep or the function call are really problems (did you
> measure it? -- i doubt it somewhat) then it would be better to fix the
> generic code to either inline that or supply a __cond_resched()
> without might_sleep.
Please note that :
if (need_resched())
cond_resched();
will re-test need_resched() once cond_resched() is called.
So it may sound unnecessary but in the rt_check_expire() case, with a loop
potentially doing XXX.XXX iterations, being able to bypass the function call
is a clear win (in my bench case, 25 ms instead of 88 ms). Impact on I-cache
is irrelevant here as this rt_check_expires() runs once every 60 sec.
I think the actual cond_resched() is fine for other uses in the kernel, that
are not used in a loop : In the general case, kernel text size should be as
small as possible to reduce I-cache pressure, so a function call is better
than an inline.
>
> A cheaper change might have been to just limit the number of buckets
> scanned.
>
Well, not in some particular cases, when there are 3 millions of routes for
example in the cache. We really want to scan/free them eventually :)
An admin already has the possibility to tune
/proc/sys/net/ipv4/route/gc_interval and /proc/sys/net/ipv4/route/gc_timeout,
so on a big cache, it will probably set gc_interval to 1 instead of 60
Next step will be to move "ip route flush cache" and rt_secret_rebuild()
handling from softirq to process context too, since this still can kill a machine.
next prev parent reply other threads:[~2007-11-15 8:26 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-14 21:34 [PATCH] NET : rt_check_expire() can take a long time, add a cond_resched() Eric Dumazet
2007-11-15 0:13 ` David Miller
2007-11-15 7:30 ` Andi Kleen
2007-11-15 7:37 ` Herbert Xu
2007-11-15 8:25 ` Eric Dumazet [this message]
2007-11-15 8:57 ` David Miller
2007-11-17 13:08 ` Andi Kleen
2007-11-17 16:23 ` Eric Dumazet
2007-11-17 21:46 ` Andi Kleen
2007-11-18 0:27 ` David Miller
2007-11-15 8:52 ` David Miller
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=473C0297.5090004@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=andi@firstfloor.org \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.