All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gioh Kim <gioh.kim@lge.com>
To: jlayton@poochiereds.net, bfields@fieldses.org,
	akpm@linux-foundation.org, vbabka@suse.cz,
	iamjoonsoo.kim@lge.com, mst@redhat.com, kirill@shutemov.name,
	minchan@kernel.org, mgorman@suse.de
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	virtualization@lists.linux-foundation.org, gunho.lee@lge.com,
	Gioh Kim <gioh.kim@lge.com>
Subject: [RFC 0/4] enable migration of non-LRU pages
Date: Tue,  2 Jun 2015 16:27:40 +0900	[thread overview]
Message-ID: <1433230065-3573-1-git-send-email-gioh.kim@lge.com> (raw)

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.

The first this patch adds a generic isolate/migrate/putback callbacks for page
address-space. The zram and GPU, and any other modules can register
its own migration method. The kernel compaction can call the registered
migration when it works. Therefore all page in the system can be migrated
at once.

The 2nd the generic migration callbacks are applied into balloon driver.
My gpu driver code is not open so I apply generic migration into balloon
to show how it works. I've tested it with qemu enabled by kvm like followings:
- 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

Next kernel compaction code can call generic migration callbacks instead of
balloon driver interface.
Finally calling migration of balloon driver is removed.


Gioh Kim (4):
  mm/compaction: enable driver page migration
  mm/balloon: apply migratable-page into balloon driver
  mm/compaction: apply migratable-page into compaction
  mm: remove direct migration of migratable-page

 drivers/virtio/virtio_balloon.c        |  2 +
 fs/proc/page.c                         |  4 +-
 include/linux/balloon_compaction.h     | 42 +++++++++++++++------
 include/linux/compaction.h             | 13 +++++++
 include/linux/fs.h                     |  2 +
 include/linux/mm.h                     | 14 +++----
 include/linux/pagemap.h                | 27 ++++++++++++++
 include/uapi/linux/kernel-page-flags.h |  2 +-
 mm/balloon_compaction.c                | 67 +++++++++++++++++++++++++++++-----
 mm/compaction.c                        |  9 +++--
 mm/migrate.c                           | 25 ++++---------
 11 files changed, 154 insertions(+), 53 deletions(-)

-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: Gioh Kim <gioh.kim@lge.com>
To: jlayton@poochiereds.net, bfields@fieldses.org,
	akpm@linux-foundation.org, vbabka@suse.cz,
	iamjoonsoo.kim@lge.com, mst@redhat.com, kirill@shutemov.name,
	minchan@kernel.org, mgorman@suse.de
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	virtualization@lists.linux-foundation.org, gunho.lee@lge.com,
	Gioh Kim <gioh.kim@lge.com>
Subject: [RFC 0/4] enable migration of non-LRU pages
Date: Tue,  2 Jun 2015 16:27:40 +0900	[thread overview]
Message-ID: <1433230065-3573-1-git-send-email-gioh.kim@lge.com> (raw)

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.

The first this patch adds a generic isolate/migrate/putback callbacks for page
address-space. The zram and GPU, and any other modules can register
its own migration method. The kernel compaction can call the registered
migration when it works. Therefore all page in the system can be migrated
at once.

The 2nd the generic migration callbacks are applied into balloon driver.
My gpu driver code is not open so I apply generic migration into balloon
to show how it works. I've tested it with qemu enabled by kvm like followings:
- 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

Next kernel compaction code can call generic migration callbacks instead of
balloon driver interface.
Finally calling migration of balloon driver is removed.


Gioh Kim (4):
  mm/compaction: enable driver page migration
  mm/balloon: apply migratable-page into balloon driver
  mm/compaction: apply migratable-page into compaction
  mm: remove direct migration of migratable-page

 drivers/virtio/virtio_balloon.c        |  2 +
 fs/proc/page.c                         |  4 +-
 include/linux/balloon_compaction.h     | 42 +++++++++++++++------
 include/linux/compaction.h             | 13 +++++++
 include/linux/fs.h                     |  2 +
 include/linux/mm.h                     | 14 +++----
 include/linux/pagemap.h                | 27 ++++++++++++++
 include/uapi/linux/kernel-page-flags.h |  2 +-
 mm/balloon_compaction.c                | 67 +++++++++++++++++++++++++++++-----
 mm/compaction.c                        |  9 +++--
 mm/migrate.c                           | 25 ++++---------
 11 files changed, 154 insertions(+), 53 deletions(-)

-- 
1.9.1

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Gioh Kim <gioh.kim@lge.com>
To: jlayton@poochiereds.net, bfields@fieldses.org,
	akpm@linux-foundation.org, vbabka@suse.cz,
	iamjoonsoo.kim@lge.com, mst@redhat.com, kirill@shutemov.name,
	minchan@kernel.org, mgorman@suse.de
