linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/19] Support non-lru page migration
@ 2016-03-11  7:30 Minchan Kim
  2016-03-11  7:30 ` [PATCH v1 01/19] mm: use put_page to free page instead of putback_lru_page Minchan Kim
                   ` (18 more replies)
  0 siblings, 19 replies; 42+ messages in thread
From: Minchan Kim @ 2016-03-11  7:30 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-mm, linux-kernel, jlayton, bfields, Vlastimil Babka,
	Joonsoo Kim, koct9i, aquini, virtualization, Mel Gorman,
	Hugh Dickins, Sergey Senozhatsky, rknize, Rik van Riel, Gioh Kim,
	Minchan Kim

Recently, I got many reports about perfermance degradation
in embedded system(Android mobile phone, webOS TV and so on)
and failed to fork easily.

The problem was fragmentation caused by zram and GPU driver
pages. Their pages cannot be migrated so compaction cannot
work well, either so reclaimer ends up shrinking all of working
set pages. It made system very slow and even to fail to fork
easily.

Other pain point is that they cannot work with CMA.
Most of CMA memory space could be idle(ie, it could be used
for movable pages unless driver is using) but if driver(i.e.,
zram) cannot migrate his page, that memory space could be
wasted. In our product which has big CMA memory, it reclaims
zones too exccessively although there are lots of free space
in CMA so system was very slow easily.

To solve these problem, this patch try to add facility to
migrate non-lru pages via introducing new friend functions
of migratepage in address_space_operation and new page flags.

	(isolate_page, putback_page)
	(PG_movable, PG_isolated)

For details, please read description in
"mm/compaction: support non-lru movable page migration".

Originally, Gioh Kim tried to support this feature but he moved
so I took over the work. But I took many code from his work and
changed a little bit.
Thanks, Gioh!

And I should mention Konstantin Khlebnikov. He really heped Gioh
at that time so he should deserve to have many credit, too.
Thanks, Konstantin!

This patchset consists of three parts

1. add non-lru page migration feature

  mm: use put_page to free page instead of putback_lru_page
  fs/anon_inodes: new interface to create new inode
  mm/compaction: support non-lru movable page migration

2. rework KVM memory-ballooning

  mm/balloon: use general movable page feature into balloon

3. rework zsmalloc

  zsmalloc: use first_page rather than page
  zsmalloc: clean up many BUG_ON
  zsmalloc: reordering function parameter
  zsmalloc: remove unused pool param in obj_free
  zsmalloc: keep max_object in size_class
  zsmalloc: squeeze inuse into page->mapping
  zsmalloc: squeeze freelist into page->mapping
  zsmalloc: move struct zs_meta from mapping to freelist
  zsmalloc: factor page chain functionality out
  zsmalloc: separate free_zspage from putback_zspage
  zsmalloc: zs_compact refactoring
  zsmalloc: migrate head page of zspage
  zsmalloc: use single linked list for page chain
  zsmalloc: migrate tail pages in zspage
  zram: use __GFP_MOVABLE for memory allocation

Gioh Kim (1):
  fs/anon_inodes: new interface to create new inode

Minchan Kim (18):
  mm: use put_page to free page instead of putback_lru_page
  mm/compaction: support non-lru movable page migration
  mm/balloon: use general movable page feature into balloon
  zsmalloc: use first_page rather than page
  zsmalloc: clean up many BUG_ON
  zsmalloc: reordering function parameter
  zsmalloc: remove unused pool param in obj_free
  zsmalloc: keep max_object in size_class
  zsmalloc: squeeze inuse into page->mapping
  zsmalloc: squeeze freelist into page->mapping
  zsmalloc: move struct zs_meta from mapping to freelist
  zsmalloc: factor page chain functionality out
  zsmalloc: separate free_zspage from putback_zspage
  zsmalloc: zs_compact refactoring
  zsmalloc: migrate head page of zspage
  zsmalloc: use single linked list for page chain
  zsmalloc: migrate tail pages in zspage
  zram: use __GFP_MOVABLE for memory allocation

 Documentation/filesystems/Locking      |    4 +
 Documentation/filesystems/vfs.txt      |    5 +
 drivers/block/zram/zram_drv.c          |    3 +-
 drivers/virtio/virtio_balloon.c        |    4 +
 fs/anon_inodes.c                       |    6 +
 fs/proc/page.c                         |    3 +
 include/linux/anon_inodes.h            |    1 +
 include/linux/balloon_compaction.h     |   47 +-
 include/linux/compaction.h             |    8 +
 include/linux/fs.h                     |    2 +
 include/linux/migrate.h                |    2 +
 include/linux/page-flags.h             |   42 +-
 include/uapi/linux/kernel-page-flags.h |    1 +
 mm/balloon_compaction.c                |  101 +--
 mm/compaction.c                        |   15 +-
 mm/migrate.c                           |  197 +++--
 mm/vmscan.c                            |    2 +-
 mm/zsmalloc.c                          | 1295 +++++++++++++++++++++++---------
 18 files changed, 1219 insertions(+), 519 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2016-03-17 22:16 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-11  7:30 [PATCH v1 00/19] Support non-lru page migration Minchan Kim
