Skip to content
Snippets Groups Projects
Commit 835b8f33 authored by Carlos Galo's avatar Carlos Galo
Browse files

OomKillRecord: Track new oom/mark_victim tracepoint fields

Upstream linux has added support for pgtables, uid, and rss stats fields
in the mark_victim tracepoint[1]. Update the OomKillRecord to track the
new fields, and report them to telemetry.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72ba14deb40a9e9668ec5e66a341ed657e5215c2



Test: statsd_testdrive 754 displays new fields
Test: m
Bug: 331214192
Change-Id: I23ee8b9a395c991d8506e927346b63d770152433
Merged-In: I23ee8b9a395c991d8506e927346b63d770152433
Signed-off-by: default avatarCarlos Galo <carlosgalo@google.com>
parent badbb20d
No related branches found
No related tags found
No related merge requests found
......@@ -25,7 +25,7 @@ import com.android.internal.util.FrameworkStatsLog;
* Note that this class fields' should be equivalent to the struct
* <b>OomKill</b> inside
* <pre>
* system/memory/libmeminfo/libmemevents/include/memevents.h
* system/memory/libmeminfo/libmemevents/include/memevents/bpf_types.h
* </pre>
*
* @hide
......@@ -36,14 +36,27 @@ public final class OomKillRecord {
private int mUid;
private String mProcessName;
private short mOomScoreAdj;
private long mTotalVmInKb;
private long mAnonRssInKb;
private long mFileRssInKb;
private long mShmemRssInKb;
private long mPgTablesInKb;
public OomKillRecord(long timeStampInMillis, int pid, int uid,
String processName, short oomScoreAdj) {
String processName, short oomScoreAdj,
long totalVmInKb, long anonRssInKb,
long fileRssInKb, long shmemRssInKb,
long pgTablesInKb) {
this.mTimeStampInMillis = timeStampInMillis;
this.mPid = pid;
this.mUid = uid;
this.mProcessName = processName;
this.mOomScoreAdj = oomScoreAdj;
this.mTotalVmInKb = totalVmInKb;
this.mAnonRssInKb = anonRssInKb;
this.mFileRssInKb = fileRssInKb;
this.mShmemRssInKb = shmemRssInKb;
this.mPgTablesInKb = pgTablesInKb;
}
/**
......@@ -55,7 +68,8 @@ public final class OomKillRecord {
FrameworkStatsLog.write(
FrameworkStatsLog.KERNEL_OOM_KILL_OCCURRED,
mUid, mPid, mOomScoreAdj, mTimeStampInMillis,
mProcessName);
mProcessName, mTotalVmInKb, mAnonRssInKb,
mFileRssInKb, mShmemRssInKb, mPgTablesInKb);
}
public long getTimestampMilli() {
......
......@@ -92,9 +92,11 @@ static jobjectArray android_server_am_OomConnection_waitOom(JNIEnv* env, jobject
memevent_listener.deregisterAllEvents();
jniThrowRuntimeException(env, "Failed creating java string for process name");
}
jobject java_oom_kill = env->NewObject(sOomKillRecordInfo.clazz, sOomKillRecordInfo.ctor,
oom_kill.timestamp_ms, oom_kill.pid, oom_kill.uid,
process_name, oom_kill.oom_score_adj);
jobject java_oom_kill =
env->NewObject(sOomKillRecordInfo.clazz, sOomKillRecordInfo.ctor,
oom_kill.timestamp_ms, oom_kill.pid, oom_kill.uid, process_name,
oom_kill.oom_score_adj, oom_kill.total_vm_kb, oom_kill.anon_rss_kb,
oom_kill.file_rss_kb, oom_kill.shmem_rss_kb, oom_kill.pgtables_kb);
if (java_oom_kill == NULL) {
memevent_listener.deregisterAllEvents();
jniThrowRuntimeException(env, "Failed to create OomKillRecord object");
......@@ -115,8 +117,8 @@ int register_android_server_am_OomConnection(JNIEnv* env) {
sOomKillRecordInfo.clazz = FindClassOrDie(env, "android/os/OomKillRecord");
sOomKillRecordInfo.clazz = MakeGlobalRefOrDie(env, sOomKillRecordInfo.clazz);
sOomKillRecordInfo.ctor =
GetMethodIDOrDie(env, sOomKillRecordInfo.clazz, "<init>", "(JIILjava/lang/String;S)V");
sOomKillRecordInfo.ctor = GetMethodIDOrDie(env, sOomKillRecordInfo.clazz, "<init>",
"(JIILjava/lang/String;SJJJJJ)V");
return RegisterMethodsOrDie(env, "com/android/server/am/OomConnection", sOomConnectionMethods,
NELEM(sOomConnectionMethods));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment