lkml.org 
[lkml]   [2009]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/5] slab.c: remove branch hint
    Tim Blechmann kirjoitti:
    > On 11/24/2009 12:28 PM, Pekka Enberg 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.
    >
    > when dumping the stack for the incorrectly hinted branches, i get the
    > attached stack traces...
    >
    > hth, tim
    >
    > --- a/mm/slab.c
    > +++ b/mm/slab.c
    > @@ -3548,8 +3548,10 @@ __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 (nodeid == -1)
    > + if (nodeid == -1) {
    > + dump_stack();
    > nodeid = this_node;
    > + }
    >
    > if (unlikely(!cachep->nodelists[nodeid])) {
    > /* Node not bootstrapped yet */
    >
    >
    >

    OK, so it's the generic alloc_skb() function that keeps hitting
    kmem_cache_alloc_node() with "-1". Christoph, are you okay with removing
    the unlikely() annotation from __cache_alloc_node()?

    Pekka


    \
     
     \ /
      Last update: 2009-11-30 10:07    [W:0.023 / U:148.964 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site