[PATCH] memcg: better migration handling

Previous thread: [PATCH 1/2] add the device argument to dma_mapping_error by FUJITA Tomonori on Monday, May 12, 2008 - 11:04 pm. (31 messages)

Next thread: calculate actual state of caches wrt set of files/dirs, without modifying caches ? by Yakov Lerner on Monday, May 12, 2008 - 11:30 pm. (2 messages)
From: KAMEZAWA Hiroyuki
Date: Monday, May 12, 2008 - 11:31 pm

A cut out from memcg: performance improvement patch set.
Tested-on: x86-64 fake NUMA/linux-2.6.26-rc2 + (2 easy paches I sent)
older versions are tested on ia64/NUMA, too.

I have a plan to post a patch for removing reference count from page_cgroup.
Before that, this clean up/ logic change is necessary.
And I think this is better logic than currently used one.

removing-refcnt patch itself will be posted against -mm  to do long and wide
test. If this one should be against -mm, too, I'll repost.

Thanks,
-Kame
==
This patch changes page migration under memory controller to use
a different algorithm. (thanks to Christoph for new idea.)

Before:
 - page_cgroup is migrated from an old page to a new page.
After:
 - a new page is accoutned , no reuse of page_cgroup.

Pros:
 - We can avoid compliated lock depndencies and races in migration.
Cons:
 - new param to mem_cgroup_charge_common().
 - mem_cgroup_getref() is added for handling ref_cnt ping-pong. 

This version simplifies complicated lock dependency in page migraiton
under memory resource controller.

  new refcnt sequence is following.

a mapped page:
  prepage_migration() ..... +1 to NEW page
  try_to_unmap()      ..... all refs to OLD page is gone.
  move_pages()        ..... +1 to NEW page if page cache.
  remap...            ..... all refs from *map* is added to NEW one.
  end_migration()     ..... -1 to New page.

  page's mapcount + (page_is_cache) refs are added to NEW one.

Changelog:
 - add BUG_ON() to check return value from prepare_migration().

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>


---
 include/linux/memcontrol.h |   11 ++-
 mm/memcontrol.c            |  128 ++++++++++++++++++++++-----------------------
 mm/migrate.c               |   20 ++++---
 3 files changed, 84 insertions(+), 75 deletions(-)

Index: linux-2.6.26-rc2/mm/memcontrol.c
===================================================================
--- linux-2.6.26-rc2.orig/mm/memcontrol.c
+++ ...
Previous thread: [PATCH 1/2] add the device argument to dma_mapping_error by FUJITA Tomonori on Monday, May 12, 2008 - 11:04 pm. (31 messages)

Next thread: calculate actual state of caches wrt set of files/dirs, without modifying caches ? by Yakov Lerner on Monday, May 12, 2008 - 11:30 pm. (2 messages)