mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ANDROID: vendor_hooks: Add hooks for pcp related optimization.
We want to make some optimizations to the pcp buffer. First, when directly recycling, we skip drain_all_pages when it is known that the pcp buffer is small to reduce zone->lock contention. In addition, the default pcp buffer size is still relatively small for mobile phones with large memory. We want to increase the pcp buffer area to reduce zone->lock contention. Bug: 418695654 Change-Id: I38c7a3715500918d839e4363bbcc41cdbf4bd643 Signed-off-by: Marcus Ma <maminghui5@xiaomi.corp-partner.google.com>
This commit is contained in:
committed by
Treehugger Robot
parent
ad7902a401
commit
58b3f63bc6
@@ -481,3 +481,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_map_pages_range);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vprintk_store);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vprintk_store);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_referenced_check_bypass);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_referenced_check_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_calculate_totalreserve_pages);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_calculate_totalreserve_pages);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_all_pages_bypass);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pageset_update);
|
||||||
|
|||||||
@@ -315,6 +315,14 @@ DECLARE_HOOK(android_vh_filemap_map_pages_range,
|
|||||||
DECLARE_HOOK(android_vh_calculate_totalreserve_pages,
|
DECLARE_HOOK(android_vh_calculate_totalreserve_pages,
|
||||||
TP_PROTO(bool *skip),
|
TP_PROTO(bool *skip),
|
||||||
TP_ARGS(skip));
|
TP_ARGS(skip));
|
||||||
|
DECLARE_HOOK(android_vh_drain_all_pages_bypass,
|
||||||
|
TP_PROTO(gfp_t gfp_mask, unsigned int order, unsigned long alloc_flags,
|
||||||
|
int migratetype, unsigned long did_some_progress,
|
||||||
|
bool *bypass),
|
||||||
|
TP_ARGS(gfp_mask, order, alloc_flags, migratetype, did_some_progress, bypass));
|
||||||
|
DECLARE_HOOK(android_vh_pageset_update,
|
||||||
|
TP_PROTO(unsigned long *high, unsigned long *batch),
|
||||||
|
TP_ARGS(high, batch));
|
||||||
#endif /* _TRACE_HOOK_MM_H */
|
#endif /* _TRACE_HOOK_MM_H */
|
||||||
|
|
||||||
/* This part must be outside protection */
|
/* This part must be outside protection */
|
||||||
|
|||||||
@@ -5026,6 +5026,7 @@ __alloc_pages_direct_reclaim(gfp_t gfp_mask, unsigned int order,
|
|||||||
struct page *page = NULL;
|
struct page *page = NULL;
|
||||||
unsigned long pflags;
|
unsigned long pflags;
|
||||||
bool drained = false;
|
bool drained = false;
|
||||||
|
bool skip_pcp_drain = false;
|
||||||
|
|
||||||
trace_android_vh_mm_alloc_pages_direct_reclaim_enter(order);
|
trace_android_vh_mm_alloc_pages_direct_reclaim_enter(order);
|
||||||
psi_memstall_enter(&pflags);
|
psi_memstall_enter(&pflags);
|
||||||
@@ -5043,7 +5044,10 @@ retry:
|
|||||||
*/
|
*/
|
||||||
if (!page && !drained) {
|
if (!page && !drained) {
|
||||||
unreserve_highatomic_pageblock(ac, false);
|
unreserve_highatomic_pageblock(ac, false);
|
||||||
drain_all_pages(NULL);
|
trace_android_vh_drain_all_pages_bypass(gfp_mask, order,
|
||||||
|
alloc_flags, ac->migratetype, *did_some_progress, &skip_pcp_drain);
|
||||||
|
if (!skip_pcp_drain)
|
||||||
|
drain_all_pages(NULL);
|
||||||
drained = true;
|
drained = true;
|
||||||
++retry_times;
|
++retry_times;
|
||||||
goto retry;
|
goto retry;
|
||||||
@@ -7475,6 +7479,7 @@ static int zone_highsize(struct zone *zone, int batch, int cpu_online)
|
|||||||
static void pageset_update(struct per_cpu_pages *pcp, unsigned long high,
|
static void pageset_update(struct per_cpu_pages *pcp, unsigned long high,
|
||||||
unsigned long batch)
|
unsigned long batch)
|
||||||
{
|
{
|
||||||
|
trace_android_vh_pageset_update(&high, &batch);
|
||||||
WRITE_ONCE(pcp->batch, batch);
|
WRITE_ONCE(pcp->batch, batch);
|
||||||
WRITE_ONCE(pcp->high, high);
|
WRITE_ONCE(pcp->high, high);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user