From c9bbf5834a77bfd1089db26a1f581b8de26f2236 Mon Sep 17 00:00:00 2001 From: yipeng xiang Date: Fri, 27 Sep 2024 15:53:28 +0800 Subject: [PATCH] ANDROID: mm: add vendor hook to skip memcg reclaim by priority Add vendor hook to determine whether a memcg should be recalimed. Avoid import memcg file pages are frequently reclaimed. Bug: 369921205 Change-Id: Iac4abcf3a59a9c26ef9895a8f0d35aa6b6c26776 Signed-off-by: yipeng xiang (cherry picked from commit 29fd5366b14faf617b4d99c25d04e7f325226396) --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/vmscan.h | 3 +++ mm/vmscan.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index fee13d96af01..28c0ed60c6b2 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -202,6 +202,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp_unicast_rcv_skb); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_udp6_unicast_rcv_skb); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_fast_path); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tcp_rcv_established_slow_path); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_memcg_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_capacity_show); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 587eec18932d..1bc2f245f850 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -25,6 +25,9 @@ DECLARE_HOOK(android_vh_mglru_should_abort_scan, TP_PROTO(unsigned long nr_reclaimed, unsigned long nr_to_reclaim, unsigned int order, bool *bypass), TP_ARGS(nr_to_reclaim, nr_reclaimed, order, bypass)); +DECLARE_HOOK(android_vh_should_memcg_bypass, + TP_PROTO(struct mem_cgroup *memcg, int priority, bool *bypass), + TP_ARGS(memcg, priority, bypass)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/mm/vmscan.c b/mm/vmscan.c index bf01c8994511..48a900f01ed9 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4877,6 +4877,7 @@ static void shrink_many(struct pglist_data *pgdat, struct scan_control *sc) struct lru_gen_folio *lrugen; struct mem_cgroup *memcg; struct hlist_nulls_node *pos; + bool bypass = false; gen = get_memcg_gen(READ_ONCE(pgdat->memcg_lru.seq)); bin = first_bin = get_random_u32_below(MEMCG_NR_BINS); @@ -4907,6 +4908,10 @@ restart: continue; } + trace_android_vh_should_memcg_bypass(memcg, sc->priority, &bypass); + if (bypass) + continue; + rcu_read_unlock(); op = shrink_one(lruvec, sc);