ANDROID: vendor_hooks: Add hooks for shrink_active_list
Provide a vendor hook to allow page_referenced to be skipped during shrink_active_list to avoid heavy cpuloading caused by it. Bug: 220878851 Signed-off-by: Liujie Xie <xieliujie@oppo.com> Change-Id: Ie0e369f8f8739fea59a95470af20ab0e976869d1
This commit is contained in:

committed by
Suren Baghdasaryan

parent
62412e5b8c
commit
f2d0c30576
@@ -291,6 +291,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf_pr_cont);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_slab_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_slab_bypass);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
||||||
|
@@ -25,6 +25,10 @@ DECLARE_HOOK(android_vh_tune_inactive_ratio,
|
|||||||
DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim,
|
DECLARE_RESTRICTED_HOOK(android_rvh_set_balance_anon_file_reclaim,
|
||||||
TP_PROTO(bool *balance_anon_file_reclaim),
|
TP_PROTO(bool *balance_anon_file_reclaim),
|
||||||
TP_ARGS(balance_anon_file_reclaim), 1);
|
TP_ARGS(balance_anon_file_reclaim), 1);
|
||||||
|
DECLARE_HOOK(android_vh_page_referenced_check_bypass,
|
||||||
|
TP_PROTO(struct page *page, unsigned long nr_to_scan, int lru, bool *bypass),
|
||||||
|
TP_ARGS(page, nr_to_scan, lru, bypass));
|
||||||
|
|
||||||
#endif /* _TRACE_HOOK_VMSCAN_H */
|
#endif /* _TRACE_HOOK_VMSCAN_H */
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
#include <trace/define_trace.h>
|
#include <trace/define_trace.h>
|
||||||
|
@@ -2083,6 +2083,7 @@ static void shrink_active_list(unsigned long nr_to_scan,
|
|||||||
unsigned nr_rotated = 0;
|
unsigned nr_rotated = 0;
|
||||||
int file = is_file_lru(lru);
|
int file = is_file_lru(lru);
|
||||||
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
|
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
|
||||||
|
bool bypass = false;
|
||||||
|
|
||||||
lru_add_drain();
|
lru_add_drain();
|
||||||
|
|
||||||
@@ -2117,6 +2118,10 @@ static void shrink_active_list(unsigned long nr_to_scan,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_android_vh_page_referenced_check_bypass(page, nr_to_scan, lru, &bypass);
|
||||||
|
if (bypass)
|
||||||
|
goto skip_page_referenced;
|
||||||
|
|
||||||
if (page_referenced(page, 0, sc->target_mem_cgroup,
|
if (page_referenced(page, 0, sc->target_mem_cgroup,
|
||||||
&vm_flags)) {
|
&vm_flags)) {
|
||||||
/*
|
/*
|
||||||
@@ -2134,7 +2139,7 @@ static void shrink_active_list(unsigned long nr_to_scan,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
skip_page_referenced:
|
||||||
ClearPageActive(page); /* we are de-activating */
|
ClearPageActive(page); /* we are de-activating */
|
||||||
SetPageWorkingset(page);
|
SetPageWorkingset(page);
|
||||||
list_add(&page->lru, &l_inactive);
|
list_add(&page->lru, &l_inactive);
|
||||||
|
Reference in New Issue
Block a user