You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.8 KiB
128 lines
3.8 KiB
#!/system/bin/sh
|
|
|
|
# Copyright (C) 2021 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
|
|
# Periodically arms a perfetto trace config for mm_events
|
|
# The config is triggered by the mm_events kmem_activity trigger
|
|
# This script gets executed as a oneshot service from perfetto.rc
|
|
# when persist.mm_events.enabled is set to true.
|
|
|
|
DEFAULT_TRACE_CONFIG=<<EOF
|
|
unique_session_name: "perfetto_mm_events_session"
|
|
|
|
bugreport_score: 100
|
|
|
|
buffers: {
|
|
size_kb: 512
|
|
fill_policy: DISCARD
|
|
}
|
|
|
|
data_sources: {
|
|
config {
|
|
name: "linux.sys_stats"
|
|
sys_stats_config {
|
|
vmstat_period_ms: 500
|
|
vmstat_counters: VMSTAT_NR_FREE_PAGES
|
|
vmstat_counters: VMSTAT_NR_SLAB_RECLAIMABLE
|
|
vmstat_counters: VMSTAT_NR_SLAB_UNRECLAIMABLE
|
|
vmstat_counters: VMSTAT_NR_ACTIVE_FILE
|
|
vmstat_counters: VMSTAT_NR_INACTIVE_FILE
|
|
vmstat_counters: VMSTAT_NR_ACTIVE_ANON
|
|
vmstat_counters: VMSTAT_NR_INACTIVE_ANON
|
|
vmstat_counters: VMSTAT_WORKINGSET_REFAULT
|
|
vmstat_counters: VMSTAT_WORKINGSET_ACTIVATE
|
|
vmstat_counters: VMSTAT_NR_FILE_PAGES
|
|
vmstat_counters: VMSTAT_PGPGIN
|
|
vmstat_counters: VMSTAT_PGPGOUT
|
|
vmstat_counters: VMSTAT_PSWPIN
|
|
vmstat_counters: VMSTAT_PSWPOUT
|
|
vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_DMA
|
|
vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_NORMAL
|
|
vmstat_counters: VMSTAT_PGSTEAL_KSWAPD_MOVABLE
|
|
vmstat_counters: VMSTAT_PGSTEAL_DIRECT_DMA
|
|
vmstat_counters: VMSTAT_PGSTEAL_DIRECT_NORMAL
|
|
vmstat_counters: VMSTAT_PGSTEAL_DIRECT_MOVABLE
|
|
vmstat_counters: VMSTAT_PGSCAN_KSWAPD_DMA
|
|
vmstat_counters: VMSTAT_PGSCAN_KSWAPD_NORMAL
|
|
vmstat_counters: VMSTAT_PGSCAN_KSWAPD_MOVABLE
|
|
vmstat_counters: VMSTAT_PGSCAN_DIRECT_DMA
|
|
vmstat_counters: VMSTAT_PGSCAN_DIRECT_NORMAL
|
|
vmstat_counters: VMSTAT_PGSCAN_DIRECT_MOVABLE
|
|
vmstat_counters: VMSTAT_COMPACT_MIGRATE_SCANNED
|
|
vmstat_counters: VMSTAT_COMPACT_FREE_SCANNED
|
|
}
|
|
}
|
|
}
|
|
|
|
data_sources: {
|
|
config {
|
|
name: "linux.ftrace"
|
|
ftrace_config {
|
|
ftrace_events: "vmscan/mm_vmscan_kswapd_wake"
|
|
ftrace_events: "vmscan/mm_vmscan_kswapd_sleep"
|
|
ftrace_events: "vmscan/mm_vmscan_direct_reclaim_begin"
|
|
ftrace_events: "vmscan/mm_vmscan_direct_reclaim_end"
|
|
ftrace_events: "compaction/mm_compaction_begin"
|
|
ftrace_events: "compaction/mm_compaction_end"
|
|
}
|
|
}
|
|
}
|
|
|
|
trigger_config {
|
|
trigger_mode: START_TRACING
|
|
trigger_timeout_ms: 3600000
|
|
triggers {
|
|
name: "kmem_activity"
|
|
stop_delay_ms: 360000
|
|
}
|
|
}
|
|
EOF
|
|
|
|
VENDOR_TRACE_CONFIG="/vendor/etc/mm_events.cfg"
|
|
|
|
BASE_SLEEP=30
|
|
SLEEP=$BASE_SLEEP
|
|
BACKOFF_MULTIPLIER=2
|
|
CONSECUTIVE_FAILURES=0
|
|
FAILURES_THRESHOLD=10
|
|
|
|
# Keep the mm events perfetto trace config armed
|
|
while :
|
|
do
|
|
sleep $SLEEP
|
|
|
|
# If an alternate vendor trace config exists use that instead of the default.
|
|
if [ -f "$VENDOR_TRACE_CONFIG" ]; then
|
|
/system/bin/perfetto -c "$VENDOR_TRACE_CONFIG" --txt -o /dev/null
|
|
EXIT_CODE=$?
|
|
else
|
|
echo "$DEFAULT_TRACE_CONFIG" | /system/bin/perfetto -c - --txt -o /dev/null
|
|
EXIT_CODE=$?
|
|
fi
|
|
|
|
if [[ $EXIT_CODE -ne 0 ]]; then
|
|
SLEEP=$(($SLEEP * $BACKOFF_MULTIPLIER))
|
|
|
|
CONSECUTIVE_FAILURES=$(($CONSECUTIVE_FAILURES + 1))
|
|
if [ $CONSECUTIVE_FAILURES -ge $FAILURES_THRESHOLD ]; then
|
|
exit 1
|
|
fi
|
|
else
|
|
SLEEP=$BASE_SLEEP
|
|
CONSECUTIVE_FAILURES=0
|
|
fi
|
|
done
|