statslog: Make this library compatible with the cgroups v2 hierarchy

Call memcg_apps_dir() instead of hard-coding the top-level directory of
the memcg controller.

Bug: 213617178
Test: Verified lmkd operation inside Cuttlefish.
Change-Id: I659610ebdabe3b69b0b1097aa5cf248d6f3273c5
Signed-off-by: Bart Van Assche <bvanassche@google.com>
This commit is contained in:
Bart Van Assche 2022-02-15 23:39:33 +00:00
parent 911f106a4a
commit 16ba8bc773
3 changed files with 13 additions and 7 deletions

View File

@ -55,6 +55,7 @@ cc_library_static {
defaults: ["stats_defaults"], defaults: ["stats_defaults"],
shared_libs: [ shared_libs: [
"liblog", "liblog",
"libprocessgroup",
], ],
} }

View File

@ -30,6 +30,10 @@
#include <time.h> #include <time.h>
#include <unistd.h> #include <unistd.h>
#include <string>
#include <processgroup/processgroup.h>
#ifdef LMKD_LOG_STATS #ifdef LMKD_LOG_STATS
#define STRINGIFY(x) STRINGIFY_INTERNAL(x) #define STRINGIFY(x) STRINGIFY_INTERNAL(x)
@ -85,18 +89,20 @@ static void memory_stat_parse_line(char* line, struct memory_stat* mem_st) {
mem_st->swap_in_bytes = value; mem_st->swap_in_bytes = value;
} }
static int memory_stat_from_cgroup(struct memory_stat* mem_st, int pid, uid_t uid) { static int memory_stat_from_cgroup(struct memory_stat* mem_st, int pid, uid_t uid __unused) {
FILE *fp; std::string path;
char buf[PATH_MAX]; if (!CgroupGetAttributePathForTask("MemStats", pid, &path)) {
ALOGE("Querying MemStats path failed");
return -1;
}
snprintf(buf, sizeof(buf), MEMCG_PROCESS_MEMORY_STAT_PATH, uid, pid); FILE* fp = fopen(path.c_str(), "r");
fp = fopen(buf, "r");
if (fp == NULL) { if (fp == NULL) {
return -1; return -1;
} }
char buf[PAGE_SIZE];
while (fgets(buf, PAGE_SIZE, fp) != NULL) { while (fgets(buf, PAGE_SIZE, fp) != NULL) {
memory_stat_parse_line(buf, mem_st); memory_stat_parse_line(buf, mem_st);
} }

View File

@ -92,7 +92,6 @@ enum lmk_state {
#ifdef LMKD_LOG_STATS #ifdef LMKD_LOG_STATS
#define MEMCG_PROCESS_MEMORY_STAT_PATH "/dev/memcg/apps/uid_%u/pid_%d/memory.stat"
#define PROC_STAT_FILE_PATH "/proc/%d/stat" #define PROC_STAT_FILE_PATH "/proc/%d/stat"
#define PROC_STAT_BUFFER_SIZE 1024 #define PROC_STAT_BUFFER_SIZE 1024
#define BYTES_IN_KILOBYTE 1024 #define BYTES_IN_KILOBYTE 1024