• Chen, Kenneth W's avatar
    [PATCH] optimize follow_hugetlb_page · d5d4b0aa
    Chen, Kenneth W authored
    follow_hugetlb_page() walks a range of user virtual address and then fills
    in list of struct page * into an array that is passed from the argument
    list.  It also gets a reference count via get_page().  For compound page,
    get_page() actually traverse back to head page via page_private() macro and
    then adds a reference count to the head page.  Since we are doing a virt to
    pte look up, kernel already has a struct page pointer into the head page.
    So instead of traverse into the small unit page struct and then follow a
    link back to the head page, optimize that with incrementing the reference
    count directly on the head page.
    
    The benefit is that we don't take a cache miss on accessing page struct for
    the corresponding user address and more importantly, not to pollute the
    cache with a "not very useful" round trip of pointer chasing.  This adds a
    moderate performance gain on an I/O intensive database transaction
    workload.
    Signed-off-by: default avatarKen Chen <kenneth.w.chen@intel.com>
    Cc: David Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    d5d4b0aa
hugetlb.c 18.2 KB