linux-api.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] enable migration of driver pages
@ 2015-07-13  8:35 Gioh Kim
  2015-07-13  8:35 ` [PATCH 1/4] fs/anon_inodes: new interface to create new inode Gioh Kim
                   ` (5 more replies)
  0 siblings, 6 replies; 22+ messages in thread
From: Gioh Kim @ 2015-07-13  8:35 UTC (permalink / raw)
  To: jlayton, bfields, vbabka, iamjoonsoo.kim, viro, mst, koct9i,
	minchan, aquini, linux-fsdevel, virtualization, linux-kernel,
	linux-api, linux-mm
  Cc: dri-devel, akpm, Gioh Kim

From: Gioh Kim <gurugio@hanmail.net>

Hello,

This series try to enable migration of non-LRU pages, such as driver's page.

My ARM-based platform occured severe fragmentation problem after long-term
(several days) test. Sometimes even order-3 page allocation failed. It has
memory size 512MB ~ 1024MB. 30% ~ 40% memory is consumed for graphic processing
and 20~30 memory is reserved for zram.

I found that many pages of GPU driver and zram are non-movable pages. So I
reported Minchan Kim, the maintainer of zram, and he made the internal 
compaction logic of zram. And I made the internal compaction of GPU driver.

They reduced some fragmentation but they are not enough effective.
They are activated by its own interface, /sys, so they are not cooperative
with kernel compaction. If there is too much fragmentation and kernel starts
to compaction, zram and GPU driver cannot work with the kernel compaction.

So I thought there needs a interface to combine driver and kernel compaction.
This patch adds a generic isolate/migrate/putback callbacks for page
address-space and a new interface to create anon-inode to manage
address_space_operation. The zram and GPU, and any other modules can create
anon_inode and register its own migration method. The kernel compaction can
call the registered migration when it does compaction.

My GPU driver source is not in-kernel driver so that I apply the interface
into balloon driver. The balloon driver is already merged
into the kernel compaction as a corner-case. This patch have the balloon
driver migration be called by the generic interface.


This patch set combines 4 patches.

1. patch 1/4: get inode from anon_inodes
This patch adds new interface to create inode from anon_inodes.

2. patch 2/4: framework to isolate/migrate/putback page
Add isolatepage, putbackpage into address_space_operations
and wrapper function to call them.

3. patch 3/4: apply the framework into balloon driver
The balloon driver is applied into the framework. It gets a inode
from anon_inodes and register operations in the inode.
The kernel compaction calls generic interfaces, not balloon
driver interfaces. 
Any other drivers can register operations via inode like this
to migrate it's pages.

4. patch 4/4: remove direct calling of migration of driver pages
Non-lru pages are also migrated with lru pages by move_to_new_page().

This patch set is tested:
- turn on Ubuntu 14.04 with 1G memory on qemu.
- do kernel building
- after several seconds check more than 512MB is used with free command
- command "balloon 512" in qemu monitor
- check hundreds MB of pages are migrated

My thanks to Konstantin Khlebnikov for his reviews of the RFC patch set.
Most of the changes were based on his feedback.

This patch-set is based on v4.1


Gioh Kim (4):
  fs/anon_inodes: new interface to create new inode
  mm/compaction: enable mobile-page migration
  mm/balloon: apply mobile page migratable into balloon
  mm: remove direct calling of migration

 drivers/virtio/virtio_balloon.c        |  3 ++
 fs/anon_inodes.c                       |  6 +++
 fs/proc/page.c                         |  3 ++
 include/linux/anon_inodes.h            |  1 +
 include/linux/balloon_compaction.h     | 15 +++++--
 include/linux/compaction.h             | 80 ++++++++++++++++++++++++++++++++++
 include/linux/fs.h                     |  2 +
 include/linux/page-flags.h             | 19 ++++++++
 include/uapi/linux/kernel-page-flags.h |  1 +
 mm/balloon_compaction.c                | 72 ++++++++++--------------------
 mm/compaction.c                        |  8 ++--
 mm/migrate.c                           | 24 +++-------
 12 files changed, 160 insertions(+), 74 deletions(-)

-- 
2.1.4


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

end of thread, other threads:[~2015-08-10  7:19 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-13  8:35 [PATCH 0/4] enable migration of driver pages Gioh Kim
2015-07-13  8:35 ` [PATCH 1/4] fs/anon_inodes: new interface to create new inode Gioh Kim
2015-07-29 10:50   ` Mel Gorman
2015-07-13  8:35 ` [PATCH 2/4] mm/compaction: enable mobile-page migration Gioh Kim
2015-07-27 13:55   ` Vlastimil Babka
     [not found]     ` <55B63851.1080100-AlSwsSmVLrQ@public.gmane.org>
2015-07-27 18:56       ` Konstantin Khlebnikov
2015-07-28  0:21         ` Gioh Kim
2015-07-29 10:52   ` Mel Gorman
2015-07-31 10:43   ` Minchan Kim
2015-08-10  7:19     ` Minchan Kim
2015-07-13  8:35 ` [PATCH 3/4] mm/balloon: apply mobile page migratable into balloon Gioh Kim
     [not found] ` <1436776519-17337-1-git-send-email-gioh.kim-Hm3cg6mZ9cc@public.gmane.org>
2015-07-13  8:35   ` [PATCH 4/4] mm: remove direct calling of migration Gioh Kim
2015-07-27 13:58     ` Vlastimil Babka
2015-07-28  0:26       ` Gioh Kim
2015-07-13 14:20   ` [PATCH 0/4] enable migration of driver pages Rafael Aquini
2015-07-13  9:24 ` Konstantin Khlebnikov
2015-07-13 10:02   ` Gioh Kim
2015-07-29 10:49 ` Mel Gorman
2015-07-29 10:55   ` Daniel Vetter
2015-07-29 12:16     ` Mel Gorman
2015-07-29 12:46       ` Daniel Vetter
2015-07-30  0:21         ` Gioh Kim

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).