Files
kernel_arpi/include/linux
KAMEZAWA Hiroyuki 569b846df5 memcg: coalesce uncharge during unmap/truncate
In massive parallel enviroment, res_counter can be a performance
bottleneck.  One strong techinque to reduce lock contention is reducing
calls by coalescing some amount of calls into one.

Considering charge/uncharge chatacteristic,
	- charge is done one by one via demand-paging.
	- uncharge is done by
		- in chunk at munmap, truncate, exit, execve...
		- one by one via vmscan/paging.

It seems we have a chance to coalesce uncharges for improving scalability
at unmap/truncation.

This patch is a for coalescing uncharge.  For avoiding scattering memcg's
structure to functions under /mm, this patch adds memcg batch uncharge
information to the task.  A reason for per-task batching is for making use
of caller's context information.  We do batched uncharge (deleyed
uncharge) when truncation/unmap occurs but do direct uncharge when
uncharge is called by memory reclaim (vmscan.c).

The degree of coalescing depends on callers
  - at invalidate/trucate... pagevec size
  - at unmap ....ZAP_BLOCK_SIZE
(memory itself will be freed in this degree.)
Then, we'll not coalescing too much.

On x86-64 8cpu server, I tested overheads of memcg at page fault by
running a program which does map/fault/unmap in a loop. Running
a task per a cpu by taskset and see sum of the number of page faults
in 60secs.

[without memcg config]
  40156968  page-faults              #      0.085 M/sec   ( +-   0.046% )
  27.67 cache-miss/faults
[root cgroup]
  36659599  page-faults              #      0.077 M/sec   ( +-   0.247% )
  31.58 miss/faults
[in a child cgroup]
  18444157  page-faults              #      0.039 M/sec   ( +-   0.133% )
  69.96 miss/faults
[child with this patch]
  27133719  page-faults              #      0.057 M/sec   ( +-   0.155% )
  47.16 miss/faults

We can see some amounts of improvement.
(root cgroup doesn't affected by this patch)
Another patch for "charge" will follow this and above will be improved more.

Changelog(since 2009/10/02):
 - renamed filed of memcg_batch (as pages to bytes, memsw to memsw_bytes)
 - some clean up and commentary/description updates.
 - added initialize code to copy_process(). (possible bug fix)

Changelog(old):
 - fixed !CONFIG_MEM_CGROUP case.
 - rebased onto the latest mmotm + softlimit fix patches.
 - unified patch for callers
 - added commetns.
 - make ->do_batch as bool.
 - removed css_get() at el. We don't need it.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Balbir Singh <balbir@in.ibm.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-12-16 07:20:07 -08:00
..
2009-12-14 00:26:26 +01:00
2009-11-24 08:18:54 +02:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-09-23 07:39:29 -07:00
2009-10-27 16:47:55 -04:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-09-19 02:14:45 -04:00
2009-09-20 16:09:20 +05:30
2009-11-10 12:31:43 +01:00
2009-11-08 20:57:03 -08:00
2009-12-06 21:10:56 +01:00
2009-09-23 11:01:25 -07:00
2009-09-18 09:48:52 -07:00
2009-12-10 23:52:01 +00:00
2009-11-04 09:50:58 -08:00
2009-10-01 21:17:49 +02:00
2009-10-01 21:17:49 +02:00
2009-12-15 08:53:33 -08:00
2009-11-04 09:50:58 -08:00
2009-12-10 15:02:53 +01:00
2009-11-04 09:50:58 -08:00
2009-12-10 15:02:50 +01:00
2009-11-04 09:50:58 -08:00
2009-11-10 11:50:21 +01:00
2009-12-03 11:58:47 +00:00
2009-11-05 14:08:03 +01:00
2009-12-14 23:55:34 +01:00
2009-12-14 21:17:29 +01:00
2009-11-28 15:05:05 -05:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-12-02 23:38:13 -08:00
2009-09-23 07:39:41 -07:00
2009-11-04 09:50:58 -08:00
2009-09-26 10:17:19 -07:00
2009-10-18 18:52:53 -07:00
2009-09-30 00:32:06 -04:00
2009-09-23 07:39:58 -07:00
2009-12-11 15:18:03 -08:00
2009-09-19 13:13:17 -07:00
2009-09-26 10:17:19 -07:00
2009-12-15 08:53:20 -08:00
2009-12-03 09:32:17 +02:00
2009-12-09 17:14:38 +11:00
2009-12-15 08:53:36 -08:00
2009-10-01 21:17:49 +02:00
2009-09-22 07:17:35 -07:00
2009-12-15 08:53:20 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-09-26 10:17:19 -07:00
2009-11-28 15:05:05 -05:00
2009-12-09 12:12:44 +02:00
2009-12-15 08:53:17 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-12-15 08:53:25 -08:00
2009-09-22 07:17:47 -07:00
2009-10-04 15:05:10 -07:00
2009-12-03 11:43:23 +00:00
2009-12-02 09:55:33 +01:00
2009-09-23 07:39:41 -07:00
2009-11-10 22:26:29 -08:00
2009-10-30 15:06:37 -07:00
2009-12-15 08:53:20 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-30 12:02:53 +09:00
2009-12-02 19:57:15 -08:00
2009-11-18 14:52:25 +01:00
2009-10-26 09:40:30 +01:00
2009-12-15 08:53:16 -08:00
2009-12-11 06:44:29 -05:00
2009-11-13 20:46:24 +01:00
2009-10-29 11:17:40 +11:00
2009-11-10 20:54:38 -08:00
2009-09-23 18:13:10 -07:00
2009-09-23 22:26:32 +09:30