#define BUFF_MAX 255
#define PSI_PATH "/proc/pressure"
-#define PSI_MEMORY_PATH PSI_PATH "/memory"
+#define PSI_MEMORY_PATH PSI_PATH"/memory"
#define PSI_TYPE_SOME "some"
#define PSI_TYPE_FULL "full"
+enum psi_mem_level {
+ PSI_MEM_LEVEL_UNKNOWN,
+ PSI_MEM_LEVEL_LOW,
+ PSI_MEM_LEVEL_MEDIUM,
+ PSI_MEM_LEVEL_HIGH,
+ PSI_MEM_LEVEL_MAX,
+};
+
struct psi_memory_monitor_info {
- const int mem_level;
- const char *mem_level_str;
+ const int psi_mem_level;
+ const char *psi_mem_level_str;
const char *psi_type;
const int stall_us;
const int window_us;
static pthread_t g_psi_monitor_thread;
static int g_psi_monitor_thread_destroy_event_fd = -1;
-static void assert_mem_level(int mem_level)
+static void assert_psi_mem_level(int psi_mem_level)
{
- switch (mem_level) {
- case MEM_LEVEL_HIGH:
- case MEM_LEVEL_MEDIUM:
- case MEM_LEVEL_LOW:
- case MEM_LEVEL_CRITICAL:
- case MEM_LEVEL_OOM:
+ switch (psi_mem_level) {
+ case PSI_MEM_LEVEL_LOW:
+ case PSI_MEM_LEVEL_MEDIUM:
+ case PSI_MEM_LEVEL_HIGH:
return;
default:
- assert("Invalid memory level" && 0);
+ _E("Invalid PSI memory level: %d", psi_mem_level);
+ assert(0);
}
}
unsigned int available_mb;
int mem_level;
- assert_mem_level(info->mem_level);
+ assert_psi_mem_level(info->psi_mem_level);
available_mb = proc_get_mem_available();
if (prev_available_mb == available_mb)
assert(event_data);
info = event_data->data;
assert(info);
- assert_mem_level(info->mem_level);
+ assert_psi_mem_level(info->psi_mem_level);
fd = open(PSI_MEMORY_PATH, O_RDWR | O_NONBLOCK);
if (fd < 0) {
goto error_2;
}
- _I("PSI event registered(%s %d %d) as %s mem_level", info->psi_type,
+ _I("PSI event registered(%s %d %d) as %s psi_mem_level", info->psi_type,
info->stall_us,
info->window_us,
- info->mem_level_str);
+ info->psi_mem_level_str);
return 0;
close(fd);
info->fd = -1;
error_1:
- _E("Failed to register psi event: mem_level=%s", info->mem_level_str);
+ _E("Failed to register psi event: psi_mem_level=%s", info->psi_mem_level_str);
return RESOURCED_ERROR_FAIL;
}
info = event_data->data;
assert(info);
- assert_mem_level(info->mem_level);
+ assert_psi_mem_level(info->psi_mem_level);
if (info->fd < 0)
return;
g_psi_monitor_thread_destroy_event_fd = -1;
}
-static struct psi_memory_monitor_info g_psi_memory_monitor_info_list[MEM_LEVEL_MAX] = {
- [MEM_LEVEL_HIGH] = {
- .mem_level = MEM_LEVEL_HIGH,
- .mem_level_str = "high",
- .psi_type = PSI_TYPE_SOME,
- .stall_us = 70000,
- .window_us = 1000000,
- .fd = -1,
- },
- [MEM_LEVEL_MEDIUM] = {
- .mem_level = MEM_LEVEL_MEDIUM,
- .mem_level_str = "medium",
+static struct psi_memory_monitor_info g_psi_memory_monitor_info_list[PSI_MEM_LEVEL_MAX] = {
+ [PSI_MEM_LEVEL_LOW] = {
+ .psi_mem_level = PSI_MEM_LEVEL_LOW,
+ .psi_mem_level_str = "low",
.psi_type = PSI_TYPE_SOME,
.stall_us = 70000,
.window_us = 1000000,
.fd = -1,
},
- [MEM_LEVEL_LOW] = {
- .mem_level = MEM_LEVEL_LOW,
- .mem_level_str = "low",
+ [PSI_MEM_LEVEL_MEDIUM] = {
+ .psi_mem_level = PSI_MEM_LEVEL_MEDIUM,
+ .psi_mem_level_str = "medium",
.psi_type = PSI_TYPE_SOME,
- .stall_us = 150000,
+ .stall_us = 100000,
.window_us = 1000000,
.fd = -1,
},
- [MEM_LEVEL_CRITICAL] = {
- .mem_level = MEM_LEVEL_CRITICAL,
- .mem_level_str = "critical",
+ [PSI_MEM_LEVEL_HIGH] = {
+ .psi_mem_level = PSI_MEM_LEVEL_HIGH,
+ .psi_mem_level_str = "high",
.psi_type = PSI_TYPE_FULL,
.stall_us = 70000,
.window_us = 1000000,
.fd = -1,
},
- [MEM_LEVEL_OOM] = {
- .mem_level = MEM_LEVEL_OOM,
- .mem_level_str = "oom",
- .psi_type = PSI_TYPE_FULL,
- .stall_us = 150000,
- .window_us = 1000000,
- .fd = -1,
- }
};
-static struct epoll_event_data g_psi_event_datas[MEM_LEVEL_MAX] = {
- [MEM_LEVEL_HIGH] = {
+static struct epoll_event_data g_psi_event_datas[PSI_MEM_LEVEL_MAX] = {
+ [PSI_MEM_LEVEL_LOW] = {
.handler = (epoll_event_handler)psi_memory_monitor_handler,
- .data = &g_psi_memory_monitor_info_list[MEM_LEVEL_HIGH],
+ .data = &g_psi_memory_monitor_info_list[PSI_MEM_LEVEL_LOW],
},
- [MEM_LEVEL_MEDIUM] = {
+ [PSI_MEM_LEVEL_MEDIUM] = {
.handler = (epoll_event_handler)psi_memory_monitor_handler,
- .data = &g_psi_memory_monitor_info_list[MEM_LEVEL_MEDIUM],
+ .data = &g_psi_memory_monitor_info_list[PSI_MEM_LEVEL_MEDIUM],
},
- [MEM_LEVEL_LOW] = {
+ [PSI_MEM_LEVEL_HIGH] = {
.handler = (epoll_event_handler)psi_memory_monitor_handler,
- .data = &g_psi_memory_monitor_info_list[MEM_LEVEL_LOW],
+ .data = &g_psi_memory_monitor_info_list[PSI_MEM_LEVEL_HIGH],
},
- [MEM_LEVEL_CRITICAL] = {
- .handler = (epoll_event_handler)psi_memory_monitor_handler,
- .data = &g_psi_memory_monitor_info_list[MEM_LEVEL_CRITICAL],
- },
- [MEM_LEVEL_OOM] = {
- .handler = (epoll_event_handler)psi_memory_monitor_handler,
- .data = &g_psi_memory_monitor_info_list[MEM_LEVEL_OOM],
- }
};
static int register_psi_events(void)
{
- int mem_level = -1;
+ int psi_mem_level = -1;
g_psi_monitor_epoll_fd = epoll_create(1);
if (g_psi_monitor_epoll_fd < 0) {
return RESOURCED_ERROR_FAIL;
}
- for (mem_level = MEM_LEVEL_HIGH; mem_level < MEM_LEVEL_MAX; ++mem_level) {
- if (register_psi_event_epoll(&g_psi_event_datas[mem_level]) < 0)
+ for (psi_mem_level = PSI_MEM_LEVEL_UNKNOWN + 1; psi_mem_level < PSI_MEM_LEVEL_MAX; ++psi_mem_level) {
+ if (register_psi_event_epoll(&g_psi_event_datas[psi_mem_level]) < 0)
break;
}
- if (mem_level < MEM_LEVEL_MAX) {
- for (mem_level = mem_level - 1; mem_level >= MEM_LEVEL_HIGH; --mem_level)
- unregister_psi_event_epoll(&g_psi_event_datas[mem_level]);
+ if (psi_mem_level < PSI_MEM_LEVEL_MAX) {
+ for (psi_mem_level = psi_mem_level - 1; psi_mem_level > PSI_MEM_LEVEL_UNKNOWN; --psi_mem_level)
+ unregister_psi_event_epoll(&g_psi_event_datas[psi_mem_level]);
close(g_psi_monitor_epoll_fd);
g_psi_monitor_epoll_fd = -1;
return RESOURCED_ERROR_FAIL;
static void unregister_psi_events(void)
{
- for (int mem_level = MEM_LEVEL_HIGH; mem_level < MEM_LEVEL_MAX; ++mem_level)
- unregister_psi_event_epoll(&g_psi_event_datas[mem_level]);
+ for (int psi_mem_level = PSI_MEM_LEVEL_UNKNOWN + 1; psi_mem_level < PSI_MEM_LEVEL_MAX; ++psi_mem_level)
+ unregister_psi_event_epoll(&g_psi_event_datas[psi_mem_level]);
close(g_psi_monitor_epoll_fd);
g_psi_monitor_epoll_fd = -1;
}