• Huang Ying's avatar
    mm, pcp: reduce lock contention for draining high-order pages · 362d37a1
    Huang Ying authored
    In commit f26b3fa0 ("mm/page_alloc: limit number of high-order pages
    on PCP during bulk free"), the PCP (Per-CPU Pageset) will be drained when
    PCP is mostly used for high-order pages freeing to improve the cache-hot
    pages reusing between page allocating and freeing CPUs.
    
    On system with small per-CPU data cache slice, pages shouldn't be cached
    before draining to guarantee cache-hot.  But on a system with large
    per-CPU data cache slice, some pages can be cached before draining to
    reduce zone lock contention.
    
    So, in this patch, instead of draining without any caching, "pcp->batch"
    pages will be cached in PCP before draining if the size of the per-CPU
    data cache slice is more than "3 * batch".
    
    In theory, if the size of per-CPU data cache slice is more than "2 *
    batch", we can reuse cache-hot pages between CPUs.  But considering the
    other usage of cache (code, other data accessing, etc.), "3 * batch" is
    used.
    
    Note: "3 * batch" is chosen to make sure the optimization works on recent
    x86_64 server CPUs.  If you want to increase it, please check whether it
    breaks the optimization.
    
    On a 2-socket Intel server with 128 logical CPU, with the patch, the
    network bandwidth of the UNIX (AF_UNIX) test case of lmbench test suite
    with 16-pair processes increase 70.5%.  The cycles% of the spinlock
    contention (mostly for zone lock) decreases from 46.1% to 21.3%.  The
    number of PCP draining for high order pages freeing (free_high) decreases
    89.9%.  The cache miss rate keeps 0.2%.
    
    Link: https://lkml.kernel.org/r/20231016053002.756205-4-ying.huang@intel.comSigned-off-by: default avatar"Huang, Ying" <ying.huang@intel.com>
    Acked-by: default avatarMel Gorman <mgorman@techsingularity.net>
    Cc: Sudeep Holla <sudeep.holla@arm.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Johannes Weiner <jweiner@redhat.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    362d37a1
cacheinfo.c 24.4 KB