mm: introduce a common interface for balloon pages mobility
Memory fragmentation introduced by ballooning might reduce significantly the number of 2MB contiguous memory blocks that can be used within a guest, thus imposing performance penalties associated with the reduced number of transparent huge pages that could be used by the guest workload. This patch introduces a common interface to help a balloon driver on making its page set movable to compaction, and thus allowing the system to better leverage the compation efforts on memory defragmentation. [akpm@linux-foundation.org: use PAGE_FLAGS_CHECK_AT_PREP, s/__balloon_page_flags/page_flags_cleared/, small cleanups] [rientjes@google.com: allow balloon compaction for any system with memory compaction enabled, which is the defconfig] Signed-off-by: Rafael Aquini <aquini@redhat.com> Acked-by: Mel Gorman <mel@csn.ul.ie> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: "Michael S. Tsirkin" <mst@redhat.com> Cc: Rik van Riel <riel@redhat.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Minchan Kim <minchan@kernel.org> Signed-off-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
252aa6f5be
commit
18468d93e5
@@ -11,8 +11,18 @@ typedef struct page *new_page_t(struct page *, unsigned long private, int **);
|
||||
* Return values from addresss_space_operations.migratepage():
|
||||
* - negative errno on page migration failure;
|
||||
* - zero on page migration success;
|
||||
*
|
||||
* The balloon page migration introduces this special case where a 'distinct'
|
||||
* return code is used to flag a successful page migration to unmap_and_move().
|
||||
* This approach is necessary because page migration can race against balloon
|
||||
* deflation procedure, and for such case we could introduce a nasty page leak
|
||||
* if a successfully migrated balloon page gets released concurrently with
|
||||
* migration's unmap_and_move() wrap-up steps.
|
||||
*/
|
||||
#define MIGRATEPAGE_SUCCESS 0
|
||||
#define MIGRATEPAGE_BALLOON_SUCCESS 1 /* special ret code for balloon page
|
||||
* sucessful migration case.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MIGRATION
|
||||
|
||||
|
Reference in New Issue
Block a user