public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andi Kleen <ak@suse.de>
To: Alex Pankratov <ap@swapped.cc>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] [2.6] [2/2] hlist: remove IFs from hlist functions
Date: Sat, 14 Feb 2004 19:59:49 +0100	[thread overview]
Message-ID: <20040214195949.2ad9aa4f.ak@suse.de> (raw)
In-Reply-To: <402A5CEC.2030603@swapped.cc>

On Wed, 11 Feb 2004 08:48:44 -0800
Alex Pankratov <ap@swapped.cc> wrote:

> 
> Andi Kleen wrote:
> 
> > Alex Pankratov <ap@swapped.cc> writes:
> > 
> >>
> >>No, because its 'pprev' field *is* getting modified.
> > 
> > I didn't notice this before, sorry. But this could end up 
> > being a scalability problem on big SMP systems. Even though
> > the cache line of this is never read it will bounce all the
> > time between all CPUs using hlists and add considerably 
> > latency and cross node traffic. Remember Linux is supposed
> > to run well on 128 CPU machines now.
> 
> That's a bit above my head. How does this potential latency
> compare to the speed up due to not having CMPs ? My cycle
> counting skills are a bit dusty :)

A full cache miss is extremly costly on a modern Gigahertz+ CPU because
memory and busses are far slower than the CPU core. As a rule of 
thumb 1000+ cycles. An CMP is extremly cheap (a few cycles at worst), 
the only thing that could be more expensive is an mispredicted conditional
jump triggered  by the CMP. But even that would be at best a few tens of cycles.
If everything is mispredicted which should be common it's extremly fast
(a few cycles only) 

In addition on a big multiprocessor machine bouncing cache lines between
CPUs is costly because it adds load to the interconnect.

One way to avoid the possible mispredicted jump would be to reorganize the
code that the compiler can use CMOV. The issue is that on x86 CMOV 
cannot do a conditional store to memory, so it has to use something like

	unsigned long *target = realtarget;
	unsigned long dummy;
	if (condfalse) 
		target = &dummy;     /* <---- can be converted to CMOV */
	*target = dummy;
			
(gcc should do that on its own, but it doesn't). I'm not really sure
it's practical to do that for the CMP here and if it's even worth it.

Most likely the hlist loops are dominated by cache misses in walking the 
nodes anyways.

> 
> > 
> > Maybe you can make it UP only, but I'm still not sure it's 
> > worth it.
> > 
> 
> Sorry, I didn't the 'UP' part.

Uniprocessor = !CONFIG_SMP with an #ifdef.

-Andi

  reply	other threads:[~2004-02-11 17:08 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <4029CB7E.4030003@swapped.cc.suse.lists.linux.kernel>
     [not found] ` <4029CF24.1070307@osdl.org.suse.lists.linux.kernel>
     [not found]   ` <4029D2D5.7070504@swapped.cc.suse.lists.linux.kernel>
2004-02-11  8:55     ` [PATCH] [2.6] [2/2] hlist: remove IFs from hlist functions Andi Kleen
2004-02-11 16:48       ` Alex Pankratov
2004-02-14 18:59         ` Andi Kleen [this message]
2004-02-12  4:42           ` Alex Pankratov
2004-02-14 19:43           ` Andi Kleen
2004-02-11  6:28 Alex Pankratov
2004-02-11  6:43 ` Stephen Hemminger
2004-02-11  6:59   ` Alex Pankratov

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=20040214195949.2ad9aa4f.ak@suse.de \
    --to=ak@suse.de \
    --cc=ap@swapped.cc \
    --cc=linux-kernel@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