ANDROID: vendor_hooks: add hooks in mem_cgroup subsystem

Add hooks to tune memory policy based on mem_cgroup.

Bug: 192052083

Signed-off-by: Liujie Xie <xieliujie@oppo.com>
Change-Id: Ica1a5409eed86fbd466edd2c7557f94972a40175
This commit is contained in:
Liujie Xie
2021-07-03 12:09:04 +08:00
committed by Suren Baghdasaryan
parent 726468dd4a
commit 1cdcf76b15
2 changed files with 22 additions and 0 deletions

View File

@@ -101,6 +101,22 @@ struct mem_cgroup;
DECLARE_HOOK(android_vh_vmpressure, DECLARE_HOOK(android_vh_vmpressure,
TP_PROTO(struct mem_cgroup *memcg, bool *bypass), TP_PROTO(struct mem_cgroup *memcg, bool *bypass),
TP_ARGS(memcg, bypass)); TP_ARGS(memcg, bypass));
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
DECLARE_HOOK(android_vh_mem_cgroup_free,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
DECLARE_HOOK(android_vh_mem_cgroup_id_remove,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
struct cgroup_subsys_state;
DECLARE_HOOK(android_vh_mem_cgroup_css_online,
TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg),
TP_ARGS(css, memcg));
DECLARE_HOOK(android_vh_mem_cgroup_css_offline,
TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg),
TP_ARGS(css, memcg));
/* macro versions of hooks are no longer required */ /* macro versions of hooks are no longer required */
#endif /* _TRACE_HOOK_MM_H */ #endif /* _TRACE_HOOK_MM_H */

View File

@@ -67,6 +67,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <trace/events/vmscan.h> #include <trace/events/vmscan.h>
#include <trace/hooks/mm.h>
struct cgroup_subsys memory_cgrp_subsys __read_mostly; struct cgroup_subsys memory_cgrp_subsys __read_mostly;
EXPORT_SYMBOL(memory_cgrp_subsys); EXPORT_SYMBOL(memory_cgrp_subsys);
@@ -5148,6 +5149,7 @@ static DEFINE_IDR(mem_cgroup_idr);
static void mem_cgroup_id_remove(struct mem_cgroup *memcg) static void mem_cgroup_id_remove(struct mem_cgroup *memcg)
{ {
if (memcg->id.id > 0) { if (memcg->id.id > 0) {
trace_android_vh_mem_cgroup_id_remove(memcg);
idr_remove(&mem_cgroup_idr, memcg->id.id); idr_remove(&mem_cgroup_idr, memcg->id.id);
memcg->id.id = 0; memcg->id.id = 0;
} }
@@ -5244,6 +5246,7 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg)
{ {
int node; int node;
trace_android_vh_mem_cgroup_free(memcg);
for_each_node(node) for_each_node(node)
free_mem_cgroup_per_node_info(memcg, node); free_mem_cgroup_per_node_info(memcg, node);
free_percpu(memcg->vmstats_percpu); free_percpu(memcg->vmstats_percpu);
@@ -5327,6 +5330,7 @@ static struct mem_cgroup *mem_cgroup_alloc(void)
memcg->deferred_split_queue.split_queue_len = 0; memcg->deferred_split_queue.split_queue_len = 0;
#endif #endif
idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); idr_replace(&mem_cgroup_idr, memcg, memcg->id.id);
trace_android_vh_mem_cgroup_alloc(memcg);
return memcg; return memcg;
fail: fail:
mem_cgroup_id_remove(memcg); mem_cgroup_id_remove(memcg);
@@ -5416,6 +5420,7 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css)
/* Online state pins memcg ID, memcg ID pins CSS */ /* Online state pins memcg ID, memcg ID pins CSS */
refcount_set(&memcg->id.ref, 1); refcount_set(&memcg->id.ref, 1);
css_get(css); css_get(css);
trace_android_vh_mem_cgroup_css_online(css, memcg);
return 0; return 0;
} }
@@ -5424,6 +5429,7 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css)
struct mem_cgroup *memcg = mem_cgroup_from_css(css); struct mem_cgroup *memcg = mem_cgroup_from_css(css);
struct mem_cgroup_event *event, *tmp; struct mem_cgroup_event *event, *tmp;
trace_android_vh_mem_cgroup_css_offline(css, memcg);
/* /*
* Unregister events and notify userspace. * Unregister events and notify userspace.
* Notify userspace about cgroup removing only after rmdir of cgroup * Notify userspace about cgroup removing only after rmdir of cgroup