Merge "Prevent double-counting of kernel stack size in dumpsys reports"

This commit is contained in:
Suren Baghdasaryan
2020-01-03 00:18:24 +00:00
committed by Gerrit Code Review
3 changed files with 34 additions and 3 deletions

View File

@@ -2526,4 +2526,12 @@ public final class Debug
* @hide
*/
public static native long getIonMappedSizeKb();
/**
* Return whether virtually-mapped kernel stacks are enabled (CONFIG_VMAP_STACK).
* Note: caller needs config_gz read sepolicy permission
*
* @hide
*/
public static native boolean isVmapStack();
}

View File

@@ -107,9 +107,12 @@ public final class MemInfoReader {
* 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_UNRECLAIMABLE]
+ mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES]
+ mInfos[Debug.MEMINFO_KERNEL_STACK];
long size = mInfos[Debug.MEMINFO_SHMEM] + mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE]
+ mInfos[Debug.MEMINFO_VM_ALLOC_USED] + mInfos[Debug.MEMINFO_PAGE_TABLES];
if (!Debug.isVmapStack()) {
size += mInfos[Debug.MEMINFO_KERNEL_STACK];
}
return size;
}
public long getSwapTotalSizeKb() {

View File

@@ -50,6 +50,7 @@
#include <memunreachable/memunreachable.h>
#include <android-base/strings.h>
#include "android_os_Debug.h"
#include <vintf/VintfObject.h>
namespace android
{
@@ -833,6 +834,23 @@ static jlong android_os_Debug_getIonMappedSizeKb(JNIEnv* env, jobject clazz) {
return ionPss;
}
static jboolean android_os_Debug_isVmapStack(JNIEnv *env, jobject clazz)
{
static enum {
CONFIG_UNKNOWN,
CONFIG_SET,
CONFIG_UNSET,
} cfg_state = CONFIG_UNKNOWN;
if (cfg_state == CONFIG_UNKNOWN) {
const std::map<std::string, std::string> configs =
vintf::VintfObject::GetInstance()->getRuntimeInfo()->kernelConfigs();
std::map<std::string, std::string>::const_iterator it = configs.find("CONFIG_VMAP_STACK");
cfg_state = (it != configs.end() && it->second == "y") ? CONFIG_SET : CONFIG_UNSET;
}
return cfg_state == CONFIG_SET;
}
/*
* JNI registration.
*/
@@ -882,6 +900,8 @@ static const JNINativeMethod gMethods[] = {
(void*)android_os_Debug_getIonPoolsSizeKb },
{ "getIonMappedSizeKb", "()J",
(void*)android_os_Debug_getIonMappedSizeKb },
{ "isVmapStack", "()Z",
(void*)android_os_Debug_isVmapStack },
};
int register_android_os_Debug(JNIEnv *env)