From: Eric Dumazet <dada1@cosmosbay.com>
To: Andi Kleen <andi@firstfloor.org>
Cc: Christoph Lameter <christoph@lameter.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux kernel <linux-kernel@vger.kernel.org>
Subject: Re: [RFC] SLAB : NUMA cache_free_alien() very expensive because of virt_to_slab(objp); nodeid = slabp->nodeid;
Date: Tue, 20 Mar 2007 23:09:01 +0100 [thread overview]
Message-ID: <46005B7D.3090701@cosmosbay.com> (raw)
In-Reply-To: <20070320213218.GA13952@one.firstfloor.org>
Andi Kleen a écrit :
>>> Is it possible virt_to_slab(objp)->nodeid being different from pfn_to_nid(objp) ?
>> It is possible the page allocator falls back to another node than
>> requested. We would need to check that this never occurs.
>
> The only way to ensure that would be to set a strict mempolicy.
> But I'm not sure that's a good idea -- after all you don't want
> to fail an allocation in this case.
>
> But pfn_to_nid on the object like proposed by Eric should work anyways.
> But I'm not sure the tables used for that will be more often cache hot
> than the slab.
pfn_to_nid() on most x86_64 machines access one cache line (struct memnode).
Node 0 MemBase 0000000000000000 Limit 0000000280000000
Node 1 MemBase 0000000280000000 Limit 0000000480000000
NUMA: Using 31 for the hash shift.
On this example, we use only 8 bytes of memnode.embedded_map[] to find nid of
all 16 GB of ram. On profiles I have, memnode is always hot (no cache miss on it).
While virt_to_slab() has to access :
1) struct page -> page_get_slab() (page->lru.prev) (one cache miss)
2) struct slab -> nodeid (one other cache miss)
So using pfn_to_nid() would avoid 2 cache misses.
I understand we want to do special things (fallback and such tricks) at
allocation time, but I believe that we can just trust the real nid of memory
at free time.
next prev parent reply other threads:[~2007-03-20 22:09 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-20 17:12 [RFC] SLAB : NUMA cache_free_alien() very expensive because of virt_to_slab(objp); nodeid = slabp->nodeid; Eric Dumazet
2007-03-20 19:54 ` Christoph Lameter
2007-03-20 21:32 ` Andi Kleen
2007-03-20 22:09 ` Eric Dumazet [this message]
2007-03-21 0:16 ` Christoph Lameter
2007-03-21 6:27 ` Eric Dumazet
2007-03-21 6:57 ` [PATCH] SLAB : Use num_possible_cpus() in enable_cpucache() Eric Dumazet
2007-03-21 7:21 ` [PATCH] SLAB : Dont allocate empty shared caches Eric Dumazet
2007-03-21 13:13 ` Pekka Enberg
2007-03-21 13:02 ` [PATCH] SLAB : Use num_possible_cpus() in enable_cpucache() Pekka Enberg
2007-03-21 18:45 ` Christoph Lameter
2007-03-21 7:03 ` [RFC] SLAB : NUMA cache_free_alien() very expensive because of virt_to_slab(objp); nodeid = slabp->nodeid; Christoph Lameter
2007-03-21 7:14 ` Eric Dumazet
2007-03-21 14:35 ` Christoph Lameter
2007-03-21 0:18 ` Christoph Lameter
2007-03-21 2:44 ` Andi Kleen
2007-03-21 3:10 ` Christoph Lameter
2007-03-22 21:28 ` non-NUMA cache_free_alien() (was Re: [RFC] SLAB : NUMA cache_free_alien() very expensive because of virt_to_slab(objp); nodeid = slabp->nodeid;) Siddha, Suresh B
2007-03-22 22:10 ` Christoph Lameter
2007-03-22 22:12 ` Eric Dumazet
2007-03-22 22:40 ` Siddha, Suresh B
2007-03-22 22:56 ` Eric Dumazet
2007-03-23 1:25 ` Christoph Lameter
2007-03-23 14:14 ` Andi Kleen
2007-03-23 14:12 ` Andi Kleen
2007-04-02 22:55 ` Siddha, Suresh B
2007-04-03 0:23 ` Christoph Lameter
2007-04-03 0:31 ` Siddha, Suresh B
2007-04-09 18:01 ` [patch 1/2] x86_64: set node_possible_map at runtime Siddha, Suresh B
2007-04-09 18:07 ` [patch 2/2] slab, x86_64: skip cache_free_alien() on non NUMA Siddha, Suresh B
2007-04-09 20:23 ` [patch 1/2] x86_64: set node_possible_map at runtime Andrew Morton
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=46005B7D.3090701@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=christoph@lameter.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.