2016-03-11  7:30 ` [PATCH v1 01/19] mm: use put_page to free page instead of putback_lru_page Minchan Kim
2016-03-14  8:48   ` Vlastimil Babka
2016-03-15  1:16     ` Minchan Kim
2016-03-15 19:06       ` Vlastimil Babka
2016-03-11  7:30 ` [PATCH v1 02/19] mm/compaction: support non-lru movable page migration Minchan Kim
2016-03-11  8:11   ` kbuild test robot
2016-03-11  8:35     ` Minchan Kim
2016-03-11  7:30 ` [PATCH v1 03/19] fs/anon_inodes: new interface to create new inode Minchan Kim
2016-03-11  8:05   ` Al Viro
2016-03-11 14:24     ` Gioh Kim
2016-03-11  7:30 ` [PATCH v1 04/19] mm/balloon: use general movable page feature into balloon Minchan Kim
2016-03-11  7:30 ` [PATCH v1 05/19] zsmalloc: use first_page rather than page Minchan Kim
2016-03-15  6:19   ` Sergey Senozhatsky
2016-03-11  7:30 ` [PATCH v1 06/19] zsmalloc: clean up many BUG_ON Minchan Kim
2016-03-15  6:19   ` Sergey Senozhatsky
2016-03-11  7:30 ` [PATCH v1 07/19] zsmalloc: reordering function parameter Minchan Kim
2016-03-15  6:20   ` Sergey Senozhatsky
2016-03-11  7:30 ` [PATCH v1 08/19] zsmalloc: remove unused pool param in obj_free Minchan Kim
2016-03-15  6:21   ` Sergey Senozhatsky
2016-03-11  7:30 ` [PATCH v1 09/19] zsmalloc: keep max_object in size_class Minchan Kim
2016-03-12  1:44   ` xuyiping
2016-03-14  4:55     ` Minchan Kim
2016-03-15  6:28   ` Sergey Senozhatsky
2016-03-15  6:41     ` Minchan Kim
2016-03-11  7:30 ` [PATCH v1 10/19] zsmalloc: squeeze inuse into page->mapping Minchan Kim
2016-03-11  7:30 ` [PATCH v1 11/19] zsmalloc: squeeze freelist " Minchan Kim
2016-03-15  6:40   ` Sergey Senozhatsky
2016-03-15  6:51     ` Minchan Kim
2016-03-17 12:09       ` YiPing Xu
2016-03-17 22:17         ` Minchan Kim
2016-03-11  7:30 ` [PATCH v1 12/19] zsmalloc: move struct zs_meta from mapping to freelist Minchan Kim
2016-03-11  7:30 ` [PATCH v1 13/19] zsmalloc: factor page chain functionality out Minchan Kim
2016-03-12  3:09   ` xuyiping
2016-03-14  4:58     ` Minchan Kim
2016-03-11  7:30 ` [PATCH v1 14/19] zsmalloc: separate free_zspage from putback_zspage Minchan Kim
2016-03-11  7:30 ` [PATCH v1 15/19] zsmalloc: zs_compact refactoring Minchan Kim
2016-03-11  7:30 ` [PATCH v1 16/19] zsmalloc: migrate head page of zspage Minchan Kim
2016-03-11  7:30 ` [PATCH v1 17/19] zsmalloc: use single linked list for page chain Minchan Kim
2016-03-11  7:30 ` [PATCH v1 18/19] zsmalloc: migrate tail pages in zspage Minchan Kim
2016-03-11  7:30 ` [PATCH v1 19/19] zram: use __GFP_MOVABLE for memory allocation Minchan Kim
2016-03-15  6:56   ` Sergey Senozhatsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).