Skip to content
  • Srikar Dronamraju's avatar
    numa: use LAST_CPUPID_SHIFT to calculate LAST_CPUPID_MASK · 834a964a
    Srikar Dronamraju authored
    LAST_CPUPID_MASK is calculated using LAST_CPUPID_WIDTH.  However
    LAST_CPUPID_WIDTH itself can be 0.  (when LAST_CPUPID_NOT_IN_PAGE_FLAGS is
    set).  In such a case LAST_CPUPID_MASK turns out to be 0.
    
    But with recent commit 1ae71d03
    
    : (mm: numa: bugfix for
    LAST_CPUPID_NOT_IN_PAGE_FLAGS) if LAST_CPUPID_MASK is 0,
    page_cpupid_xchg_last() and page_cpupid_reset_last() causes
    page->_last_cpupid to be set to 0.
    
    This causes performance regression. Its almost as if numa_balancing is
    off.
    
    Fix LAST_CPUPID_MASK by using LAST_CPUPID_SHIFT instead of
    LAST_CPUPID_WIDTH.
    
    Some performance numbers and perf stats with and without the fix.
    
    (3.14-rc6)
    ----------
    numa01
    
     Performance counter stats for '/usr/bin/time -f %e %S %U %c %w -o start_bench.out -a ./numa01':
    
             12,27,462 cs                                                           [100.00%]
              2,41,957 migrations                                                   [100.00%]
           1,68,01,713 faults                                                       [100.00%]
        7,99,35,29,041 cache-misses
                98,808 migrate:mm_migrate_pages                                     [100.00%]
    
        1407.690148814 seconds time elapsed
    
    numa02
    
     Performance counter stats for '/usr/bin/time -f %e %S %U %c %w -o start_bench.out -a ./numa02':
    
                63,065 cs                                                           [100.00%]
                14,364 migrations                                                   [100.00%]
              2,08,118 faults                                                       [100.00%]
          25,32,59,404 cache-misses
                    12 migrate:mm_migrate_pages                                     [100.00%]
    
          63.840827219 seconds time elapsed
    
    (3.14-rc6 with fix)
    -------------------
    numa01
    
     Performance counter stats for '/usr/bin/time -f %e %S %U %c %w -o start_bench.out -a ./numa01':
    
              9,68,911 cs                                                           [100.00%]
              1,01,414 migrations                                                   [100.00%]
             88,38,697 faults                                                       [100.00%]
        4,42,92,51,042 cache-misses
              4,25,060 migrate:mm_migrate_pages                                     [100.00%]
    
         685.965331189 seconds time elapsed
    
    numa02
    
     Performance counter stats for '/usr/bin/time -f %e %S %U %c %w -o start_bench.out -a ./numa02':
    
                17,543 cs                                                           [100.00%]
                 2,962 migrations                                                   [100.00%]
              1,17,843 faults                                                       [100.00%]
          11,80,61,644 cache-misses
                12,358 migrate:mm_migrate_pages                                     [100.00%]
    
          20.380132343 seconds time elapsed
    
    Signed-off-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
    Reviewed-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    834a964a