lowmem-monitor: Modify PSI's epoll_wait as blocking 04/296704/1
authorSangYoun Kwak <sy.kwak@samsung.com>
Thu, 3 Aug 2023 07:56:49 +0000 (16:56 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Thu, 3 Aug 2023 07:56:49 +0000 (16:56 +0900)
Previously, epoll_wait was non-blocking and the timeout was 0.
It means that epoll_wait will return immediately after checking events.
With this method, the psi monitor thread will consume cpu(it will check
events intensively) so sleep(3) was used to prevent the consuming
situation.
But it makes psi monitor thread to sleep, which might miss events within
the sleeping period.

By making epoll_wait blocking, this problem will be solved.

Change-Id: I4f2b1ff06b53bcca2830d4c2ecb972fc17904f52
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
src/resource-limiter/memory/lowmem-monitor-psi.c

index 9e3f9e2..eec1440 100644 (file)
@@ -33,7 +33,6 @@
 #include "trace.h"
 #include "module.h"
 
-#define EPOLL_LISTENER_POLLING_PERIOD_SECONDS  3
 #define EPOLL_LISTENER_MAX_EVENTS              100
 #define BUFF_MAX                               255
 
@@ -210,7 +209,7 @@ static void *psi_monitor_thread_worker(void *data)
        int events_num = 0;
 
        while (1) {
-               events_num = epoll_wait(g_psi_monitor_epoll_fd, events, EPOLL_LISTENER_MAX_EVENTS, 0);
+               events_num = epoll_wait(g_psi_monitor_epoll_fd, events, EPOLL_LISTENER_MAX_EVENTS, -1);
 
                for (int i = 0; i < events_num; ++i) {
                        if (events[i].events & (EPOLLERR | EPOLLHUP))
@@ -219,8 +218,6 @@ static void *psi_monitor_thread_worker(void *data)
                        struct epoll_event_data *event_data = events[i].data.ptr;
                        event_data->handler(event_data->data);
                }
-
-               sleep(EPOLL_LISTENER_POLLING_PERIOD_SECONDS);
        }
 
        pthread_exit(NULL);