Brice Goglin e78bbfa826 mm: stop returning -ENOENT from sys_move_pages() if nothing got migrated
A patchset reworking sys_move_pages().  It removes the possibly large
vmalloc by using multiple chunks when migrating large buffers.  It also
dramatically increases the throughput for large buffers since the lookup
in new_page_node() is now limited to a single chunk, causing the quadratic
complexity to have a much slower impact.  There is no need to use any
radix-tree-like structure to improve this lookup.

sys_move_pages() duration on a 4-quadcore-opteron 2347HE (1.9Gz),
migrating between nodes #2 and #3:

	length		move_pages (us)		move_pages+patch (us)
	4kB		126			98
	40kB		198			168
	400kB		963			937
	4MB		12503			11930
	40MB		246867			11848

Patches #1 and #4 are the important ones:
1) stop returning -ENOENT from sys_move_pages() if nothing got migrated
2) don't vmalloc a huge page_to_node array for do_pages_stat()
3) extract do_pages_move() out of sys_move_pages()
4) rework do_pages_move() to work on page_sized chunks
5) move_pages: no need to set pp->page to ZERO_PAGE(0) by default

This patch:

There is no point in returning -ENOENT from sys_move_pages() if all pages
were already on the right node, while we return 0 if only 1 page was not.
Most application don't know where their pages are allocated, so it's not
an error to try to migrate them anyway.

Just return 0 and let the status array in user-space be checked if the
application needs details.

It will make the upcoming chunked-move_pages() support much easier.

Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
Acked-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-10-20 08:52:33 -07:00
..
2008-10-20 08:52:32 -07:00
2008-10-20 08:52:32 -07:00
2008-10-20 08:50:26 -07:00
2008-07-28 16:30:21 -07:00
2008-10-20 08:50:26 -07:00
2008-10-20 08:50:26 -07:00
2007-10-20 01:27:18 +02:00
2008-04-28 08:58:18 -07:00
2008-10-20 08:52:32 -07:00
2008-07-28 16:30:21 -07:00
2008-07-28 16:30:21 -07:00
2007-05-21 09:18:19 -07:00
2008-10-20 08:52:30 -07:00
2008-02-05 09:44:19 -08:00
2008-06-12 18:05:41 -07:00
2007-10-20 01:27:18 +02:00
2008-10-20 08:52:31 -07:00
2008-10-20 08:50:26 -07:00
2008-07-29 23:44:26 +03:00
2008-10-09 12:18:27 -07:00
2008-07-04 10:40:04 -07:00
2008-10-20 08:52:32 -07:00
2008-10-02 15:53:13 -07:00
2008-10-20 08:52:32 -07:00
2008-10-20 08:52:32 -07:00