Add some compaction statistics around throttling

Adding some statistics that can be helpful on bugreports for finding
when compaction is being over triggered.

Bug: 232296251
Test: dumpsys activity
Change-Id: I686aa2501cc8781c5939260a00bfda380890bf08
This commit is contained in:
Edgar Arriaga
2022-05-11 15:24:48 -07:00
committed by Edgar Arriaga García
parent 6b22279c9c
commit 414923e81a

View File

@@ -341,10 +341,24 @@ public final class CachedAppOptimizer {
}
};
// Compaction Stats
private int mSomeCompactionCount;
private int mFullCompactionCount;
private int mPersistentCompactionCount;
private int mBfgsCompactionCount;
private long mSomeCompactRequest;
private long mFullCompactRequest;
private long mPersistentCompactRequest;
private long mBfgsCompactRequest;
private long mProcCompactionsRequested;
private long mProcCompactionsPerformed;
private long mProcCompactionsNoPidThrottled;
private long mProcCompactionsOomAdjThrottled;
private long mProcCompactionsTimeThrottled;
private long mProcCompactionsRSSThrottled;
private long mProcCompactionsMiscThrottled;
private long mSystemCompactionsPerformed;
private final ProcessDependencies mProcessDependencies;
private final ProcLocksReader mProcLocksReader;
@@ -436,9 +450,31 @@ public final class CachedAppOptimizer {
pw.println(" " + KEY_COMPACT_PROC_STATE_THROTTLE + "="
+ Arrays.toString(mProcStateThrottle.toArray(new Integer[0])));
pw.println(" " + mSomeCompactionCount + " some, " + mFullCompactionCount
pw.println(" Requested: " + mSomeCompactRequest + " some, " + mFullCompactRequest
+ " full, " + mPersistentCompactRequest + " persistent, "
+ mBfgsCompactRequest + " BFGS compactions.");
pw.println(" Performed: " + mSomeCompactionCount + " some, " + mFullCompactionCount
+ " full, " + mPersistentCompactionCount + " persistent, "
+ mBfgsCompactionCount + " BFGS compactions.");
pw.println(" Process Compactions Requested: " + mProcCompactionsRequested);
pw.println(" Process Compactions Performed: " + mProcCompactionsPerformed);
long compactionsThrottled = mProcCompactionsRequested - mProcCompactionsPerformed;
pw.println(" Process Compactions Throttled: " + compactionsThrottled);
double compactThrottlePercentage =
(compactionsThrottled / (double) mProcCompactionsRequested) * 100.0;
pw.println(" Process Compactions Throttle Percentage: " + compactThrottlePercentage);
pw.println(" NoPid Throttled: " + mProcCompactionsNoPidThrottled);
pw.println(" OomAdj Throttled: " + mProcCompactionsOomAdjThrottled);
pw.println(" Time Throttled: " + mProcCompactionsTimeThrottled);
pw.println(" RSS Throttled: " + mProcCompactionsRSSThrottled);
pw.println(" Misc Throttled: " + mProcCompactionsMiscThrottled);
long unaccountedThrottled = compactionsThrottled - mProcCompactionsNoPidThrottled
- mProcCompactionsOomAdjThrottled - mProcCompactionsTimeThrottled
- mProcCompactionsRSSThrottled - mProcCompactionsMiscThrottled;
// Any throttle that was not part of the previous categories
pw.println(" Unaccounted Throttled: " + unaccountedThrottled);
pw.println(" System Compactions Performed: " + mSystemCompactionsPerformed);
pw.println(" Tracking last compaction stats for " + mLastCompactionStats.size()
+ " processes.");
@@ -479,6 +515,7 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppSome(ProcessRecord app, boolean force) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_SOME);
++mSomeCompactRequest;
compactApp(app, force, "some");
}
@@ -519,6 +556,7 @@ public final class CachedAppOptimizer {
" compactAppFull requested for " + app.processName + " force: " + force
+ " oomAdjEnteredCached: " + oomAdjEnteredCached);
}
++mFullCompactRequest;
// Apply OOM adj score throttle for Full App Compaction.
if (force || oomAdjEnteredCached) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_FULL);
@@ -535,6 +573,7 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppPersistent(ProcessRecord app) {
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_PERSISTENT);
++mPersistentCompactRequest;
compactApp(app, false, "Persistent");
}
@@ -573,6 +612,7 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppBfgs(ProcessRecord app) {
++mBfgsCompactRequest;
app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_BFGS);
compactApp(app, false, " Bfgs");
}
@@ -1447,27 +1487,33 @@ public final class CachedAppOptimizer {
lastCompactTime = opt.getLastCompactTime();
}
++mProcCompactionsRequested;
long[] rssBefore;
if (pid == 0) {
// not a real process, either one being launched or one being killed
if (DEBUG_COMPACTION) {
Slog.d(TAG_AM, "Compaction failed, pid is 0");
}
++mProcCompactionsNoPidThrottled;
return;
}
if (!forceCompaction) {
if (shouldOomAdjThrottleCompaction(proc, requestedAction)) {
++mProcCompactionsOomAdjThrottled;
return;
}
if (shouldTimeThrottleCompaction(proc, start, requestedAction)) {
++mProcCompactionsTimeThrottled;
return;
}
if (shouldThrottleMiscCompaction(proc, procState, requestedAction)) {
++mProcCompactionsMiscThrottled;
return;
}
rssBefore = mProcessDependencies.getRss(pid);
if (shouldRssThrottleCompaction(requestedAction, pid, name, rssBefore)) {
++mProcCompactionsRSSThrottled;
return;
}
} else {
@@ -1502,6 +1548,7 @@ public final class CachedAppOptimizer {
try {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
"Compact " + action + ": " + name);
++mProcCompactionsPerformed;
long zramFreeKbBefore = Debug.getZramFreeKb();
mProcessDependencies.performCompaction(action, pid);
long[] rssAfter = mProcessDependencies.getRss(pid);
@@ -1553,6 +1600,7 @@ public final class CachedAppOptimizer {
break;
}
case COMPACT_SYSTEM_MSG: {
++mSystemCompactionsPerformed;
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "compactSystem");
compactSystem();
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);