Re: [PATCH -mm] do_migrate_pages() calls migrate_to_node() even if task is already on a correct node

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/22/2012 03:30 PM, Christoph Lameter wrote:
On Thu, 22 Mar 2012, Larry Woodman wrote:

Application may manage their locality given a range of nodes and each of
the x .. x+n nodes has their particular purpose.
So to be clear on this, in that case the intention would be move 3 to 4, 4 to
5 and 5 to 6
to keep the node ordering the same?
Yup. Have a look at do_migrate_pages and the descrition in the comment by
there by Paul Jackson.


Christoph and others what do you think about this???


diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 47296fe..6c189fa 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -1012,6 +1012,16 @@ int do_migrate_pages(struct mm_struct *mm,
 		int dest = 0;
 
 		for_each_node_mask(s, tmp) {
+
+			/* IFF there is an equal number of source and
+			 * destination nodes, maintain relative node distance
+			 * even when source and destination nodes overlap.
+			 * However, when the node weight is unequal, never move
+			 * memory out of any destination nodes */
+			if ((nodes_weight(*from_nodes) != nodes_weight(*to_nodes)) && 
+						(node_isset(s, *to_nodes)))
+				continue;
+
 			d = node_remap(s, *from_nodes, *to_nodes);
 			if (s == d)
 				continue;

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]