xref: /aosp_15_r20/external/perfetto/tools/mm_events (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/system/bin/sh
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project
4*6dbdd20aSAndroid Build Coastguard Worker#
5*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*6dbdd20aSAndroid Build Coastguard Worker#
9*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*6dbdd20aSAndroid Build Coastguard Worker#
11*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Worker# Periodically arms a perfetto trace config for mm_events
19*6dbdd20aSAndroid Build Coastguard Worker# The config is triggered by the mm_events kmem_activity trigger
20*6dbdd20aSAndroid Build Coastguard Worker# This script gets executed as a oneshot service from perfetto.rc
21*6dbdd20aSAndroid Build Coastguard Worker# when persist.mm_events.enabled is set to true.
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard WorkerDEFAULT_TRACE_CONFIG=<<EOF
24*6dbdd20aSAndroid Build Coastguard Workerunique_session_name: "perfetto_mm_events_session"
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard Workerbugreport_score: 100
27*6dbdd20aSAndroid Build Coastguard Worker
28*6dbdd20aSAndroid Build Coastguard Workerbuffers: {
29*6dbdd20aSAndroid Build Coastguard Worker  size_kb: 512
30*6dbdd20aSAndroid Build Coastguard Worker  fill_policy: DISCARD
31*6dbdd20aSAndroid Build Coastguard Worker}
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard Workerdata_sources: {
34*6dbdd20aSAndroid Build Coastguard Worker  config {
35*6dbdd20aSAndroid Build Coastguard Worker    name: "linux.sys_stats"
36*6dbdd20aSAndroid Build Coastguard Worker    sys_stats_config {
37*6dbdd20aSAndroid Build Coastguard Worker      vmstat_period_ms: 500
38*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_FREE_PAGES
39*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_SLAB_RECLAIMABLE
40*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_SLAB_UNRECLAIMABLE
41*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_ACTIVE_FILE
42*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_INACTIVE_FILE
43*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_ACTIVE_ANON
44*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_INACTIVE_ANON
45*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_WORKINGSET_REFAULT
46*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_WORKINGSET_ACTIVATE
47*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_NR_FILE_PAGES
48*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGPGIN
49*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGPGOUT
50*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PSWPIN
51*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PSWPOUT
52*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_DMA
53*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_NORMAL
54*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_MOVABLE
55*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_DIRECT_DMA
56*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_DIRECT_NORMAL
57*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSTEAL_DIRECT_MOVABLE
58*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_KSWAPD_DMA
59*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_KSWAPD_NORMAL
60*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_KSWAPD_MOVABLE
61*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_DIRECT_DMA
62*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_DIRECT_NORMAL
63*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_PGSCAN_DIRECT_MOVABLE
64*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_COMPACT_MIGRATE_SCANNED
65*6dbdd20aSAndroid Build Coastguard Worker      vmstat_counters: VMSTAT_COMPACT_FREE_SCANNED
66*6dbdd20aSAndroid Build Coastguard Worker    }
67*6dbdd20aSAndroid Build Coastguard Worker  }
68*6dbdd20aSAndroid Build Coastguard Worker}
69*6dbdd20aSAndroid Build Coastguard Worker
70*6dbdd20aSAndroid Build Coastguard Workerdata_sources: {
71*6dbdd20aSAndroid Build Coastguard Worker  config {
72*6dbdd20aSAndroid Build Coastguard Worker    name: "linux.ftrace"
73*6dbdd20aSAndroid Build Coastguard Worker    ftrace_config {
74*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "vmscan/mm_vmscan_kswapd_wake"
75*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "vmscan/mm_vmscan_kswapd_sleep"
76*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "vmscan/mm_vmscan_direct_reclaim_begin"
77*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "vmscan/mm_vmscan_direct_reclaim_end"
78*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "compaction/mm_compaction_begin"
79*6dbdd20aSAndroid Build Coastguard Worker      ftrace_events: "compaction/mm_compaction_end"
80*6dbdd20aSAndroid Build Coastguard Worker    }
81*6dbdd20aSAndroid Build Coastguard Worker  }
82*6dbdd20aSAndroid Build Coastguard Worker}
83*6dbdd20aSAndroid Build Coastguard Worker
84*6dbdd20aSAndroid Build Coastguard Workertrigger_config {
85*6dbdd20aSAndroid Build Coastguard Worker  trigger_mode: START_TRACING
86*6dbdd20aSAndroid Build Coastguard Worker  trigger_timeout_ms: 3600000
87*6dbdd20aSAndroid Build Coastguard Worker  triggers {
88*6dbdd20aSAndroid Build Coastguard Worker    name: "kmem_activity"
89*6dbdd20aSAndroid Build Coastguard Worker    stop_delay_ms: 360000
90*6dbdd20aSAndroid Build Coastguard Worker  }
91*6dbdd20aSAndroid Build Coastguard Worker}
92*6dbdd20aSAndroid Build Coastguard WorkerEOF
93*6dbdd20aSAndroid Build Coastguard Worker
94*6dbdd20aSAndroid Build Coastguard WorkerVENDOR_TRACE_CONFIG="/vendor/etc/mm_events.cfg"
95*6dbdd20aSAndroid Build Coastguard Worker
96*6dbdd20aSAndroid Build Coastguard WorkerBASE_SLEEP=30
97*6dbdd20aSAndroid Build Coastguard WorkerSLEEP=$BASE_SLEEP
98*6dbdd20aSAndroid Build Coastguard WorkerBACKOFF_MULTIPLIER=2
99*6dbdd20aSAndroid Build Coastguard WorkerCONSECUTIVE_FAILURES=0
100*6dbdd20aSAndroid Build Coastguard WorkerFAILURES_THRESHOLD=10
101*6dbdd20aSAndroid Build Coastguard Worker
102*6dbdd20aSAndroid Build Coastguard Worker# Keep the mm events perfetto trace config armed
103*6dbdd20aSAndroid Build Coastguard Workerwhile :
104*6dbdd20aSAndroid Build Coastguard Workerdo
105*6dbdd20aSAndroid Build Coastguard Worker    sleep $SLEEP
106*6dbdd20aSAndroid Build Coastguard Worker
107*6dbdd20aSAndroid Build Coastguard Worker    # If an alternate vendor trace config exists use that instead of the default.
108*6dbdd20aSAndroid Build Coastguard Worker    if [ -f "$VENDOR_TRACE_CONFIG" ]; then
109*6dbdd20aSAndroid Build Coastguard Worker        /system/bin/perfetto -c "$VENDOR_TRACE_CONFIG" --txt -o /dev/null
110*6dbdd20aSAndroid Build Coastguard Worker        EXIT_CODE=$?
111*6dbdd20aSAndroid Build Coastguard Worker    else
112*6dbdd20aSAndroid Build Coastguard Worker        echo "$DEFAULT_TRACE_CONFIG" | /system/bin/perfetto -c - --txt -o /dev/null
113*6dbdd20aSAndroid Build Coastguard Worker        EXIT_CODE=$?
114*6dbdd20aSAndroid Build Coastguard Worker    fi
115*6dbdd20aSAndroid Build Coastguard Worker
116*6dbdd20aSAndroid Build Coastguard Worker    if [[ $EXIT_CODE -ne 0 ]]; then
117*6dbdd20aSAndroid Build Coastguard Worker        SLEEP=$(($SLEEP * $BACKOFF_MULTIPLIER))
118*6dbdd20aSAndroid Build Coastguard Worker
119*6dbdd20aSAndroid Build Coastguard Worker        CONSECUTIVE_FAILURES=$(($CONSECUTIVE_FAILURES + 1))
120*6dbdd20aSAndroid Build Coastguard Worker        if [ $CONSECUTIVE_FAILURES -ge $FAILURES_THRESHOLD ]; then
121*6dbdd20aSAndroid Build Coastguard Worker            exit 1
122*6dbdd20aSAndroid Build Coastguard Worker        fi
123*6dbdd20aSAndroid Build Coastguard Worker    else
124*6dbdd20aSAndroid Build Coastguard Worker        SLEEP=$BASE_SLEEP
125*6dbdd20aSAndroid Build Coastguard Worker        CONSECUTIVE_FAILURES=0
126*6dbdd20aSAndroid Build Coastguard Worker    fi
127*6dbdd20aSAndroid Build Coastguard Workerdone
128