• Brice Goglin's avatar
    mm: stop returning -ENOENT from sys_move_pages() if nothing got migrated · e78bbfa8
    Brice Goglin authored
    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: default avatarBrice Goglin <Brice.Goglin@inria.fr>
    Acked-by: default avatarChristoph Lameter <cl@linux-foundation.org>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e78bbfa8
migrate.c 24.8 KB