resource: memory: Add new attributes for memory resource
authorSung-hun Kim <sfoon.kim@samsung.com>
Mon, 14 Mar 2022 01:42:22 +0000 (10:42 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 14 Mar 2022 02:53:22 +0000 (11:53 +0900)
MEMORY_ATTR_BUFFER: an information about system I/O buffers
MEMORY_ATTR_CACHED: an information about system page cache
MEMORY_ATTR_CMA_TOTAL: an information about total CMA buffer size
MEMORY_ATTR_CMA_FREE: an information about free CMA buffers

Change-Id: I14fbc69e6f0a015c6137eed89650265b7fdda958
Signed-off-by: Sung-hun Kim <sfoon.kim@samsung.com>
lib/tmonitor/tmonitor.h
src/resource/resource-memory.c

index 98ce0d8..9252ba5 100644 (file)
@@ -80,6 +80,10 @@ extern "C" {
 #define MEMORY_ATTR_TOTAL                      BIT(0)  /* DATA_TYPE_UINT64 */
 #define MEMORY_ATTR_AVAILABLE                  BIT(1)  /* DATA_TYPE_UINT64 */
 #define MEMORY_ATTR_FREE                       BIT(2)  /* DATA_TYPE_UINT64 */
+#define MEMORY_ATTR_BUFFER                     BIT(3)  /* DATA_TYPE_UINT64 */
+#define MEMORY_ATTR_CACHED                     BIT(4)  /* DATA_TYPE_UINT64 */
+#define MEMORY_ATTR_CMA_TOTAL                  BIT(5)  /* DATA_TYPE_UINT64 */
+#define MEMORY_ATTR_CMA_FREE                   BIT(6)  /* DATA_TYPE_UINT64 */
 
 /* Battery Resource */
 #define BATTERY_ATTR_CAPACITY                  BIT(0)  /* DATA_TYPE_INT */
index 40eb4f6..7ad1061 100644 (file)
 
 #define PROC_MEM_INFO_MEM_AVAILABLE "MemAvailable"
 #define PROC_MEM_INFO_MEM_FREE "MemFree"
+#define PROC_MEM_INFO_BUFFER "Buffers"
+#define PROC_MEM_INFO_CACHED "Cached"
+#define PROC_MEM_INFO_CMA_FREE "CmaFree"
+
+static int memory_get_cma_total(u_int64_t *val)
+{
+       static u_int64_t cma_total = 0;
+       int ret;
+
+       if (!cma_total) {
+               ret = kernel_get_memory_info("CmaTotal", &cma_total);
+               if (ret < 0) {
+                       _E("failed to get system CMA total memory\n");
+                       return -EINVAL;
+               }
+       }
+
+       *val = cma_total;
+
+       return 0;
+}
 
 static int memory_get_memory_info(const struct resource *res,
                                const struct resource_attribute *attr,
@@ -56,6 +77,18 @@ static int memory_get_memory_info(const struct resource *res,
        case MEMORY_ATTR_FREE:
                ret = kernel_get_memory_info(PROC_MEM_INFO_MEM_FREE, val);
                break;
+       case MEMORY_ATTR_BUFFER:
+               ret = kernel_get_memory_info(PROC_MEM_INFO_BUFFER, val);
+               break;
+       case MEMORY_ATTR_CACHED:
+               ret = kernel_get_memory_info(PROC_MEM_INFO_CACHED, val);
+               break;
+       case MEMORY_ATTR_CMA_TOTAL:
+               ret = memory_get_cma_total(val);
+               break;
+       case MEMORY_ATTR_CMA_FREE:
+               ret = kernel_get_memory_info(PROC_MEM_INFO_CMA_FREE, val);
+               break;
        default:
                _E("wrong memory resource attribute\n");
                ret = -EINVAL;
@@ -88,6 +121,34 @@ static const struct resource_attribute memory_attrs[] = {
                .ops    = {
                        .get = memory_get_memory_info,
                }
+       }, {
+               .name   = "MEMORY_ATTR_BUFFER",
+               .id     = MEMORY_ATTR_BUFFER,
+               .type   = DATA_TYPE_UINT64,
+               .ops    = {
+                       .get = memory_get_memory_info,
+               }
+       }, {
+               .name   = "MEMORY_ATTR_CACHED",
+               .id     = MEMORY_ATTR_CACHED,
+               .type   = DATA_TYPE_UINT64,
+               .ops    = {
+                       .get = memory_get_memory_info,
+               }
+       }, {
+               .name   = "MEMORY_ATTR_CMA_TOTAL",
+               .id     = MEMORY_ATTR_CMA_TOTAL,
+               .type   = DATA_TYPE_UINT64,
+               .ops    = {
+                       .get = memory_get_memory_info,
+               }
+       }, {
+               .name   = "MEMORY_ATTR_CMA_FREE",
+               .id     = MEMORY_ATTR_CMA_FREE,
+               .type   = DATA_TYPE_UINT64,
+               .ops    = {
+                       .get = memory_get_memory_info,
+               }
        },
 };