ANDROID: mm: Add vendor hooks for __alloc_pages_slowpath

To monitor the efficiency of memory relciaming in
__alloc_pages_slowpath, add vendor hooks in each
stages of __alloc_pages_slowpath including
__alloc_pages_may_oom and __alloc_pages_direct_reclaim.

android_vh_mm_direct_reclaim_enter()
android_vh_mm_direct_reclaim_exit(unsigned long, int)
android_vh_mm_may_oom_exit(struct oom_control *, unsigned long)

Bug: 301044280
Bug: 330661608
Bug: 411525596
Change-Id: Ic5b5f1c2ad31b16e7339f539fcf54659e9acaba7
Signed-off-by: John Hsu <john.hsu@mediatek.com>
Signed-off-by: Chinwen Chang <chinwen.chang@mediatek.com>
This commit is contained in:
JohnHsu
2023-09-25 16:57:06 +08:00
committed by Treehugger Robot
parent c90ae2df48
commit 370f686ecb
3 changed files with 19 additions and 2 deletions
+3
View File
@@ -498,3 +498,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_writer_owned);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_trylock_failed);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compaction_try_to_compact_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_enter);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_direct_reclaim_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_may_oom_exit);
+10 -1
View File
@@ -434,7 +434,16 @@ DECLARE_HOOK(android_vh_filemap_update_page,
TP_PROTO(struct address_space *mapping, struct folio *folio,
struct file *file),
TP_ARGS(mapping, folio, file));
DECLARE_HOOK(android_vh_mm_direct_reclaim_enter,
TP_PROTO(unsigned int order),
TP_ARGS(order));
DECLARE_HOOK(android_vh_mm_direct_reclaim_exit,
TP_PROTO(unsigned long did_some_progress, int retry_times),
TP_ARGS(did_some_progress, retry_times));
struct oom_control;
DECLARE_HOOK(android_vh_mm_may_oom_exit,
TP_PROTO(struct oom_control *oc, unsigned long did_some_progress),
TP_ARGS(oc, did_some_progress));
#endif /* _TRACE_HOOK_MM_H */
/* This part must be outside protection */
+6 -1
View File
@@ -3925,6 +3925,7 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
if (!mutex_trylock(&oom_lock)) {
*did_some_progress = 1;
schedule_timeout_uninterruptible(1);
trace_android_vh_mm_may_oom_exit(&oc, *did_some_progress);
return NULL;
}
@@ -3987,6 +3988,7 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
}
out:
mutex_unlock(&oom_lock);
trace_android_vh_mm_may_oom_exit(&oc, *did_some_progress);
return page;
}
@@ -4275,11 +4277,13 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order,
unsigned int alloc_flags, const struct alloc_context *ac,
unsigned long *did_some_progress)
{
int retry_times = 0;
struct page *page = NULL;
unsigned long pflags;
bool drained = false;
bool skip_pcp_drain = false;
trace_android_vh_mm_direct_reclaim_enter(order);
psi_memstall_enter(&pflags);
*did_some_progress = __perform_reclaim(gfp_mask, order, ac);
if (unlikely(!(*did_some_progress)))
@@ -4300,11 +4304,12 @@ retry:
if (!skip_pcp_drain)
drain_all_pages(NULL);
drained = true;
++retry_times;
goto retry;
}
out:
psi_memstall_leave(&pflags);
trace_android_vh_mm_direct_reclaim_exit(*did_some_progress, retry_times);
return page;
}