ANDROID: psi: Add vendor hooks for PSI tracing
Add hooks to capture various per-zone memory stats when a trigger threshold is hit. Bug: 178721511 Change-Id: Ibe39263ddb05ffc3fa63b5225497a90c6480c8d7 Signed-off-by: Georgi Djakov <quic_c_gdjako@quicinc.com>
This commit is contained in:
@@ -52,6 +52,7 @@
|
|||||||
#include <trace/hooks/signal.h>
|
#include <trace/hooks/signal.h>
|
||||||
#include <trace/hooks/logbuf.h>
|
#include <trace/hooks/logbuf.h>
|
||||||
#include <trace/hooks/vmscan.h>
|
#include <trace/hooks/vmscan.h>
|
||||||
|
#include <trace/hooks/psi.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
||||||
@@ -243,3 +244,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpm_adj_current_limit);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
||||||
|
29
include/trace/hooks/psi.h
Normal file
29
include/trace/hooks/psi.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
#undef TRACE_SYSTEM
|
||||||
|
#define TRACE_SYSTEM psi
|
||||||
|
|
||||||
|
#define TRACE_INCLUDE_PATH trace/hooks
|
||||||
|
|
||||||
|
#if !defined(_TRACE_HOOK_PSI_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||||
|
#define _TRACE_HOOK_PSI_H
|
||||||
|
|
||||||
|
#include <linux/psi_types.h>
|
||||||
|
#include <linux/tracepoint.h>
|
||||||
|
#include <trace/hooks/vendor_hooks.h>
|
||||||
|
|
||||||
|
#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
|
||||||
|
|
||||||
|
DECLARE_HOOK(android_vh_psi_event,
|
||||||
|
TP_PROTO(struct psi_trigger *t),
|
||||||
|
TP_ARGS(t));
|
||||||
|
|
||||||
|
DECLARE_HOOK(android_vh_psi_group,
|
||||||
|
TP_PROTO(struct psi_group *group),
|
||||||
|
TP_ARGS(group));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _TRACE_HOOK_PSI_H */
|
||||||
|
|
||||||
|
/* This part must be outside protection */
|
||||||
|
#include <trace/define_trace.h>
|
@@ -142,6 +142,8 @@
|
|||||||
#include <linux/psi.h>
|
#include <linux/psi.h>
|
||||||
#include "sched.h"
|
#include "sched.h"
|
||||||
|
|
||||||
|
#include <trace/hooks/psi.h>
|
||||||
|
|
||||||
static int psi_bug __read_mostly;
|
static int psi_bug __read_mostly;
|
||||||
|
|
||||||
DEFINE_STATIC_KEY_FALSE(psi_disabled);
|
DEFINE_STATIC_KEY_FALSE(psi_disabled);
|
||||||
@@ -533,12 +535,16 @@ static u64 update_triggers(struct psi_group *group, u64 now)
|
|||||||
if (now < t->last_event_time + t->win.size)
|
if (now < t->last_event_time + t->win.size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
trace_android_vh_psi_event(t);
|
||||||
|
|
||||||
/* Generate an event */
|
/* Generate an event */
|
||||||
if (cmpxchg(&t->event, 0, 1) == 0)
|
if (cmpxchg(&t->event, 0, 1) == 0)
|
||||||
wake_up_interruptible(&t->event_wait);
|
wake_up_interruptible(&t->event_wait);
|
||||||
t->last_event_time = now;
|
t->last_event_time = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_android_vh_psi_group(group);
|
||||||
|
|
||||||
if (new_stall)
|
if (new_stall)
|
||||||
memcpy(group->polling_total, total,
|
memcpy(group->polling_total, total,
|
||||||
sizeof(group->polling_total));
|
sizeof(group->polling_total));
|
||||||
|
Reference in New Issue
Block a user