memcg: count the soft_limit reclaim in global background reclaim
authorYing Han <>
Thu, 26 May 2011 23:25:25 +0000 (16:25 -0700)
committerLinus Torvalds <>
Fri, 27 May 2011 00:12:35 +0000 (17:12 -0700)
The global kswapd scans per-zone LRU and reclaims pages regardless of the
cgroup. It breaks memory isolation since one cgroup can end up reclaiming
pages from another cgroup. Instead we should rely on memcg-aware target
reclaim including per-memcg kswapd and soft_limit hierarchical reclaim under
memory pressure.

In the global background reclaim, we do soft reclaim before scanning the
per-zone LRU. However, the return value is ignored. This patch is the first
step to skip shrink_zone() if soft_limit reclaim does enough work.

This is part of the effort which tries to reduce reclaiming pages in global
LRU in memcg. The per-memcg background reclaim patchset further enhances the
per-cgroup targetting reclaim, which I should have V4 posted shortly.

Try running multiple memory intensive workloads within seperate memcgs. Watch
the counters of soft_steal in memory.stat.

  $ cat /dev/cgroup/A/memory.stat | grep 'soft'
  soft_steal 240000
  soft_scan 240000
  total_soft_steal 240000
  total_soft_scan 240000

This patch:

In the global background reclaim, we do soft reclaim before scanning the
per-zone LRU.  However, the return value is ignored.

We would like to skip shrink_zone() if soft_limit reclaim does enough
work.  Also, we need to make the memory pressure balanced across per-memcg
zones, like the logic vm-core.  This patch is the first step where we
start with counting the nr_scanned and nr_reclaimed from soft_limit
reclaim into the global scan_control.

Signed-off-by: Ying Han <>
Cc: KOSAKI Motohiro <>
Cc: Minchan Kim <>
Cc: Rik van Riel <>
Cc: Mel Gorman <>
Cc: KAMEZAWA Hiroyuki <>
Cc: Balbir Singh <>
Acked-by: Daisuke Nishimura <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>

No differences found