util: kernel: export apis for getting memory info 07/271607/1
authorDongwoo Lee <dwoo08.lee@samsung.com>
Wed, 23 Feb 2022 08:39:57 +0000 (17:39 +0900)
committerDongwoo Lee <dwoo08.lee@samsung.com>
Wed, 23 Feb 2022 08:45:01 +0000 (17:45 +0900)
Change-Id: Ibd7c78f61de9ffcc8b9635a42c779af550c61124
Signed-off-by: Dongwoo Lee <dwoo08.lee@samsung.com>
include/util/kernel.h
src/resource/resource-memory.c
src/util/kernel.c

index ad76c83..4596ff6 100644 (file)
@@ -40,4 +40,7 @@ int kernel_get_possible_cpu_num(void);
 int kernel_get_total_cpu_stat(struct cpu_stat *total);
 int kernel_get_per_cpu_stat(struct cpu_stat *cpus, int num_possible_cpus,
                            int *num_online_cpus);
+
+int kernel_get_memory_info(const char *key);
+int kernel_get_memory_total(void);
 #endif
index 15131b1..6338d7a 100644 (file)
 
 #include <tmonitor/tmonitor.h>
 
-#define PROC_MEM_INFO_PATH "/proc/meminfo"
-#define PROC_MEM_INFO_MEM_TOTAL "MemTotal"
 #define PROC_MEM_INFO_MEM_AVAILABLE "MemAvailable"
 #define PROC_MEM_INFO_MEM_FREE "MemFree"
 
-static int __memory_read_val_from_proc_node(const char *key)
-{
-       int ret = -EINVAL;
-       char buf[BUFF_MAX];
-       char str[BUFF_MAX];
-       FILE *fp = NULL;
-
-       fp = fopen(PROC_MEM_INFO_PATH, "r");
-       if (!fp)
-               return -EIO;
-
-       while (fgets(buf, BUFF_MAX, fp)) {
-               if (!strncmp(buf, key, strlen(key))) {
-                       sscanf(buf, "%s %d", str, &ret);
-                       break;
-               }
-       }
-       fclose(fp);
-
-       return ret;
-}
-
 static inline int memory_read_val_from_proc_node(uint32_t val_id)
 {
        switch (val_id) {
        case MEMORY_TOTAL:
-               return __memory_read_val_from_proc_node(PROC_MEM_INFO_MEM_TOTAL);
+               return kernel_get_memory_total();
        case MEMORY_AVAILABLE:
-               return __memory_read_val_from_proc_node(PROC_MEM_INFO_MEM_AVAILABLE);
+               return kernel_get_memory_info(PROC_MEM_INFO_MEM_AVAILABLE);
        case MEMORY_FREE:
-               return __memory_read_val_from_proc_node(PROC_MEM_INFO_MEM_FREE);
+               return kernel_get_memory_info(PROC_MEM_INFO_MEM_FREE);
        }
        return -EINVAL;
 }
index 41c1637..6e9fb36 100644 (file)
@@ -169,3 +169,35 @@ err:
 
        return ret;
 }
+
+int kernel_get_memory_info(const char *key)
+{
+       int ret = -EINVAL;
+       char buf[BUFF_MAX];
+       char str[BUFF_MAX];
+       FILE *fp = NULL;
+
+       fp = fopen("/proc/meminfo", "r");
+       if (!fp)
+               return -EIO;
+
+       while (fgets(buf, BUFF_MAX, fp)) {
+               if (!strncmp(buf, key, strlen(key))) {
+                       sscanf(buf, "%s %d", str, &ret);
+                       break;
+               }
+       }
+       fclose(fp);
+
+       return ret;
+}
+
+int kernel_get_memory_total(void)
+{
+       static u_int64_t mem_total = 0;
+
+       if (!mem_total)
+               mem_total = kernel_get_memory_info("MemTotal");
+
+       return mem_total;
+}