Skip to content
  • Lee Schermerhorn's avatar
    hugetlb: add per node hstate attributes · 9a305230
    Lee Schermerhorn authored
    
    
    Add the per huge page size control/query attributes to the per node
    sysdevs:
    
    /sys/devices/system/node/node<ID>/hugepages/hugepages-<size>/
    	nr_hugepages       - r/w
    	free_huge_pages    - r/o
    	surplus_huge_pages - r/o
    
    The patch attempts to re-use/share as much of the existing global hstate
    attribute initialization and handling, and the "nodes_allowed" constraint
    processing as possible.
    
    Calling set_max_huge_pages() with no node indicates a change to global
    hstate parameters.  In this case, any non-default task mempolicy will be
    used to generate the nodes_allowed mask.  A valid node id indicates an
    update to that node's hstate parameters, and the count argument specifies
    the target count for the specified node.  From this info, we compute the
    target global count for the hstate and construct a nodes_allowed node mask
    contain only the specified node.
    
    Setting the node specific nr_hugepages via the per node attribute
    effectively ignores any task mempolicy or cpuset constraints.
    
    With this patch:
    
    (me):ls /sys/devices/system/node/node0/hugepages/hugepages-2048kB
    ./  ../  free_hugepages  nr_hugepages  surplus_hugepages
    
    Starting from:
    Node 0 HugePages_Total:     0
    Node 0 HugePages_Free:      0
    Node 0 HugePages_Surp:      0
    Node 1 HugePages_Total:     0
    Node 1 HugePages_Free:      0
    Node 1 HugePages_Surp:      0
    Node 2 HugePages_Total:     0
    Node 2 HugePages_Free:      0
    Node 2 HugePages_Surp:      0
    Node 3 HugePages_Total:     0
    Node 3 HugePages_Free:      0
    Node 3 HugePages_Surp:      0
    vm.nr_hugepages = 0
    
    Allocate 16 persistent huge pages on node 2:
    (me):echo 16 >/sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages
    
    [Note that this is equivalent to:
    	numactl -m 2 hugeadmin --pool-pages-min 2M:+16
    ]
    
    Yields:
    Node 0 HugePages_Total:     0
    Node 0 HugePages_Free:      0
    Node 0 HugePages_Surp:      0
    Node 1 HugePages_Total:     0
    Node 1 HugePages_Free:      0
    Node 1 HugePages_Surp:      0
    Node 2 HugePages_Total:    16
    Node 2 HugePages_Free:     16
    Node 2 HugePages_Surp:      0
    Node 3 HugePages_Total:     0
    Node 3 HugePages_Free:      0
    Node 3 HugePages_Surp:      0
    vm.nr_hugepages = 16
    
    Global controls work as expected--reduce pool to 8 persistent huge pages:
    (me):echo 8 >/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
    
    Node 0 HugePages_Total:     0
    Node 0 HugePages_Free:      0
    Node 0 HugePages_Surp:      0
    Node 1 HugePages_Total:     0
    Node 1 HugePages_Free:      0
    Node 1 HugePages_Surp:      0
    Node 2 HugePages_Total:     8
    Node 2 HugePages_Free:      8
    Node 2 HugePages_Surp:      0
    Node 3 HugePages_Total:     0
    Node 3 HugePages_Free:      0
    Node 3 HugePages_Surp:      0
    
    Signed-off-by: default avatarLee Schermerhorn <lee.schermerhorn@hp.com>
    Acked-by: default avatarMel Gorman <mel@csn.ul.ie>
    Reviewed-by: default avatarAndi Kleen <andi@firstfloor.org>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Randy Dunlap <randy.dunlap@oracle.com>
    Cc: Nishanth Aravamudan <nacc@us.ibm.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Adam Litke <agl@us.ibm.com>
    Cc: Andy Whitcroft <apw@canonical.com>
    Cc: Eric Whitney <eric.whitney@hp.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9a305230