Cc: linux-mm@kvack.org, Gioh Kim <gioh.kim@lge.com>,
	gunho.lee@lge.com, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org
Subject: [RFC 0/4] enable migration of non-LRU pages
Date: Tue,  2 Jun 2015 16:27:40 +0900	[thread overview]
Message-ID: <1433230065-3573-1-git-send-email-gioh.kim@lge.com> (raw)

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.

The first this patch adds a generic isolate/migrate/putback callbacks for page
address-space. The zram and GPU, and any other modules can register
its own migration method. The kernel compaction can call the registered
migration when it works. Therefore all page in the system can be migrated
at once.

The 2nd the generic migration callbacks are applied into balloon driver.
My gpu driver code is not open so I apply generic migration into balloon
to show how it works. I've tested it with qemu enabled by kvm like followings:
- 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

Next kernel compaction code can call generic migration callbacks instead of
balloon driver interface.
Finally calling migration of balloon driver is removed.


Gioh Kim (4):
  mm/compaction: enable driver page migration
  mm/balloon: apply migratable-page into balloon driver
  mm/compaction: apply migratable-page into compaction
  mm: remove direct migration of migratable-page

 drivers/virtio/virtio_balloon.c        |  2 +
 fs/proc/page.c                         |  4 +-
 include/linux/balloon_compaction.h     | 42 +++++++++++++++------
 include/linux/compaction.h             | 13 +++++++
 include/linux/fs.h                     |  2 +
 include/linux/mm.h                     | 14 +++----
 include/linux/pagemap.h                | 27 ++++++++++++++
 include/uapi/linux/kernel-page-flags.h |  2 +-
 mm/balloon_compaction.c                | 67 +++++++++++++++++++++++++++++-----
 mm/compaction.c                        |  9 +++--
 mm/migrate.c                           | 25 ++++---------
 11 files changed, 154 insertions(+), 53 deletions(-)

-- 
1.9.1

             reply	other threads:[~2015-06-02  7:27 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-02  7:27 Gioh Kim [this message]
2015-06-02  7:27 ` [RFC 0/4] enable migration of non-LRU pages Gioh Kim
2015-06-02  7:27 ` Gioh Kim
2015-06-02  7:27 ` [RFC 1/4] mm/compaction: enable driver page migration Gioh Kim
2015-06-02  7:27   ` Gioh Kim
2015-06-02  7:27 ` Gioh Kim
2015-06-02  7:27 ` [RFC 2/4] mm/balloon: apply driver page migratable into balloon driver Gioh Kim
2015-06-02  7:27   ` Gioh Kim
2015-06-03  1:49   ` Konstantin Khlebnikov
2015-06-03  1:49     ` Konstantin Khlebnikov
2015-06-03  4:54     ` Gioh Kim
2015-06-03  4:54       ` Gioh Kim
2015-06-03  4:54     ` Gioh Kim
2015-06-03  1:49   ` Konstantin Khlebnikov
2015-06-02  7:27 ` Gioh Kim
2015-06-02  7:27 ` [RFC 3/4] mm/compaction: compaction calls generic migration Gioh Kim
2015-06-02  7:27 ` Gioh Kim
2015-06-02  7:27   ` Gioh Kim
2015-06-02  7:27 ` [RFC 4/4] mm: remove direct calling of migration Gioh Kim
2015-06-02  7:27 ` Gioh Kim
2015-06-02  7:27   ` Gioh Kim
2015-06-05 13:53 ` [RFC 0/4] enable migration of non-LRU pages Rafael Aquini
2015-06-05 13:53   ` Rafael Aquini
2015-06-05 14:35   ` Gioh Kim
2015-06-05 14:35   ` Gioh Kim
2015-06-05 14:35     ` Gioh Kim
2015-06-05 14:43     ` Rafael Aquini
2015-06-05 14:43     ` Rafael Aquini
2015-06-05 14:43       ` Rafael Aquini
2015-06-05 13:53 ` Rafael Aquini
2015-06-10  0:08 ` Minchan Kim
2015-06-10  0:08   ` Minchan Kim
2015-06-10  0:08   ` Minchan Kim
2015-06-10  1:08   ` Gioh Kim
2015-06-10  1:08     ` Gioh Kim
2015-06-10  1:08     ` Gioh Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1433230065-3573-1-git-send-email-gioh.kim@lge.com \
    --to=gioh.kim@lge.com \
    --cc=akpm@linux-foundation.org \
    --cc=bfields@fieldses.org \
    --cc=gunho.lee@lge.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=jlayton@poochiereds.net \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=minchan@kernel.org \
    --cc=mst@redhat.com \
    --cc=vbabka@suse.cz \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.