On Wed 08-02-17 16:40:55, Gavin Shan wrote: > When @node_reclaim_node isn't 0, the page allocator tries to reclaim > pages if the amount of free memory in the zones are below the low > watermark. On Power platform, none of NUMA nodes are scanned for page > reclaim because no nodes match the condition in zone_allows_reclaim(). > On Power platform, RECLAIM_DISTANCE is set to 10 which is the distance > of Node-A to Node-A. So the preferred node even won't be scanned for > page reclaim. This is quite confusing. I can see 56608209d34b ("powerpc/numa: Set a smaller value for RECLAIM_DISTANCE to enable zone reclaim") which enforced the zone_reclaim by reducing the RECLAIM_DISTANCE, now you are building on top of that. Having RECLAIM_DISTANCE == LOCAL_DISTANCE is really confusing. What are distances of other nodes (in other words what does numactl --hardware tells)? I am wondering whether we shouldn't rather revert 56608209d34b as the node_reclaim (these days) is not enabled by default anymore. [...] > Fixes: 5f7a75acdb24 ("mm: page_alloc: do not cache reclaim distances") > Cc: <stable@xxxxxxxxxxxxxxx> # v3.16+ > Signed-off-by: Gavin Shan <gwshan@xxxxxxxxxxxxxxxxxx> anyway the patch looks OK as it brings the previous behavior back. Not that I would be entirely happy about that behavior as it is quite nasty - e.g. it will trigger direct reclaim from the allocator fast path way too much and basically skip the kswapd wake up most of the time if there is anything reclaimable... But this used to be there before as well. Acked-by: Michal Hocko <mhocko@xxxxxxxx> but I would really like to get rid of the ppc specific RECLAIM_DISTANCE if possible as well. > --- > mm/page_alloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index f3e0c69..1a5f665 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -2877,7 +2877,7 @@ bool zone_watermark_ok_safe(struct zone *z, unsigned int order, > #ifdef CONFIG_NUMA > static bool zone_allows_reclaim(struct zone *local_zone, struct zone *zone) > { > - return node_distance(zone_to_nid(local_zone), zone_to_nid(zone)) < > + return node_distance(zone_to_nid(local_zone), zone_to_nid(zone)) <= > RECLAIM_DISTANCE; > } > #else /* CONFIG_NUMA */ > -- > 2.7.4 > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- Michal Hocko SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html