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 <huangjianan@xiaomi.com>
(cherry picked from commit 6e2565c513127c425ddfb84e473dba8161154036)
This commit is contained in:
Jianan Huang
2024-10-15 14:32:06 +08:00
committed by Todd Kjos
parent e63d8c3188
commit f2a18f1865
4 changed files with 11 additions and 0 deletions

View File

@@ -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_binder_preset);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_user); 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_id_remove);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_offline);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_css_online); 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_clear_rwsem_reader_owned);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_writer_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_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_rvh_pr_set_vma_name_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_folio_trylock); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_folio_trylock);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_folio_trylock_result); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_folio_trylock_result);

View File

@@ -221,6 +221,9 @@ DECLARE_HOOK(android_vh_look_around,
DECLARE_HOOK(android_vh_mm_alloc_pages_direct_reclaim_enter, DECLARE_HOOK(android_vh_mm_alloc_pages_direct_reclaim_enter,
TP_PROTO(unsigned int order), TP_PROTO(unsigned int order),
TP_ARGS(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, DECLARE_HOOK(android_vh_should_fault_around,
TP_PROTO(struct vm_fault *vmf, bool *should_around), TP_PROTO(struct vm_fault *vmf, bool *should_around),
TP_ARGS(vmf, 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, DECLARE_HOOK(android_vh_oom_swapmem_gather_finish,
TP_PROTO(struct mm_struct *mm), TP_PROTO(struct mm_struct *mm),
TP_ARGS(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, DECLARE_HOOK(android_vh_do_read_fault,
TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes), TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes),
TP_ARGS(vmf, fault_around_bytes)); TP_ARGS(vmf, fault_around_bytes));

View File

@@ -870,6 +870,7 @@ noinline int __filemap_add_folio(struct address_space *mapping,
VM_BUG_ON_FOLIO(folio_test_swapbacked(folio), folio); VM_BUG_ON_FOLIO(folio_test_swapbacked(folio), folio);
mapping_set_update(&xas, mapping); mapping_set_update(&xas, mapping);
trace_android_vh_filemap_add_folio(mapping, folio, index);
if (!huge) { if (!huge) {
int error = mem_cgroup_charge(folio, NULL, gfp); int error = mem_cgroup_charge(folio, NULL, gfp);
VM_BUG_ON_FOLIO(index & (folio_nr_pages(folio) - 1), folio); VM_BUG_ON_FOLIO(index & (folio_nr_pages(folio) - 1), folio);

View File

@@ -6978,6 +6978,7 @@ int __mem_cgroup_charge(struct folio *folio, struct mm_struct *mm, gfp_t gfp)
int ret; int ret;
memcg = get_mem_cgroup_from_mm(mm); memcg = get_mem_cgroup_from_mm(mm);
trace_android_vh_mem_cgroup_charge(folio, &memcg);
ret = charge_memcg(folio, memcg, gfp); ret = charge_memcg(folio, memcg, gfp);
css_put(&memcg->css); css_put(&memcg->css);