ANDROID: vendor hooks: Add hooks to abort scan memcgs

The more memcg groups there are, the longer a single traversal takes,
resulting in poor consistency in memory recycling time.
It is possible to interrupt memcg traversal recycling to speed up
memory application for some important processes.

Bug: 402041892

Change-Id: I8b9a0cce754cb07babe0ce234fbf262b20f9d020
Signed-off-by: Qianfeng Rong <rongqianfeng@vivo.corp-partner.google.com>
This commit is contained in:
Qianfeng Rong
2025-03-12 17:10:57 +08:00
committed by Carlos Llamas
parent c28a1fd1f3
commit 081bb422e2
3 changed files with 16 additions and 1 deletions
+1
View File
@@ -238,6 +238,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_check_panic);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_smallest_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_one_page_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_migration_target_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_alloc_flags);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wait_for_work);
+7
View File
@@ -9,6 +9,8 @@
#include <trace/hooks/vendor_hooks.h>
struct mem_cgroup_reclaim_cookie;
DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim,
TP_PROTO(bool *balance_anon_file_reclaim),
TP_ARGS(balance_anon_file_reclaim), 1);
@@ -34,6 +36,11 @@ 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_shrink_node_memcgs_bypass,
TP_PROTO(u64 *ext, struct mem_cgroup_reclaim_cookie *partial,
unsigned long nr_to_reclaim, unsigned long nr_reclaimed,
gfp_t gfp_mask, int order, bool *bypass),
TP_ARGS(ext, partial, nr_to_reclaim, nr_reclaimed, gfp_mask, order, bypass));
DECLARE_HOOK(android_vh_should_memcg_bypass,
TP_PROTO(struct mem_cgroup *memcg, int priority, bool *bypass),
TP_ARGS(memcg, priority, bypass));
+8 -1
View File
@@ -5969,6 +5969,7 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc)
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
unsigned long reclaimed;
unsigned long scanned;
bool bypass = false;
/*
* This loop can become CPU-bound when target memcgs
@@ -6014,8 +6015,14 @@ static void shrink_node_memcgs(pg_data_t *pgdat, struct scan_control *sc)
sc->nr_scanned - scanned,
sc->nr_reclaimed - reclaimed);
#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA
trace_android_vh_shrink_node_memcgs_bypass(&sc->android_vendor_data1,
partial, sc->nr_to_reclaim, sc->nr_reclaimed,
sc->gfp_mask, sc->order, &bypass);
#endif
/* If partial walks are allowed, bail once goal is reached */
if (partial && sc->nr_reclaimed >= sc->nr_to_reclaim) {
if (bypass || (partial && sc->nr_reclaimed >= sc->nr_to_reclaim)) {
mem_cgroup_iter_break(target_memcg, memcg);
break;
}