• J
    mm: don't use compound_head() in virt_to_head_page() · ccaafd7f
    Joonsoo Kim 提交于
    compound_head() is implemented with assumption that there would be race
    condition when checking tail flag.  This assumption is only true when we
    try to access arbitrary positioned struct page.
    
    The situation that virt_to_head_page() is called is different case.  We
    call virt_to_head_page() only in the range of allocated pages, so there
    is no race condition on tail flag.  In this case, we don't need to
    handle race condition and we can reduce overhead slightly.  This patch
    implements compound_head_fast() which is similar with compound_head()
    except tail flag race handling.  And then, virt_to_head_page() uses this
    optimized function to improve performance.
    
    I saw 1.8% win in a fast-path loop over kmem_cache_alloc/free, (14.063
    ns -> 13.810 ns) if target object is on tail page.
    Signed-off-by: NJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: NChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    ccaafd7f
mm.h 70.1 KB