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 <[email protected]> Signed-off-by: Andrea Arcangeli <[email protected]> --- mm/mempolicy.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index bd92431..19a8f72 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

