Skip to content
  • Dan Williams's avatar
    libnvdimm/e820: Retrieve and populate correct 'target_node' info · 7b27a862
    Dan Williams authored
    
    
    Use the new phys_to_target_node() and numa_map_to_online_node() helpers
    to retrieve the correct id for the 'numa_node' ("local" / online
    initiator node) and 'target_node' (offline target memory node) sysfs
    attributes.
    
    Below is an example from a 4 NUMA node system where all the memory on
    node2 is pmem / reserved. It should be noted that with the arrival of
    the ACPI HMAT table and EFI Specific Purpose Memory the kernel will
    start to see more platforms with reserved / performance differentiated
    memory in its own NUMA node. Hence all the stakeholders on the Cc for
    what is ostensibly a libnvdimm local patch.
    
    === Before ===
    
    /* Notice no online memory on node2 at start */
    
    # numactl --hardware
    available: 3 nodes (0-1,3)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    node 0 size: 3958 MB
    node 0 free: 3708 MB
    node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    node 1 size: 4027 MB
    node 1 free: 3871 MB
    node 3 cpus:
    node 3 size: 3994 MB
    node 3 free: 3971 MB
    node distances:
    node   0   1   3
      0:  10  21  21
      1:  21  10  21
      3:  21  21  10
    
    /*
     * Put the pmem namespace into devdax mode so it can be assigned to the
     * kmem driver
     */
    
    # ndctl create-namespace -e namespace0.0 -m devdax -f
    {
      "dev":"namespace0.0",
      "mode":"devdax",
      "map":"dev",
      "size":"3.94 GiB (4.23 GB)",
      "uuid":"1650af9b-9ba3-4704-acd6-10178399d9a3",
      [..]
    }
    
    /* Online Persistent Memory as System RAM */
    
    # daxctl reconfigure-device --mode=system-ram dax0.0
    libdaxctl: memblock_in_dev: dax0.0: memory0: Unable to determine phys_index: Success
    libdaxctl: memblock_in_dev: dax0.0: memory0: Unable to determine phys_index: Success
    libdaxctl: memblock_in_dev: dax0.0: memory0: Unable to determine phys_index: Success
    libdaxctl: memblock_in_dev: dax0.0: memory0: Unable to determine phys_index: Success
    [
      {
        "chardev":"dax0.0",
        "size":4225761280,
        "target_node":0,
        "mode":"system-ram"
      }
    ]
    reconfigured 1 device
    
    /* Note that the memory is onlined by default to the wrong node, node0 */
    
    # numactl --hardware
    available: 3 nodes (0-1,3)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    node 0 size: 7926 MB
    node 0 free: 7655 MB
    node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    node 1 size: 4027 MB
    node 1 free: 3871 MB
    node 3 cpus:
    node 3 size: 3994 MB
    node 3 free: 3971 MB
    node distances:
    node   0   1   3
      0:  10  21  21
      1:  21  10  21
      3:  21  21  10
    
    === After ===
    
    /* Notice that the "phys_index" error messages are gone */
    
    # daxctl reconfigure-device --mode=system-ram dax0.0
    [
      {
        "chardev":"dax0.0",
        "size":4225761280,
        "target_node":2,
        "mode":"system-ram"
      }
    ]
    reconfigured 1 device
    
    /* Notice that node2 is now correctly populated */
    
    # numactl --hardware
    available: 4 nodes (0-3)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    node 0 size: 3958 MB
    node 0 free: 3793 MB
    node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
    node 1 size: 4027 MB
    node 1 free: 3851 MB
    node 2 cpus:
    node 2 size: 3968 MB
    node 2 free: 3968 MB
    node 3 cpus:
    node 3 size: 3994 MB
    node 3 free: 3908 MB
    node distances:
    node   0   1   2   3
      0:  10  21  21  21
      1:  21  10  21  21
      2:  21  21  10  21
      3:  21  21  21  10
    
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Link: https://lore.kernel.org/r/158188327614.894464.13122730362187722603.stgit@dwillia2-desk3.amr.corp.intel.com
    7b27a862