summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Edgar Arriaga <edgararriaga@google.com> 2023-01-13 22:24:33 +0000
committer Edgar Arriaga <edgararriaga@google.com> 2023-03-16 21:10:58 +0000
commit854e613a67a8de0921f1dedd2e711ba2dd74087f (patch)
tree8913a1c7f45d32e3ba3594ec60ada6b022aa0a5f
parent3ac452b39d9d6606517c7347adabbd3dc8ce3448 (diff)
RESTRICT AUTOMERGE: Disable file compaction by default
At present time kernel does not support shared pages to be swapped using file compaction which uses MADV_COLD and most of the file pages in a process are actually shared mappings causing us to waste a lot of cycles scanning through a lot of unreclaimable pages, this patch disables file compaction which will be reenabled until a solution is implemented on upstream kernel that allows reclaiming shared pages, thus making it worth to scan all of those pages again. Test: am compact file <processname> <uid> Bug: 265473345 Change-Id: I4c819058da229c00d1eafea636f89784718adc5f (cherry picked from commit 30b069612a9d35b02cc6c2656c18326e8cffeec6)
-rw-r--r--services/core/java/com/android/server/am/CachedAppOptimizer.java22
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java14
2 files changed, 27 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index cee9f79285a7..347557cacda3 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -110,6 +110,8 @@ public final class CachedAppOptimizer {
private static final String ATRACE_COMPACTION_TRACK = "Compaction";
+ @VisibleForTesting static final boolean ENABLE_FILE_COMPACT = false;
+
// Defaults for phenotype flags.
@VisibleForTesting static final Boolean DEFAULT_USE_COMPACTION = false;
@VisibleForTesting static final Boolean DEFAULT_USE_FREEZER = true;
@@ -515,9 +517,11 @@ public final class CachedAppOptimizer {
@GuardedBy("mProcLock")
void compactAppSome(ProcessRecord app, boolean force) {
- app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_SOME);
- ++mSomeCompactRequest;
- compactApp(app, force, "some");
+ if (ENABLE_FILE_COMPACT) {
+ app.mOptRecord.setReqCompactAction(COMPACT_PROCESS_SOME);
+ ++mSomeCompactRequest;
+ compactApp(app, force, "some");
+ }
}
// This method returns true only if requirements are met. Note, that requirements are different
@@ -1278,6 +1282,15 @@ public final class CachedAppOptimizer {
}
}
+ if (!ENABLE_FILE_COMPACT) {
+ // Turn off file compaction
+ if (resolvedAction == COMPACT_ACTION_FULL) {
+ resolvedAction = COMPACT_ACTION_ANON;
+ } else if (resolvedAction == COMPACT_ACTION_FILE) {
+ resolvedAction = COMPACT_ACTION_NONE;
+ }
+ }
+
return resolvedAction;
}
@@ -1545,6 +1558,9 @@ public final class CachedAppOptimizer {
}
int resolvedAction = resolveCompactionAction(requestedAction);
+ if (resolvedAction == COMPACT_ACTION_NONE) {
+ return;
+ }
action = compactActionIntToString(resolvedAction);
try {
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
index 2baa1ec6cdc2..8d9c592587d6 100644
--- a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java
@@ -1079,14 +1079,16 @@ public final class CachedAppOptimizerTest {
mCachedAppOptimizerUnderTest.mLastCompactionStats.clear();
- // We force a some compaction
- mCachedAppOptimizerUnderTest.compactAppSome(processRecord, true);
- waitForHandler();
- // then process is compacted.
- String executedCompactAction =
+ if (CachedAppOptimizer.ENABLE_FILE_COMPACT) {
+ // We force a some compaction
+ mCachedAppOptimizerUnderTest.compactAppSome(processRecord, true);
+ waitForHandler();
+ // then process is compacted.
+ String executedCompactAction =
compactActionIntToString(processRecord.mOptRecord.getLastCompactAction());
- assertThat(executedCompactAction)
+ assertThat(executedCompactAction)
.isEqualTo(mCachedAppOptimizerUnderTest.mCompactActionSome);
+ }
}
private void setFlag(String key, String value, boolean defaultValue) throws Exception {