Merge "Provide an interface to query dmabuf GPU allocations"

This commit is contained in:
Kalesh Singh
2021-02-13 02:35:06 +00:00
committed by Gerrit Code Review
4 changed files with 66 additions and 4 deletions

View File

@@ -2583,6 +2583,13 @@ public final class Debug
*/
public static native long getIonPoolsSizeKb();
/**
* Return GPU DMA buffer usage in kB or -1 on error.
*
* @hide
*/
public static native long getGpuDmaBufUsageKb();
/**
* Return DMA-BUF memory mapped by processes in kB.
* Notes:

View File

@@ -206,6 +206,7 @@ cc_library_shared {
],
shared_libs: [
"android.hardware.memtrack-unstable-ndk_platform",
"libandroidicu",
"libbpf_android",
"libnetdbpf",

View File

@@ -33,6 +33,7 @@
#include <string>
#include <vector>
#include <aidl/android/hardware/memtrack/DeviceInfo.h>
#include <android-base/logging.h>
#include <bionic/malloc.h>
#include <debuggerd/client.h>
@@ -45,6 +46,7 @@
#include "jni.h"
#include <dmabufinfo/dmabuf_sysfs_stats.h>
#include <dmabufinfo/dmabufinfo.h>
#include <dmabufinfo/dmabuf_sysfs_stats.h>
#include <meminfo/procmeminfo.h>
#include <meminfo/sysmeminfo.h>
#include <memtrack/memtrack.h>
@@ -846,6 +848,31 @@ static jlong android_os_Debug_getDmabufHeapPoolsSizeKb(JNIEnv* env, jobject claz
return poolsSizeKb;
}
static jlong android_os_Debug_getGpuDmaBufUsageKb(JNIEnv* env, jobject clazz) {
std::vector<aidl::android::hardware::memtrack::DeviceInfo> gpu_device_info;
if (!memtrack_gpu_device_info(&gpu_device_info)) {
return -1;
}
dmabufinfo::DmabufSysfsStats stats;
if (!GetDmabufSysfsStats(&stats)) {
return -1;
}
jlong sizeKb = 0;
const auto& importer_stats = stats.importer_info();
for (const auto& dev_info : gpu_device_info) {
const auto& importer_info = importer_stats.find(dev_info.name);
if (importer_info == importer_stats.end()) {
continue;
}
sizeKb += importer_info->second.size;
}
return sizeKb;
}
static jlong android_os_Debug_getDmabufMappedSizeKb(JNIEnv* env, jobject clazz) {
jlong dmabufPss = 0;
std::vector<dmabufinfo::DmaBuffer> dmabufs;
@@ -954,6 +981,8 @@ static const JNINativeMethod gMethods[] = {
(void*)android_os_Debug_getIonHeapsSizeKb },
{ "getDmabufTotalExportedKb", "()J",
(void*)android_os_Debug_getDmabufTotalExportedKb },
{ "getGpuDmaBufUsageKb", "()J",
(void*)android_os_Debug_getGpuDmaBufUsageKb },
{ "getIonPoolsSizeKb", "()J",
(void*)android_os_Debug_getIonPoolsSizeKb },
{ "getDmabufMappedSizeKb", "()J",

View File

@@ -13756,7 +13756,19 @@ public class ActivityManagerService extends IActivityManager.Stub
}
final long gpuUsage = Debug.getGpuTotalUsageKb();
if (gpuUsage >= 0) {
pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage));
final long gpuDmaBufUsage = Debug.getGpuDmaBufUsageKb();
if (gpuDmaBufUsage >= 0) {
final long gpuPrivateUsage = gpuUsage - gpuDmaBufUsage;
pw.print(" GPU: ");
pw.print(stringifyKBSize(gpuUsage));
pw.print(" (");
pw.print(stringifyKBSize(gpuDmaBufUsage));
pw.print(" dmabuf + ");
pw.print(stringifyKBSize(gpuPrivateUsage));
pw.println(" private)");
} else {
pw.print(" GPU: "); pw.println(stringifyKBSize(gpuUsage));
}
}
/*
@@ -14586,9 +14598,22 @@ public class ActivityManagerService extends IActivityManager.Stub
final long gpuUsage = Debug.getGpuTotalUsageKb();
if (gpuUsage >= 0) {
memInfoBuilder.append(" GPU: ");
memInfoBuilder.append(stringifyKBSize(gpuUsage));
memInfoBuilder.append("\n");
final long gpuDmaBufUsage = Debug.getGpuDmaBufUsageKb();
if (gpuDmaBufUsage >= 0) {
final long gpuPrivateUsage = gpuUsage - gpuDmaBufUsage;
memInfoBuilder.append(" GPU: ");
memInfoBuilder.append(stringifyKBSize(gpuUsage));
memInfoBuilder.append(" (");
memInfoBuilder.append(stringifyKBSize(gpuDmaBufUsage));
memInfoBuilder.append(" dmabuf + ");
memInfoBuilder.append(stringifyKBSize(gpuPrivateUsage));
memInfoBuilder.append(" private)\n");
} else {
memInfoBuilder.append(" GPU: ");
memInfoBuilder.append(stringifyKBSize(gpuUsage));
memInfoBuilder.append("\n");
}
}
memInfoBuilder.append(" Used RAM: ");
memInfoBuilder.append(stringifyKBSize(