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 <yipengxiang@honor.corp-partner.google.com>
(cherry picked from commit 29fd5366b14faf617b4d99c25d04e7f325226396)
This commit is contained in:
yipeng xiang
2024-09-27 15:53:28 +08:00
committed by Suren Baghdasaryan
parent 51fe955bf6
commit c9bbf5834a
3 changed files with 9 additions and 0 deletions
+1
View File
@@ -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);
+3
View File
@@ -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 <trace/define_trace.h>
+5
View File
@@ -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);