diff options
| -rw-r--r-- | core/java/android/os/Debug.java | 10 | ||||
| -rw-r--r-- | core/java/com/android/internal/util/MemInfoReader.java | 49 | ||||
| -rw-r--r-- | core/jni/android_os_Debug.cpp | 18 | ||||
| -rwxr-xr-x | services/core/java/com/android/server/am/ActivityManagerService.java | 22 |
4 files changed, 72 insertions, 27 deletions
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 18730b65a7dd..084ca30e263c 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -1093,7 +1093,15 @@ href="{@docRoot}guide/developing/tools/traceview.html">Traceview: A Graphical Lo /** @hide */ public static final int MEMINFO_ZRAM_TOTAL = 8; /** @hide */ - public static final int MEMINFO_COUNT = 9; + public static final int MEMINFO_MAPPED = 9; + /** @hide */ + public static final int MEMINFO_VM_ALLOC_USED = 10; + /** @hide */ + public static final int MEMINFO_PAGE_TABLES = 11; + /** @hide */ + public static final int MEMINFO_KERNEL_STACK = 12; + /** @hide */ + public static final int MEMINFO_COUNT = 13; /** * Retrieves /proc/meminfo. outSizes is filled with fields diff --git a/core/java/com/android/internal/util/MemInfoReader.java b/core/java/com/android/internal/util/MemInfoReader.java index 5f240f73b5be..1dd946494d4d 100644 --- a/core/java/com/android/internal/util/MemInfoReader.java +++ b/core/java/com/android/internal/util/MemInfoReader.java @@ -34,40 +34,65 @@ public final class MemInfoReader { } } + /** + * Total amount of RAM available to the kernel. + */ public long getTotalSize() { return mInfos[Debug.MEMINFO_TOTAL] * 1024; } + /** + * Amount of RAM that is not being used for anything. + */ public long getFreeSize() { return mInfos[Debug.MEMINFO_FREE] * 1024; } + /** + * Amount of RAM that the kernel is being used for caches, not counting caches + * that are mapped in to processes. + */ public long getCachedSize() { - return mInfos[Debug.MEMINFO_CACHED] * 1024; + return getCachedSizeKb() * 1024; } + /** + * Amount of RAM that is in use by the kernel for actual allocations. + */ + public long getKernelUsedSize() { + return getKernelUsedSizeKb() * 1024; + } + + /** + * Total amount of RAM available to the kernel. + */ public long getTotalSizeKb() { return mInfos[Debug.MEMINFO_TOTAL]; } + /** + * Amount of RAM that is not being used for anything. + */ public long getFreeSizeKb() { return mInfos[Debug.MEMINFO_FREE]; } + /** + * Amount of RAM that the kernel is being used for caches, not counting caches + * that are mapped in to processes. + */ public long getCachedSizeKb() { - return mInfos[Debug.MEMINFO_CACHED]; - } - - public long getBuffersSizeKb() { - return mInfos[Debug.MEMINFO_BUFFERS]; - } - - public long getShmemSizeKb() { - return mInfos[Debug.MEMINFO_SHMEM]; + return mInfos[Debug.MEMINFO_BUFFERS] + + mInfos[Debug.MEMINFO_CACHED] - mInfos[Debug.MEMINFO_MAPPED]; } - public long getSlabSizeKb() { - return mInfos[Debug.MEMINFO_SLAB]; + /** + * Amount of RAM that is in use by the kernel for actual allocations. + */ + public long getKernelUsedSizeKb() { + return mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB] + + mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES] + + mInfos[Debug.MEMINFO_KERNEL_STACK]; } public long getSwapTotalSizeKb() { diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp index 7b3528b23823..9ec9993a248c 100644 --- a/core/jni/android_os_Debug.cpp +++ b/core/jni/android_os_Debug.cpp @@ -552,6 +552,10 @@ enum { MEMINFO_SWAP_TOTAL, MEMINFO_SWAP_FREE, MEMINFO_ZRAM_TOTAL, + MEMINFO_MAPPED, + MEMINFO_VMALLOC_USED, + MEMINFO_PAGE_TABLES, + MEMINFO_KERNEL_STACK, MEMINFO_COUNT }; @@ -590,6 +594,11 @@ static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray o "Slab:", "SwapTotal:", "SwapFree:", + "ZRam:", + "Mapped:", + "VmallocUsed:", + "PageTables:", + "KernelStack:", NULL }; static const int tagsLen[] = { @@ -601,12 +610,17 @@ static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray o 5, 10, 9, + 5, + 7, + 12, + 11, + 12, 0 }; - long mem[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + long mem[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; char* p = buffer; - while (*p && numFound < 8) { + while (*p && numFound < 13) { int i = 0; while (tags[i]) { if (strncmp(p, tags[i], tagsLen[i]) == 0) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8dfb3217c0af..970d275ac15a 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1734,8 +1734,13 @@ public final class ActivityManagerService extends ActivityManagerNative logBuilder.append(" MemInfo: "); logBuilder.append(infos[Debug.MEMINFO_SLAB]).append(" kB slab, "); logBuilder.append(infos[Debug.MEMINFO_SHMEM]).append(" kB shmem, "); + logBuilder.append(infos[Debug.MEMINFO_VM_ALLOC_USED]).append(" kB vm alloc, "); + logBuilder.append(infos[Debug.MEMINFO_PAGE_TABLES]).append(" kB page tables "); + logBuilder.append(infos[Debug.MEMINFO_KERNEL_STACK]).append(" kB kernel stack\n"); + logBuilder.append(" "); logBuilder.append(infos[Debug.MEMINFO_BUFFERS]).append(" kB buffers, "); logBuilder.append(infos[Debug.MEMINFO_CACHED]).append(" kB cached, "); + logBuilder.append(infos[Debug.MEMINFO_MAPPED]).append(" kB mapped, "); logBuilder.append(infos[Debug.MEMINFO_FREE]).append(" kB free\n"); if (infos[Debug.MEMINFO_ZRAM_TOTAL] != 0) { logBuilder.append(" ZRAM: "); @@ -1952,9 +1957,7 @@ public final class ActivityManagerService extends ActivityManagerNative + (SystemClock.uptimeMillis()-start) + "ms"); mProcessStats.addSysMemUsageLocked(memInfo.getCachedSizeKb(), memInfo.getFreeSizeKb(), memInfo.getZramTotalSizeKb(), - memInfo.getBuffersSizeKb()+memInfo.getShmemSizeKb() - +memInfo.getSlabSizeKb(), - nativeTotalPss); + memInfo.getKernelUsedSizeKb(), nativeTotalPss); } } @@ -14240,8 +14243,7 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized (this) { mProcessStats.addSysMemUsageLocked(memInfo.getCachedSizeKb(), memInfo.getFreeSizeKb(), memInfo.getZramTotalSizeKb(), - memInfo.getBuffersSizeKb()+memInfo.getShmemSizeKb()+memInfo.getSlabSizeKb(), - nativeProcTotalPss); + memInfo.getKernelUsedSizeKb(), nativeProcTotalPss); } } if (!brief) { @@ -14280,16 +14282,12 @@ public final class ActivityManagerService extends ActivityManagerNative } if (!isCompact) { pw.print(" Used RAM: "); pw.print(totalPss - cachedPss - + memInfo.getBuffersSizeKb() + memInfo.getShmemSizeKb() - + memInfo.getSlabSizeKb()); pw.print(" kB ("); + + memInfo.getKernelUsedSizeKb()); pw.print(" kB ("); pw.print(totalPss - cachedPss); pw.print(" used pss + "); - pw.print(memInfo.getBuffersSizeKb()); pw.print(" buffers + "); - pw.print(memInfo.getShmemSizeKb()); pw.print(" shmem + "); - pw.print(memInfo.getSlabSizeKb()); pw.println(" slab)"); + pw.print(memInfo.getKernelUsedSizeKb()); pw.print(" kernel)\n"); pw.print(" Lost RAM: "); pw.print(memInfo.getTotalSizeKb() - totalPss - memInfo.getFreeSizeKb() - memInfo.getCachedSizeKb() - - memInfo.getBuffersSizeKb() - memInfo.getShmemSizeKb() - - memInfo.getSlabSizeKb()); pw.println(" kB"); + - memInfo.getKernelUsedSizeKb()); pw.println(" kB"); } if (!brief) { if (memInfo.getZramTotalSizeKb() != 0) { |