From: Srinivasulu Thanneeru <sthanneeru.opensrc@xxxxxxxxxx> The memory tiers feature allows nodes with similar memory types or performance characteristics to be grouped together in a memory tier. However, there is currently no provision for moving a node from one tier to another on demand. This patch series aims to support node migration between tiers on demand by sysadmin/root user using the provided sysfs for node migration. Each tier has a start abstract distance(adistance) and range. To migrate a node to a tier, the corresponding node’s sysfs adistance_offset is written with a value corresponding to the tier’s adistance. Example: Move node2 to memory tier5 from its default tier(i.e 4) 1. Check default values: $cat /sys/devices/virtual/memory_tiering/memory_tier4/nodelist 0-2 $cat /sys/devices/system/node/node0/adistance_offset 0 $cat /sys/devices/system/node/node1/adistance_offset 0 $cat /sys/devices/system/node/node2/adistance_offset 0 2. Move node2 to tier5: To move node2 from emory_tier4 (adistance=512) to emory_tier5 (abstract=640), set the `adistance_offset` of node 2 to 128 (i.e., 512 + 128 = 640). Tier4 adistance start can be derved from tier-id (i.e for tier4, 4 << 7 = 512). $echo 128 > /sys/devices/system/node/node2/adistance_offset $cat /sys/devices/system/node/node2/adistance_offset 128 3. Verify node2's tier id: $cat /sys/devices/virtual/memory_tiering/memory_tier5/nodelist 2 $cat /sys/devices/virtual/memory_tiering/memory_tier4/nodelist 0-1 Srinivasulu Thanneeru (2): base/node: Add sysfs for adistance_offset memory tier: Support node migration between tiers drivers/base/node.c | 51 +++++++++++++++++++++++ include/linux/memory-tiers.h | 11 +++++ include/linux/node.h | 6 +++ mm/memory-tiers.c | 79 ++++++++++++++++++++---------------- 4 files changed, 113 insertions(+), 34 deletions(-) -- 2.25.1