Messages in this thread | | | Date | Tue, 24 Nov 2009 12:42:18 +0100 | From | Ingo Molnar <> | Subject | Re: [PATCH 3/5] slab.c: remove branch hint |
| |
* Pekka Enberg <penberg@cs.helsinki.fi> wrote:
> On Tue, Nov 24, 2009 at 1:20 PM, Ingo Molnar <mingo@elte.hu> wrote: > > (Pekka Cc:-ed) > > > > * Tim Blechmann <tim@klingt.org> wrote: > > > >> branch profiling on my nehalem machine showed 99% incorrect branch hints: > >> > >> ? ?28459 ?7678524 ?99 __cache_alloc_node ? ? ? ? ? ? slab.c > >> ? 3551 > >> > >> Signed-off-by: Tim Blechmann <tim@klingt.org> > >> --- > >> ?mm/slab.c | ? ?2 +- > >> ?1 files changed, 1 insertions(+), 1 deletions(-) > >> > >> diff --git a/mm/slab.c b/mm/slab.c > >> index f70b326..4125fcd 100644 > >> --- a/mm/slab.c > >> +++ b/mm/slab.c > >> @@ -3548,7 +3548,7 @@ __cache_alloc_node(struct kmem_cache *cachep, > >> gfp_t flags, int nodeid, > >> ? ? ? slab_irq_save(save_flags, this_cpu); > >> ? ? ? this_node = cpu_to_node(this_cpu); > >> - ? ? if (unlikely(nodeid == -1)) > >> + ? ? if (nodeid == -1) > >> ? ? ? ? ? ? ? nodeid = this_node; > >> ? ? ? if (unlikely(!cachep->nodelists[nodeid])) { > > That sounds odd to me. Can you see where the incorrectly predicted > calls are coming from? Calling kmem_cache_alloc_node() with node set > to -1 most of the time could be a real bug somewhere.
I think it could occur in too limited tests - the branch prediction looks 'wrong' in certain tests - while it's OK in general.
Is there some easy to run workload you consider more or less representative of typical SLAB patterns?
<plug> You might want to pull even with the scheduler subsystem and in addition to 'perf bench sched', add a 'perf bench slab' set of interesting testcases for SLAB performance testing. :-) </plug>
Ingo
| |