From: Andi Kleen <ak@suse.de>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Denis Vlasenko <vda@port.imtp.ilyichevsk.odessa.ua>,
Andi Kleen <ak@suse.de>,
linux-kernel@vger.kernel.org
Subject: Re: Semaphore assembly-code bug
Date: Sun, 31 Oct 2004 02:39:34 +0200 [thread overview]
Message-ID: <20041031003934.GA19396@wotan.suse.de> (raw)
In-Reply-To: <Pine.LNX.4.58.0410301040050.28839@ppc970.osdl.org>
> I personally am a _huge_ believer in small code.
>
> The sequence
>
> popl %eax
> popl %ecx
> popl %edx
> popl %eax
>
> is four bytes. In contrast, the three moves and an add is 15 bytes. That's
> almost 4 times as big.
Using the long stack setup code was found to be a significant
win when enough registers were saved (several percent in real benchmarks)
on K8 gcc. It speed up all function calls considerably because it
eliminates several stalls for each function entry/exit. The popls
will all depend on each other because of their implicied reference
to esp.
Yes, it bloats the code, but function calls happen so often that having them
faster is really noticeable.
The K8 has quite big caches and is not decoding limited, so it
wasn't a too bad tradeoff there.
Ideally you would want to only do it on hot functions and optimize
rarely called functions for code size, but that would require profile
feedback which is often not feasible (JITs have an advantage here)
Unfortunately I don't think it is practically feasible for the kernel because
we rely on to be able to recreate the same vmlinuxs for debugging.
[It's a pity actually because modern compilers do a lot better
with profile feedback]
On P4 on the other hand it doesn't help at all and only makes
the code bigger. I did it from hand in the x86-64 syscall
code too (that was before there was EM64T, but I still think it was a
good idea). Perhaps AMD adds special hardware in some future CPU that
also makes it unnecessary, but currently it's like this and it helps.
-Andi
next prev parent reply other threads:[~2004-10-31 0:40 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <Pine.LNX.4.58.0410181540080.2287@ppc970.osdl.org.suse.lists.linux.kernel>
[not found] ` <417550FB.8020404@drdos.com.suse.lists.linux.kernel>
[not found] ` <1098218286.8675.82.camel@mentorng.gurulabs.com.suse.lists.linux.kernel>
[not found] ` <41757478.4090402@drdos.com.suse.lists.linux.kernel>
[not found] ` <20041020034524.GD10638@michonline.com.suse.lists.linux.kernel>
[not found] ` <1098245904.23628.84.camel@krustophenia.net.suse.lists.linux.kernel>
[not found] ` <1098247307.23628.91.camel@krustophenia.net.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.61.0410200744310.10521@chaos.analogic.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.61.0410290805570.11823@chaos.analogic.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.58.0410290740120.28839@ppc970.osdl.org.suse.lists.linux.kernel>
[not found] ` <41826A7E.6020801@domdv.de.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.61.0410291255400.17270@chaos.analogic.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.58.0410291103000.28839@ppc970.osdl.org.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.61.0410291631250.8616@twinlark.arctic.org.suse.lists.linux.kernel>
2004-10-30 2:04 ` Semaphore assembly-code bug Andi Kleen
[not found] ` <Pine.LNX.4.61.0410291316470.3945@chaos.analogic.com.suse.lists.linux.kernel>
[not found] ` <20041029175527.GB25764@redhat.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.61.0410291416040.4844@chaos.analogic.com.suse.lists.linux.kernel>
[not found] ` <Pine.LNX.4.58.0410291133220.28839@ppc970.osdl.org.suse.lists.linux.kernel>
2004-10-30 2:13 ` Andi Kleen
2004-10-30 9:28 ` Denis Vlasenko
2004-10-30 17:53 ` Linus Torvalds
2004-10-30 21:00 ` Denis Vlasenko
2004-10-30 21:14 ` code bloat [was Re: Semaphore assembly-code bug] Lee Revell
2004-10-30 22:11 ` Denis Vlasenko
2004-10-30 22:25 ` Lee Revell
2004-10-31 14:06 ` Diego Calleja
2004-10-31 20:53 ` Z Smith
2004-10-31 23:35 ` Rogério Brito
2004-11-01 1:20 ` Z Smith
2004-11-01 14:48 ` Diego Calleja
2004-11-01 15:09 ` [OT] " Russell Miller
2004-10-30 22:27 ` Tim Hockin
2004-10-30 22:44 ` Jeff Garzik
2004-10-30 22:50 ` Tim Hockin
2004-10-31 20:15 ` Theodore Ts'o
2004-10-31 20:21 ` Jeff Garzik
2004-10-31 21:06 ` Jan Engelhardt
2004-11-01 11:27 ` Alan Cox
2004-11-01 13:40 ` Denis Vlasenko
2004-11-01 23:04 ` Alan Cox
2004-10-30 23:13 ` Denis Vlasenko
2004-10-30 22:45 ` Alan Cox
2004-10-31 1:21 ` Z Smith
2004-10-31 2:47 ` Jim Nelson
2004-10-31 15:19 ` Alan Cox
2004-10-31 20:18 ` Z Smith
2004-11-01 11:05 ` Alan Cox
2004-10-30 23:20 ` [OT] " Lee Revell
2004-10-30 22:52 ` Alan Cox
2004-10-31 1:09 ` Ken Moffat
2004-10-31 2:42 ` Tim Connors
2004-10-31 4:45 ` Paul
2004-10-31 14:44 ` Alan Cox
2004-10-31 0:48 ` Andi Kleen
2004-10-30 23:28 ` Tim Hockin
2004-10-31 2:04 ` Michael Clark
2004-10-31 6:49 ` Jan Engelhardt
2004-10-31 21:09 ` Z Smith
2004-10-31 21:13 ` Jan Engelhardt
2004-10-31 21:48 ` Z Smith
2004-11-01 11:29 ` Alan Cox
2004-11-01 12:36 ` Jan Engelhardt
2004-11-01 15:17 ` Lee Revell
2004-11-01 16:56 ` Kristian Høgsberg
2004-10-31 6:37 ` Jan Engelhardt
2004-10-31 0:39 ` Andi Kleen [this message]
2004-10-31 1:43 ` Semaphore assembly-code bug Linus Torvalds
2004-10-31 2:04 ` Andi Kleen
2004-10-18 22:45 Linux v2.6.9 Linus Torvalds
2004-10-19 17:38 ` Linux v2.6.9 and GPL Buyout Jeff V. Merkey
2004-10-19 20:38 ` Dax Kelson
2004-10-19 20:09 ` Jeff V. Merkey
2004-10-20 3:45 ` Ryan Anderson
2004-10-20 4:18 ` Lee Revell
2004-10-20 4:41 ` Lee Revell
2004-10-20 11:49 ` Richard B. Johnson
2004-10-29 12:12 ` Semaphore assembly-code bug linux-os
2004-10-29 14:46 ` Linus Torvalds
2004-10-29 15:11 ` Andi Kleen
2004-10-29 18:18 ` Linus Torvalds
2004-10-29 18:35 ` Richard Henderson
2004-10-29 16:06 ` Andreas Steinmetz
2004-10-29 17:08 ` linux-os
2004-10-29 18:06 ` Linus Torvalds
2004-10-29 18:39 ` linux-os
2004-10-29 19:12 ` Linus Torvalds
2004-11-01 1:31 ` linux-os
2004-11-01 5:49 ` Linus Torvalds
2004-11-01 20:23 ` dean gaudet
2004-11-01 20:52 ` linux-os
2004-11-01 21:23 ` dean gaudet
2004-11-01 22:22 ` linux-os
2004-11-01 21:40 ` Linus Torvalds
2004-11-01 21:46 ` Linus Torvalds
2004-11-02 15:02 ` linux-os
2004-11-02 16:02 ` Linus Torvalds
2004-11-02 16:06 ` Linus Torvalds
2004-11-02 16:51 ` linux-os
2004-11-01 22:16 ` linux-os
2004-11-01 22:26 ` Linus Torvalds
2004-11-01 23:14 ` linux-os
2004-11-01 23:42 ` Linus Torvalds
2004-11-03 1:52 ` Horst von Brand
2004-11-03 21:24 ` Bill Davidsen
2004-11-02 6:37 ` Chris Friesen
2004-10-29 18:58 ` Andreas Steinmetz
2004-10-29 19:15 ` Linus Torvalds
2004-10-29 19:40 ` Andreas Steinmetz
2004-10-29 19:56 ` Linus Torvalds
2004-10-29 22:07 ` Jeff Garzik
2004-10-29 23:50 ` dean gaudet
2004-10-30 0:15 ` Linus Torvalds
2004-10-29 23:37 ` dean gaudet
2004-10-29 17:22 ` linux-os
2004-10-29 17:55 ` Richard Henderson
2004-10-29 18:17 ` linux-os
2004-10-29 18:42 ` Linus Torvalds
2004-10-29 18:54 ` Linus Torvalds
2004-10-30 3:35 ` Jeff Garzik
2004-10-29 19:20 ` Linus Torvalds
2004-10-29 19:26 ` Linus Torvalds
2004-10-29 21:03 ` Linus Torvalds
2004-10-29 17:57 ` Richard Henderson
2004-10-29 18:37 ` Gabriel Paubert
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=20041031003934.GA19396@wotan.suse.de \
--to=ak@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
--cc=vda@port.imtp.ilyichevsk.odessa.ua \
/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).