public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "J.A. Magallon" <jamagallon@able.es>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: "J.A. Magallon" <jamagallon@able.es>,
	Marcelo Tosatti <marcelo@conectiva.com.br>,
	Lista Linux-Kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] 2.4: always_inline for gcc3
Date: Wed, 27 Aug 2003 18:14:21 +0200	[thread overview]
Message-ID: <20030827161421.GA9204@werewolf.able.es> (raw)
In-Reply-To: <1061995054.22721.31.camel@dhcp23.swansea.linux.org.uk>; from alan@lxorguk.ukuu.org.uk on Wed, Aug 27, 2003 at 16:37:35 +0200


On 08.27, Alan Cox wrote:
> On Maw, 2003-08-26 at 17:24, J.A. Magallon wrote:
> > gcc3 did not inline big functions, even if they were marked as inline
> > Thread:
> > http://marc.theaimsgroup.com/?t=103632325600005&r=1&w=2
> > Things like memcpy and copy_to/from_user were affected.
> > They were not inlined and you got tons of instances in vmlinux.
> 
> The more interesting question you want to answer first is - was
> gcc right. Repeated code is bad for cache
> 

That would be true for a regular function, too much inlining can be bad.
But __constant_c_and_count_memset is special, you know.
It is written like a big switch:

copy( size )
	switch (size)
		case 1: ...
		case 2: ...
		...

Author and users relay on gcc's optimizer:
- gcc inlines it
- control variable in switch is constant at compile time
- switch is killed and just the suitable case stays.
(\label{1})

If gcc does not inline it, there are a ton of users of copy_to/from
and memset that execute the full switch() (w/o the patch, 150 out-of-line
instances of __constant_c_and_count_memset stay, with the patch
only 16, so it means gcc failed to inline about 140...).
Depending on which users are not inlined, this can be more or less
harmfull in terms of performance, but sure it is not the designed
behaviour.

And of course, I can be totally wrong. Comments welcome.

Ah, all this supposing that gcc still does correctly what I said
in \ref{1} ;)

-- 
J.A. Magallon <jamagallon@able.es>      \                 Software is like sex:
werewolf.able.es                         \           It's better when it's free
Mandrake Linux release 9.2 (Cooker) for i586
Linux 2.4.22-jam1m (gcc 3.3.1 (Mandrake Linux 9.2 3.3.1-1mdk))

      reply	other threads:[~2003-08-27 16:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-26  8:24 [PATCH] 2.4: always_inline for gcc3 J.A. Magallon
2003-08-26 12:15 ` Marcelo Tosatti
2003-08-26 16:24   ` J.A. Magallon
2003-08-26 17:00     ` J.A. Magallon
2003-08-27 14:37     ` Alan Cox
2003-08-27 16:14       ` J.A. Magallon [this message]

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=20030827161421.GA9204@werewolf.able.es \
    --to=jamagallon@able.es \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo@conectiva.com.br \
    /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