Re: [RFC PATCH 3/8] [NET]: uninline dev_alloc_skb, de-bloats a lot

From: Ilpo Järvinen
Date: Wed Mar 12 2008 - 11:27:28 EST


On Thu, 21 Feb 2008, Ilpo Järvinen wrote:

> On Wed, 20 Feb 2008, Jan Engelhardt wrote:
>
> > On Feb 20 2008 17:27, Patrick McHardy wrote:
> >
> > > __dev_alloc_skb() is also an inline function which performs
> > > some extra work. Which raises the question - if dev_alloc_skb()
> >
> > I'd like to see the results when {__dev_alloc_skb is externed
> > and dev_alloc_skb remains inlined}.
>
> The results are right under your nose already... ;-)
> See from the list of the series introduction:
>
> http://marc.info/?l=linux-netdev&m=120351526210711&w=2
>
> IMHO more interesting number (which I currently don't have) is the
> _remaining_ benefits of uninlining __dev_alloc_skb after
> dev_alloc_skb was first uninlined.

I've measured this now... Without many debug CONFIGs (in v2.6.25-rc2-mm1),
the dev_alloc_skb is much less than 23kB:

382 funcs, 157 +, 12335 -, diff: -12178 --- dev_alloc_skb
dev_alloc_skb | +37

...and on top of that, I got only this:
48 funcs, 111 +, 836 -, diff: -725 --- __dev_alloc_skb

Not that impressive compared with many much worse cases (wasn't a big
surprise because there were fewer callsites for the latter).

Anyway, would I uninline it (or one some another function that has such
two variants that are good candidates for uninlining), should I try to
avoid deepening the call-chain by two functions? To me it seems that only
way to fool gcc to do that for sure would be using some trick like this:
Rename __dev_alloc_skb to ___dev_alloc_skb in the header (with appropriate
don't ever call this due to bloat comment added) and both __dev_alloc_skb
and dev_alloc_skb could then be made to call that one in .c file.
Otherwise I'm not that sure gcc wouldn't try to be too clever if I just
use inline in .c file.

--
i.