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