ANDROID: Add vendor hook for MemcgV2 optimization
The associated vendor hooks/data are used for implementing dynamic memory.low protection based on memcgv2. Bug: 232723420 Test: build pass Change-Id: I2e92bdc2840af1eaaa08ee6427d2a82d78390005 Signed-off-by: zhaoyang.huang <zhaoyang.huang@unisoc.com>
This commit is contained in:
parent
dbb4320c14
commit
ebc5cf22b4
|
@ -356,3 +356,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_partial_init);
|
|||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mmc_cache_card_properties);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_print_transaction_info);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_tlb_conf);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_memcgv2_init);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_memcgv2_calc_decayed_watermark);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_watermark);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/vmstat.h>
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/page-flags.h>
|
||||
#include <linux/android_vendor.h>
|
||||
|
||||
struct mem_cgroup;
|
||||
struct obj_cgroup;
|
||||
|
@ -353,6 +354,9 @@ struct mem_cgroup {
|
|||
struct lru_gen_mm_list mm_list;
|
||||
#endif
|
||||
|
||||
/* for dynamic low */
|
||||
ANDROID_VENDOR_DATA(1);
|
||||
|
||||
struct mem_cgroup_per_node *nodeinfo[];
|
||||
};
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <linux/atomic.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/page.h>
|
||||
#include <linux/android_vendor.h>
|
||||
|
||||
struct page_counter {
|
||||
atomic_long_t usage;
|
||||
|
@ -26,6 +27,7 @@ struct page_counter {
|
|||
/* legacy */
|
||||
unsigned long watermark;
|
||||
unsigned long failcnt;
|
||||
ANDROID_VENDOR_DATA(1);
|
||||
|
||||
/*
|
||||
* 'parent' is placed here to be far from 'usage' to reduce
|
||||
|
|
|
@ -14,12 +14,26 @@ DECLARE_HOOK(android_vh_cgroup_set_task,
|
|||
|
||||
struct cgroup_subsys;
|
||||
struct cgroup_taskset;
|
||||
struct cgroup;
|
||||
DECLARE_HOOK(android_vh_cgroup_attach,
|
||||
TP_PROTO(struct cgroup_subsys *ss, struct cgroup_taskset *tset),
|
||||
TP_ARGS(ss, tset))
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_cgroup_force_kthread_migration,
|
||||
TP_PROTO(struct task_struct *tsk, struct cgroup *dst_cgrp, bool *force_migration),
|
||||
TP_ARGS(tsk, dst_cgrp, force_migration), 1);
|
||||
struct mem_cgroup;
|
||||
DECLARE_HOOK(android_rvh_memcgv2_init,
|
||||
TP_PROTO(struct mem_cgroup *memcg),
|
||||
TP_ARGS(memcg));
|
||||
|
||||
DECLARE_HOOK(android_rvh_memcgv2_calc_decayed_watermark,
|
||||
TP_PROTO(struct mem_cgroup *memcg),
|
||||
TP_ARGS(memcg));
|
||||
|
||||
struct page_counter;
|
||||
DECLARE_HOOK(android_rvh_update_watermark,
|
||||
TP_PROTO(u64 new, struct page_counter *counter),
|
||||
TP_ARGS(new, counter));
|
||||
#endif
|
||||
|
||||
#include <trace/define_trace.h>
|
||||
|
|
|
@ -71,6 +71,8 @@
|
|||
|
||||
#include <trace/events/vmscan.h>
|
||||
|
||||
#include <trace/hooks/cgroup.h>
|
||||
|
||||
struct cgroup_subsys memory_cgrp_subsys __read_mostly;
|
||||
EXPORT_SYMBOL(memory_cgrp_subsys);
|
||||
|
||||
|
@ -5212,6 +5214,7 @@ static struct mem_cgroup *mem_cgroup_alloc(void)
|
|||
INIT_LIST_HEAD(&memcg->event_list);
|
||||
spin_lock_init(&memcg->event_list_lock);
|
||||
memcg->socket_pressure = jiffies;
|
||||
trace_android_rvh_memcgv2_init(memcg);
|
||||
#ifdef CONFIG_MEMCG_KMEM
|
||||
memcg->kmemcg_id = -1;
|
||||
INIT_LIST_HEAD(&memcg->objcg_list);
|
||||
|
@ -6726,6 +6729,8 @@ void mem_cgroup_calculate_protection(struct mem_cgroup *root,
|
|||
if (!parent)
|
||||
return;
|
||||
|
||||
trace_android_rvh_memcgv2_calc_decayed_watermark(memcg);
|
||||
|
||||
if (parent == root) {
|
||||
memcg->memory.emin = READ_ONCE(memcg->memory.min);
|
||||
memcg->memory.elow = READ_ONCE(memcg->memory.low);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/bug.h>
|
||||
#include <asm/page.h>
|
||||
#include <trace/hooks/cgroup.h>
|
||||
|
||||
static void propagate_protected_usage(struct page_counter *c,
|
||||
unsigned long usage)
|
||||
|
@ -83,6 +84,7 @@ void page_counter_charge(struct page_counter *counter, unsigned long nr_pages)
|
|||
*/
|
||||
if (new > READ_ONCE(c->watermark))
|
||||
WRITE_ONCE(c->watermark, new);
|
||||
trace_android_rvh_update_watermark(new, c);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,6 +139,7 @@ bool page_counter_try_charge(struct page_counter *counter,
|
|||
*/
|
||||
if (new > READ_ONCE(c->watermark))
|
||||
WRITE_ONCE(c->watermark, new);
|
||||
trace_android_rvh_update_watermark(new, c);
|
||||
}
|
||||
return true;
|
||||
|
||||
|
|
Loading…
Reference in New Issue