From 89fed37332fd48e0cd13b256cd85d6929d5da319 Mon Sep 17 00:00:00 2001 From: Minchan Kim Date: Wed, 2 Nov 2022 09:04:41 -0700 Subject: [PATCH] ANDROID: vendor hook to control blk_plug for shrink_lruvec Add vendor hook to contorl blk plugging for shrink_lruvec. Bug: 255471591 Bug: 238728493 Change-Id: Iba2603ff2e1b62cf2ee8fd6969d8ccd71416a288 Signed-off-by: Minchan Kim --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/vmscan.c | 8 ++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index bfd9a74a0f61..bbcd6637148b 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -285,6 +285,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_include_reserved_zone); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_slowpath); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_madvise_blk_plug); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_inactive_list_blk_plug); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_lruvec_blk_plug); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_reclaim_pages_plug); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_zap_pte_range_tlb_force_flush); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 785ec3da0aa4..d9be2be468de 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -106,6 +106,9 @@ DECLARE_HOOK(android_vh_do_madvise_blk_plug, DECLARE_HOOK(android_vh_shrink_inactive_list_blk_plug, TP_PROTO(bool *do_plug), TP_ARGS(do_plug)); +DECLARE_HOOK(android_vh_shrink_lruvec_blk_plug, + TP_PROTO(bool *do_plug), + TP_ARGS(do_plug)); DECLARE_HOOK(android_vh_reclaim_pages_plug, TP_PROTO(bool *do_plug), TP_ARGS(do_plug)); diff --git a/mm/vmscan.c b/mm/vmscan.c index f4a22e18951d..02d2172afe89 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5275,6 +5275,7 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) unsigned long nr_reclaimed = 0; unsigned long nr_to_reclaim = sc->nr_to_reclaim; struct blk_plug plug; + bool do_plug = true; bool scan_adjusted; if (lru_gen_enabled()) { @@ -5301,7 +5302,9 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) scan_adjusted = (!cgroup_reclaim(sc) && !current_is_kswapd() && sc->priority == DEF_PRIORITY); - blk_start_plug(&plug); + trace_android_vh_shrink_lruvec_blk_plug(&do_plug); + if (do_plug) + blk_start_plug(&plug); while (nr[LRU_INACTIVE_ANON] || nr[LRU_ACTIVE_FILE] || nr[LRU_INACTIVE_FILE]) { unsigned long nr_anon, nr_file, percentage; @@ -5373,7 +5376,8 @@ static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) scan_adjusted = true; } - blk_finish_plug(&plug); + if (do_plug) + blk_finish_plug(&plug); sc->nr_reclaimed += nr_reclaimed; /*