From 5630218f93c6352860973649bef938f5b6cf0f7f Mon Sep 17 00:00:00 2001 From: Suren Baghdasaryan Date: Fri, 5 Mar 2021 12:44:46 -0800 Subject: [PATCH] Eliminate memtrack variability in Lost RAM when ION is being used Modify lost RAM calculation to account unmapped ION buffers as part of kernel memory and mapped ION buffers as PSS. Because mapped ION buffers might be accounted in memtrack HAL's reported Graphics memory, we need to replace it with the mapped dmabufs representing mapped ION buffers. Bug: 174546244 Test: dumpsys meminfo Signed-off-by: Suren Baghdasaryan Change-Id: Ia7f5fc2ca95389a5f2ae78d4cdbf8ba3ef8e3972 Merged-In: Ia7f5fc2ca95389a5f2ae78d4cdbf8ba3ef8e3972 --- .../server/am/ActivityManagerService.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 09b06132040e2..bd08b628483e7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -13772,9 +13772,12 @@ public class ActivityManagerService extends IActivityManager.Stub pw.print(" unmapped + "); pw.print(stringifyKBSize(ionPool)); pw.println(" pools)"); + kernelUsed += ionUnmapped; // Note: mapped ION memory is not accounted in PSS due to VM_PFNMAP flag being - // set on ION VMAs, therefore consider the entire ION heap as used kernel memory - kernelUsed += ionHeap; + // set on ION VMAs, however it might be included by the memtrack HAL. + // Replace memtrack HAL reported Graphics category with mapped dmabufs + totalPss -= totalMemtrackGraphics; + totalPss += dmabufMapped; } else { final long totalExportedDmabuf = Debug.getDmabufTotalExportedKb(); if (totalExportedDmabuf >= 0) { @@ -14634,17 +14637,21 @@ public class ActivityManagerService extends IActivityManager.Stub long kernelUsed = memInfo.getKernelUsedSizeKb(); final long ionHeap = Debug.getIonHeapsSizeKb(); final long ionPool = Debug.getIonPoolsSizeKb(); + final long dmabufMapped = Debug.getDmabufMappedSizeKb(); if (ionHeap >= 0 && ionPool >= 0) { + final long ionUnmapped = ionHeap - dmabufMapped; memInfoBuilder.append(" ION: "); memInfoBuilder.append(stringifyKBSize(ionHeap + ionPool)); memInfoBuilder.append("\n"); + kernelUsed += ionUnmapped; // Note: mapped ION memory is not accounted in PSS due to VM_PFNMAP flag being - // set on ION VMAs, therefore consider the entire ION heap as used kernel memory - kernelUsed += ionHeap; + // set on ION VMAs, however it might be included by the memtrack HAL. + // Replace memtrack HAL reported Graphics category with mapped dmabufs + totalPss -= totalMemtrackGraphics; + totalPss += dmabufMapped; } else { final long totalExportedDmabuf = Debug.getDmabufTotalExportedKb(); if (totalExportedDmabuf >= 0) { - final long dmabufMapped = Debug.getDmabufMappedSizeKb(); final long dmabufUnmapped = totalExportedDmabuf - dmabufMapped; memInfoBuilder.append("DMA-BUF: "); memInfoBuilder.append(stringifyKBSize(totalExportedDmabuf));