netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matt Mackall <mpm@selenic.com>
To: David Miller <davem@davemloft.net>
Cc: joe@perches.com, ilpo.jarvinen@helsinki.fi,
	akpm@linux-foundation.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, acme@redhat.com
Subject: Re: [PATCH 1/7] [NET]: uninline skb_put, de-bloats a lot
Date: Thu, 27 Mar 2008 19:11:35 -0500	[thread overview]
Message-ID: <1206663095.4122.82.camel@calx> (raw)
In-Reply-To: <20080327.150456.39560267.davem@davemloft.net>


On Thu, 2008-03-27 at 15:04 -0700, David Miller wrote:
> From: Joe Perches <joe@perches.com>
> Date: Thu, 27 Mar 2008 12:10:50 -0700
> 
> > On Thu, 2008-03-27 at 14:38 +0200, Ilpo Järvinen wrote:
> > > Allyesconfig (v2.6.24-mm1):
> > 
> > I think this change is only good in severely memory
> > limited uses.  This will very likely negatively impact
> > high speed networking.  It's a speed/size trade off.
> 
> I severely doubt this, the bulk of the overhead of
> skb_put() is the atomic operation, not whether the
> instructions get executed inline or not.

More generally, we have to weigh the cost of a function call against the
cost of a cache miss here or -somewhere else-. That is, running multiple
copies of this code inline means that much other code gets pushed out of
cache. Further, consolidating multiple copies of this code into one
means it's that much more likely to already be in cache when we hit it.

In the 486 era, when CPU performance was close to 1:1 with memory,
branches were more expensive than sequential memory fetches, and
registers were scarce, inlining made a fair amount of sense.

But now we've moved very far away from that indeed: CPU is orders of
magnitude faster than memory, branches are quite cheap, and register
are.. well, not quite as scarce. All of that means that a cache miss is
much more expensive than a function call.

Inlining typical only makes sense for fairly trivial transformations
(something you'd consider doing with a macro) where the code to set up a
function call is comparable to the size of the function itself and code
in innermost loops. And if the inline is in a header file, it's probably
not in the latter class.

In the case of this patch, removing 60-100k from the network stack means
we're almost certainly avoiding a lot of cache misses in the big picture
while taking a few cycle hit per packet in the smallest scale.

-- 
Mathematics is the supreme nostalgia of our time.


  parent reply	other threads:[~2008-03-28  0:12 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-27 12:37 [PATCH 0/7]: uninline some net related static inline in .h bloaters Ilpo Järvinen
2008-03-27 12:38 ` [PATCH 1/7] [NET]: uninline skb_put, de-bloats a lot Ilpo Järvinen
2008-03-27 12:38   ` [PATCH 2/7] [NET]: uninline skb_pull, " Ilpo Järvinen
2008-03-27 12:38     ` [PATCH 3/7] [NET]: uninline dev_alloc_skb, " Ilpo Järvinen
2008-03-27 12:38       ` [PATCH 4/7] [NET]: uninline skb_push, " Ilpo Järvinen
2008-03-27 12:38         ` [PATCH 5/7] [NET]: uninline dst_release Ilpo Järvinen
2008-03-27 12:38           ` [PATCH 6/7] [NET]: uninline skb_trim, de-bloats Ilpo Järvinen
2008-03-27 12:38             ` [PATCH 7/7] [SCTP]: Remove sctp_add_cmd_sf wrapper bloat Ilpo Järvinen
2008-03-28  0:54               ` David Miller
2008-03-28  0:54             ` [PATCH 6/7] [NET]: uninline skb_trim, de-bloats David Miller
2008-03-28  0:53           ` [PATCH 5/7] [NET]: uninline dst_release David Miller
2008-03-28  0:52         ` [PATCH 4/7] [NET]: uninline skb_push, de-bloats a lot David Miller
2008-03-27 23:36       ` [PATCH 3/7] [NET]: uninline dev_alloc_skb, " Denys Vlasenko
2008-03-28  0:52         ` David Miller
2008-03-28  1:42           ` Arnaldo Carvalho de Melo
2008-03-28 22:34           ` Denys Vlasenko
2008-03-28 22:57             ` David Miller
2008-03-29  4:52             ` Bill Fink
2008-03-28  0:51       ` David Miller
2008-03-27 19:10   ` [PATCH 1/7] [NET]: uninline skb_put, " Joe Perches
2008-03-27 22:04     ` David Miller
2008-03-28  0:02       ` Joe Perches
2008-03-28  0:04         ` David Miller
2008-03-28  0:11       ` Matt Mackall [this message]
2008-03-28  0:54         ` Joe Perches
2008-03-28  1:18           ` Matt Mackall
2008-03-28 19:56             ` Ilpo Järvinen
2008-03-28  0:43   ` David Miller
2008-03-28  0:54 ` [PATCH 0/7]: uninline some net related static inline in .h bloaters 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=1206663095.4122.82.camel@calx \
    --to=mpm@selenic.com \
    --cc=acme@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=ilpo.jarvinen@helsinki.fi \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).