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:
committed by
Carlos Llamas
parent
c28a1fd1f3
commit
081bb422e2
@@ -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);
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user