From f2a18f1865797cb396ba90f89ddb3df8065b29e2 Mon Sep 17 00:00:00 2001 From: Jianan Huang Date: Tue, 15 Oct 2024 14:32:06 +0800 Subject: [PATCH] ANDROID: mm: add vendor hook to add folio to specific memcg Add vendor hook when folio charges memcg. This is to manage some specific folios in separate memcg for more accurate memory reclamation. Bug: 373540729 Change-Id: I11b1fca279ea9e9e8be1f789bdf1f9d7c1bf001f Signed-off-by: Jianan Huang (cherry picked from commit 6e2565c513127c425ddfb84e473dba8161154036) --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/mm.h | 7 +++++++ mm/filemap.c | 1 + mm/memcontrol.c | 1 + 4 files changed, 11 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index c73fb1679f93..bb305ea7fa30 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -297,6 +297,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_read_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_preset); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_charge); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_id_remove); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_online); @@ -451,6 +452,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_reader_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_writer_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_writer_owned); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_add_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pr_set_vma_name_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_folio_trylock); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_folio_trylock_result); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 013b85d2c9a7..5696142eb51a 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -221,6 +221,9 @@ DECLARE_HOOK(android_vh_look_around, DECLARE_HOOK(android_vh_mm_alloc_pages_direct_reclaim_enter, TP_PROTO(unsigned int order), TP_ARGS(order)); +DECLARE_HOOK(android_vh_mem_cgroup_charge, + TP_PROTO(struct folio *folio, struct mem_cgroup **memcg), + TP_ARGS(folio, memcg)); DECLARE_HOOK(android_vh_should_fault_around, TP_PROTO(struct vm_fault *vmf, bool *should_around), TP_ARGS(vmf, should_around)); @@ -282,6 +285,10 @@ DECLARE_HOOK(android_vh_oom_swapmem_gather_init, DECLARE_HOOK(android_vh_oom_swapmem_gather_finish, TP_PROTO(struct mm_struct *mm), TP_ARGS(mm)); +DECLARE_HOOK(android_vh_filemap_add_folio, + TP_PROTO(struct address_space *mapping, struct folio *folio, + pgoff_t index), + TP_ARGS(mapping, folio, index)); DECLARE_HOOK(android_vh_do_read_fault, TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes), TP_ARGS(vmf, fault_around_bytes)); diff --git a/mm/filemap.c b/mm/filemap.c index 2c7ee688aa20..5a04eee34ba8 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -870,6 +870,7 @@ noinline int __filemap_add_folio(struct address_space *mapping, VM_BUG_ON_FOLIO(folio_test_swapbacked(folio), folio); mapping_set_update(&xas, mapping); + trace_android_vh_filemap_add_folio(mapping, folio, index); if (!huge) { int error = mem_cgroup_charge(folio, NULL, gfp); VM_BUG_ON_FOLIO(index & (folio_nr_pages(folio) - 1), folio); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 904ba1e381b8..ee5e370de64f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6978,6 +6978,7 @@ int __mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp) int ret; memcg = get_mem_cgroup_from_mm(mm); + trace_android_vh_mem_cgroup_charge(folio, &memcg); ret = charge_memcg(folio, memcg, gfp); css_put(&memcg->css);