mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ANDROID: mm: vh for compaction begin/end
Add vendor hook for compaction begin/end. The first use would be
to measure compaction durations.
Bug: 229927848
Test: echo 1 > /proc/sys/vm/compact_memory and observe output change in
/sys/kernel/pixel_stat/mm/compaction/mm_compaction_duration
Signed-off-by: Robin Hsu <robinhsu@google.com>
Change-Id: I3d95434bf49b37199056dc9ddfc36a59a7de17b7
Signed-off-by: Richard Chang <richardycc@google.com>
(cherry picked from commit 13b6bd38bb)
Signed-off-by: liangjlee <liangjlee@google.com>
This commit is contained in:
committed by
Treehugger Robot
parent
2176509c4d
commit
e3e2ece8a0
@@ -341,3 +341,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_enter);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_exit);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_direct_reclaim_exit);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_may_oom_exit);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_may_oom_exit);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_begin);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_end);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
struct shmem_inode_info;
|
struct shmem_inode_info;
|
||||||
struct folio;
|
struct folio;
|
||||||
struct page_vma_mapped_walk;
|
struct page_vma_mapped_walk;
|
||||||
|
struct compact_control;
|
||||||
|
|
||||||
DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio,
|
DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio,
|
||||||
TP_PROTO(struct shmem_inode_info *info, struct folio **folio),
|
TP_PROTO(struct shmem_inode_info *info, struct folio **folio),
|
||||||
@@ -106,6 +107,12 @@ DECLARE_HOOK(android_vh_madvise_cold_pageout_skip,
|
|||||||
TP_PROTO(struct vm_area_struct *vma, struct page *page, bool pageout, bool *need_skip),
|
TP_PROTO(struct vm_area_struct *vma, struct page *page, bool pageout, bool *need_skip),
|
||||||
TP_ARGS(vma, page, pageout, need_skip));
|
TP_ARGS(vma, page, pageout, need_skip));
|
||||||
|
|
||||||
|
DECLARE_HOOK(android_vh_mm_compaction_begin,
|
||||||
|
TP_PROTO(struct compact_control *cc, long *vendor_ret),
|
||||||
|
TP_ARGS(cc, vendor_ret));
|
||||||
|
DECLARE_HOOK(android_vh_mm_compaction_end,
|
||||||
|
TP_PROTO(struct compact_control *cc, long vendor_ret),
|
||||||
|
TP_ARGS(cc, vendor_ret));
|
||||||
struct mem_cgroup;
|
struct mem_cgroup;
|
||||||
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
|
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
|
||||||
TP_PROTO(struct mem_cgroup *memcg),
|
TP_PROTO(struct mem_cgroup *memcg),
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ static inline void count_compact_events(enum vm_event_item item, long delta)
|
|||||||
#include <trace/events/compaction.h>
|
#include <trace/events/compaction.h>
|
||||||
#undef CREATE_TRACE_POINTS
|
#undef CREATE_TRACE_POINTS
|
||||||
#include <trace/hooks/compaction.h>
|
#include <trace/hooks/compaction.h>
|
||||||
|
#include <trace/hooks/mm.h>
|
||||||
|
|
||||||
#define block_start_pfn(pfn, order) round_down(pfn, 1UL << (order))
|
#define block_start_pfn(pfn, order) round_down(pfn, 1UL << (order))
|
||||||
#define block_end_pfn(pfn, order) ALIGN((pfn) + 1, 1UL << (order))
|
#define block_end_pfn(pfn, order) ALIGN((pfn) + 1, 1UL << (order))
|
||||||
@@ -2323,6 +2324,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
|
|||||||
const bool sync = cc->mode != MIGRATE_ASYNC;
|
const bool sync = cc->mode != MIGRATE_ASYNC;
|
||||||
bool update_cached;
|
bool update_cached;
|
||||||
unsigned int nr_succeeded = 0;
|
unsigned int nr_succeeded = 0;
|
||||||
|
long vendor_ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These counters track activities during zone compaction. Initialize
|
* These counters track activities during zone compaction. Initialize
|
||||||
@@ -2393,6 +2395,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
|
|||||||
cc->zone->compact_cached_migrate_pfn[0] == cc->zone->compact_cached_migrate_pfn[1];
|
cc->zone->compact_cached_migrate_pfn[0] == cc->zone->compact_cached_migrate_pfn[1];
|
||||||
|
|
||||||
trace_mm_compaction_begin(cc, start_pfn, end_pfn, sync);
|
trace_mm_compaction_begin(cc, start_pfn, end_pfn, sync);
|
||||||
|
trace_android_vh_mm_compaction_begin(cc, &vendor_ret);
|
||||||
|
|
||||||
/* lru_add_drain_all could be expensive with involving other CPUs */
|
/* lru_add_drain_all could be expensive with involving other CPUs */
|
||||||
lru_add_drain();
|
lru_add_drain();
|
||||||
@@ -2518,6 +2521,7 @@ out:
|
|||||||
count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned);
|
count_compact_events(COMPACTMIGRATE_SCANNED, cc->total_migrate_scanned);
|
||||||
count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned);
|
count_compact_events(COMPACTFREE_SCANNED, cc->total_free_scanned);
|
||||||
|
|
||||||
|
trace_android_vh_mm_compaction_end(cc, vendor_ret);
|
||||||
trace_mm_compaction_end(cc, start_pfn, end_pfn, sync, ret);
|
trace_mm_compaction_end(cc, start_pfn, end_pfn, sync, ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user