On Mon, Feb 03, 2025 at 09:44:29PM +0900, Honggyu Kim wrote: > Hi Joshua, > > > A node offlining (or even onlining with no new bandwidth information) > > will just mean that the node inherits whatever value is stored in > > iw_table at that moment, whether that contains the default values > > created on init or the last values that it had taken. > > It looks the call sequence is as follows. > > cxl_region_perf_attrs_callback() > -> cxl_region_update_coordinates() > -> node_set_perf_attrs() > -> mempolicy_set_node_perf() > -> reduce_interleave_weights() > > I haven't searched all the paths of cxl_region_perf_attrs_callback() via > cxlr->memory_notifier.notifier_call callback pointer, but maybe this > function is not called when a node is offlined, then I get node > offlining doesn't trigger re-weight calculation. This function is called any time a memory block status changes. static int cxl_region_perf_attrs_callback(struct notifier_block *nb, unsigned long action, void *arg) { ... if (nid == NUMA_NO_NODE || action != MEM_ONLINE) return NOTIFY_DONE; ... } But it doesn't do anything if it's not a call to online a memory block, so the cached performance data in mempolicy won't change when blocks are taken offline. So the time the scenario you are proposing can arrise is when the device does not provide performance information (missing CDAT). If a user sets manual mode - they're on the hook to manage everything. This is system-wide setting - not a per-task setting. We've yet to see any strong use-case for individual task weights. If there is a use case for a task not being subject to system-wide weight changes then it's a use case for task-local weights. ~Gregory