If an task_selected_nid has already been selected for the task, try to allocate memory from it even if it's temporarily not the local node. Chances are it's where most of its memory is already located and where it will run in the future. Acked-by: Rik van Riel <riel@xxxxxxxxxx> Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx> --- mm/mempolicy.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 4ada3be..5cffcb6 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1951,10 +1951,18 @@ retry_cpuset: */ if (pol->mode == MPOL_INTERLEAVE) page = alloc_page_interleave(gfp, order, interleave_nodes(pol)); - else + else { + int nid = -1; +#ifdef CONFIG_AUTONUMA + if (current->task_autonuma) + nid = current->task_autonuma->task_selected_nid; +#endif + if (nid < 0) + nid = numa_node_id(); page = __alloc_pages_nodemask(gfp, order, - policy_zonelist(gfp, pol, numa_node_id()), + policy_zonelist(gfp, pol, nid), policy_nodemask(gfp, pol)); + } if (unlikely(!put_mems_allowed(cpuset_mems_cookie) && !page)) goto retry_cpuset; -- 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>