mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 02:21:52 +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_folio_referenced_check_bypass);
|
||||
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,
|
||||
TP_PROTO(bool *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 */
|
||||
|
||||
/* 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;
|
||||
unsigned long pflags;
|
||||
bool drained = false;
|
||||
bool skip_pcp_drain = false;
|
||||
|
||||
trace_android_vh_mm_alloc_pages_direct_reclaim_enter(order);
|
||||
psi_memstall_enter(&pflags);
|
||||
@@ -5043,7 +5044,10 @@ retry:
|
||||
*/
|
||||
if (!page && !drained) {
|
||||
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;
|
||||
++retry_times;
|
||||
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,
|
||||
unsigned long batch)
|
||||
{
|
||||
trace_android_vh_pageset_update(&high, &batch);
|
||||
WRITE_ONCE(pcp->batch, batch);
|
||||
WRITE_ONCE(pcp->high, high);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user