• Dan Williams's avatar
    x86/numa_emulation: Introduce uniform split capability · cc9aec03
    Dan Williams authored
    The current NUMA emulation capabilities for splitting System RAM by a
    fixed size or by a set number of nodes may result in some nodes being
    larger than others. The implementation prioritizes establishing a
    minimum usable memory size over satisfying the requested number of NUMA
    nodes.
    
    Introduce a uniform split capability that evenly partitions each
    physical NUMA node into N emulated nodes. For example numa=fake=3U
    creates 6 emulated nodes total on a system that has 2 physical nodes.
    
    This capability is useful for debugging and evaluating platform
    memory-side-cache capabilities as described by the ACPI HMAT (see
    5.2.27.5 Memory Side Cache Information Structure in ACPI 6.2a)
    
    Compare numa=fake=6 that results in only 5 nodes being created against
    numa=fake=3U which takes the 2 physical nodes and evenly divides them.
    
    numa=fake=6
    available: 5 nodes (0-4)
    node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
    node 0 size: 2648 MB
    node 0 free: 2443 MB
    node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 1 size: 2672 MB
    node 1 free: 2442 MB
    node 2 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
    node 2 size: 5291 MB
    node 2 free: 5278 MB
    node 3 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 3 size: 2677 MB
    node 3 free: 2665 MB
    node 4 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 4 size: 2676 MB
    node 4 free: 2663 MB
    node distances:
    node   0   1   2   3   4
      0:  10  20  10  20  20
      1:  20  10  20  10  10
      2:  10  20  10  20  20
      3:  20  10  20  10  10
      4:  20  10  20  10  10
    
    numa=fake=3U
    available: 6 nodes (0-5)
    node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
    node 0 size: 2900 MB
    node 0 free: 2637 MB
    node 1 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
    node 1 size: 3023 MB
    node 1 free: 3012 MB
    node 2 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
    node 2 size: 2015 MB
    node 2 free: 2004 MB
    node 3 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 3 size: 2704 MB
    node 3 free: 2522 MB
    node 4 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 4 size: 2709 MB
    node 4 free: 2698 MB
    node 5 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
    node 5 size: 2612 MB
    node 5 free: 2601 MB
    node distances:
    node   0   1   2   3   4   5
      0:  10  10  10  20  20  20
      1:  10  10  10  20  20  20
      2:  10  10  10  20  20  20
      3:  20  20  20  10  10  10
      4:  20  20  20  10  10  10
      5:  20  20  20  10  10  10
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Wei Yang <richard.weiyang@gmail.com>
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/153089328617.27680.14930758266174305832.stgit@dwillia2-desk3.amr.corp.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    cc9aec03
numa_emulation.c 14.9 KB