[RFC PATCH v2 0/4] mm: reclaim zbud pages on migration and compaction

From: Krzysztof Kozlowski
Date: Fri Aug 09 2013 - 06:22:39 EST


Hi,

Currently zbud pages are not movable and they cannot be allocated from CMA
region. These patches try to address the problem by:
1. Adding a new form of reclaim of zbud pages.
2. Reclaiming zbud pages during migration and compaction.
3. Allocating zbud pages with __GFP_RECLAIMABLE flag.

This reclaim process is different than zbud_reclaim_page(). It acts more
like swapoff() by trying to unuse pages stored in zbud page and bring
them back to memory. The standard zbud_reclaim_page() on the other hand
tries to write them back.

One of patches introduces PageZbud() function which identifies zbud pages
my page->_mapcount. Dave Hansen proposed aliasing PG_zbud=PG_slab but in
such case patch would be more intrusive.

Any ideas for a better solution are welcome.

TODO-s:
1. Migrate zbud pages directly instead of reclaiming.

Changes since v1:
1. Rebased against v3.11-rc4-103-g6c2580c.
2. Remove rebalance_lists() to fix reinserting zbud page after zbud_free.
This function was added because similar code was present in
zbud_free/zbud_alloc/zbud_reclaim_page but it turns out that there
is no benefit in generalizing this code.
(suggested by Seth Jennings)
3. Remove BUG_ON checks for first/last chunks during free and reclaim.
(suggested by Seth Jennings)
4. Use page->_mapcount==-127 instead of new PG_zbud flag.
(suggested by Dave Hansen)
5. Fix invalid dereference of pointer to compact_control in page_alloc.c.
6. Fix lost return value in try_to_unuse() in swapfile.c (this fixes
hang when swapoff was interrupted e.g. by CTRL+C).


Best regards,
Krzysztof Kozlowski


Krzysztof Kozlowski (4):
zbud: use page ref counter for zbud pages
mm: split code for unusing swap entries from try_to_unuse
mm: use mapcount for identifying zbud pages
mm: reclaim zbud pages on migration and compaction

include/linux/mm.h | 23 +++
include/linux/swapfile.h | 2 +
include/linux/zbud.h | 11 +-
mm/compaction.c | 20 ++-
mm/internal.h | 1 +
mm/page_alloc.c | 6 +
mm/swapfile.c | 356 ++++++++++++++++++++++++----------------------
mm/zbud.c | 247 +++++++++++++++++++++++---------
mm/zswap.c | 57 +++++++-
9 files changed, 476 insertions(+), 247 deletions(-)

--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/