Glauber Costa
d7f25f8a2f
memcg: infrastructure to match an allocation to the right cache
...
The page allocator is able to bind a page to a memcg when it is
allocated. But for the caches, we'd like to have as many objects as
possible in a page belonging to the same cache.
This is done in this patch by calling memcg_kmem_get_cache in the
beginning of every allocation function. This function is patched out by
static branches when kernel memory controller is not being used.
It assumes that the task allocating, which determines the memcg in the
page allocator, belongs to the same cgroup throughout the whole process.
Misaccounting can happen if the task calls memcg_kmem_get_cache() while
belonging to a cgroup, and later on changes. This is considered
acceptable, and should only happen upon task migration.
Before the cache is created by the memcg core, there is also a possible
imbalance: the task belongs to a memcg, but the cache being allocated from
is the global cache, since the child cache is not yet guaranteed to be
ready. This case is also fine, since in this case the GFP_KMEMCG will not
be passed and the page allocator will not attempt any cgroup accounting.
Signed-off-by: Glauber Costa <glommer@parallels.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Frederic Weisbecker <fweisbec@redhat.com>
Cc: Greg Thelen <gthelen@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: JoonSoo Kim <js1304@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Rik van Riel <riel@redhat.com>
Cc: Suleiman Souhlal <suleiman@google.com>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-12-18 15:02:14 -08:00
..
backing-dev.c
Revert "bdi: add a user-tunable cpu_list for the bdi flusher threads"
2012-12-17 11:29:09 -08:00
balloon_compaction.c
mm: introduce a common interface for balloon pages mobility
2012-12-11 17:22:26 -08:00
bootmem.c
mm/bootmem.c: remove unused wrapper function reserve_bootmem_generic()
2012-12-12 17:38:35 -08:00
bounce.c
bounce: allow use of bounce pool via config option
2012-07-18 16:40:35 -04:00
cleancache.c
compaction.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
debug-pagealloc.c
dmapool.c
dmapool: make DMAPOOL_DEBUG detect corruption of free marker
2012-12-11 17:22:24 -08:00
fadvise.c
switch simple cases of fget_light to fdget
2012-09-26 22:20:08 -04:00
failslab.c
filemap.c
readahead: fault retry breaks mmap file read random detection
2012-10-09 16:22:47 +09:00
filemap_xip.c
mm: move all mmu notifier invocations to be done outside the PT lock
2012-10-09 16:22:58 +09:00
fremap.c
remap_file_pages: correctly handle the case of a NULL vm_ops pointer
2012-10-19 13:37:57 -07:00
frontswap.c
frontswap: support exclusive gets if tmem backend is capable
2012-09-21 10:38:12 -04:00
highmem.c
mm, highmem: get virtual address of the page using PKMAP_ADDR()
2012-12-11 17:22:24 -08:00
huge_memory.c
mm: fix kernel BUG at huge_memory.c:1474!
2012-12-16 19:02:38 -08:00
hugetlb.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
hugetlb_cgroup.c
cgroup: rename ->create/post_create/pre_destroy/destroy() to ->css_alloc/online/offline/free()
2012-11-19 08:13:38 -08:00
hwpoison-inject.c
memcg: rename config variables
2012-07-31 18:42:43 -07:00
init-mm.c
internal.h
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
interval_tree.c
mm: add CONFIG_DEBUG_VM_RB build option
2012-10-09 16:22:42 +09:00
Kconfig
memory-hotplug: document and enable CONFIG_MOVABLE_NODE
2012-12-18 15:02:12 -08:00
Kconfig.debug
kmemcheck.c
kmemleak-test.c
kmemleak.c
kmemleak: use rbtree instead of prio tree
2012-10-09 16:22:39 +09:00
ksm.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
maccess.c
madvise.c
mm: prepare VM_DONTDUMP for using in drivers
2012-10-09 16:22:18 +09:00
Makefile
mm: introduce a common interface for balloon pages mobility
2012-12-11 17:22:26 -08:00
memblock.c
x86, mm: Trim memory in memblock to be page aligned
2012-10-24 11:52:21 -07:00
memcontrol.c
memcg: infrastructure to match an allocation to the right cache
2012-12-18 15:02:14 -08:00
memory-failure.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
memory.c
mm: use kbasename()
2012-12-17 17:15:17 -08:00
memory_hotplug.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
mempolicy.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
mempool.c
migrate.c
mm,numa: fix update_mmu_cache_pmd call
2012-12-17 19:37:03 -08:00
mincore.c
mlock.c
mm, thp: fix mlock statistics
2012-10-09 16:23:03 +09:00
mm_init.c
mmap.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
mmu_context.c
mmu_notifier.c
mm/mmu_notifier: allocate mmu_notifier in advance
2012-10-25 14:37:53 -07:00
mmzone.c
memcg: fix hotplugged memory zone oops
2012-11-16 14:33:04 -08:00
mprotect.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
mremap.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
msync.c
nobootmem.c
mm: introduce new field "managed_pages" to struct zone
2012-12-12 17:38:34 -08:00
nommu.c
mm: export a function to get vm committed memory
2012-11-15 15:41:22 -08:00
oom_kill.c
mm, oom: remove redundant sleep in pagefault oom handler
2012-12-12 17:38:34 -08:00
page-writeback.c
writeback: remove nr_pages_dirtied arg from balance_dirty_pages_ratelimited_nr()
2012-12-11 17:22:21 -08:00
page_alloc.c
mm: allocate kernel pages to the right memcg
2012-12-18 15:02:12 -08:00
page_cgroup.c
memcontrol: use N_MEMORY instead N_HIGH_MEMORY
2012-12-12 17:38:32 -08:00
page_io.c
mm: add support for direct_IO to highmem pages
2012-07-31 18:42:47 -07:00
page_isolation.c
memory-hotplug: skip HWPoisoned page when offlining pages
2012-12-11 17:22:22 -08:00
pagewalk.c
thp: change split_huge_page_pmd() interface
2012-12-12 17:38:31 -08:00
percpu-km.c
percpu-vm.c
percpu.c
mm, percpu: Make sure percpu_alloc early parameter has an argument
2012-12-02 06:23:04 -08:00
pgtable-generic.c
mm: Only flush the TLB when clearing an accessible pte
2012-12-11 14:28:34 +00:00
process_vm_access.c
quicklist.c
readahead.c
switch simple cases of fget_light to fdget
2012-09-26 22:20:08 -04:00
rmap.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00
shmem.c
lseek: the "whence" argument is called "whence"
2012-12-17 17:15:12 -08:00
slab.c
slab: annotate on-slab caches nodelist locks
2012-12-18 15:02:13 -08:00
slab.h
slab/slub: consider a memcg parameter in kmem_create_cache
2012-12-18 15:02:13 -08:00
slab_common.c
memcg: allocate memory for memcg caches whenever a new memcg appears
2012-12-18 15:02:13 -08:00
slob.c
mm/sl[aou]b: Common alignment code
2012-12-11 12:14:28 +02:00
slub.c
slab/slub: consider a memcg parameter in kmem_create_cache
2012-12-18 15:02:13 -08:00
sparse-vmemmap.c
sparse.c
memory-hotplug, mm/sparse.c: clear the memory to store struct page
2012-12-11 17:22:23 -08:00
swap.c
mm: remove vma arg from page_evictable
2012-10-09 16:22:55 +09:00
swap_state.c
mm: add support for a filesystem to activate swap files and use direct_IO for writing swap pages
2012-07-31 18:42:47 -07:00
swapfile.c
mm, oom: fix race when specifying a thread as the oom origin
2012-12-11 17:22:27 -08:00
truncate.c
mm: use clear_page_mlock() in page_remove_rmap()
2012-10-09 16:22:56 +09:00
util.c
Merge branch 'master' into for-next
2012-10-28 19:29:19 +01:00
vmalloc.c
mm: use IS_ENABLED(CONFIG_NUMA) instead of NUMA_BUILD
2012-12-11 17:22:22 -08:00
vmscan.c
vmscan: use N_MEMORY instead N_HIGH_MEMORY
2012-12-12 17:38:33 -08:00
vmstat.c
Automatic NUMA Balancing V11
2012-12-16 15:18:08 -08:00