memory-cgroup: Add a new oom_level called OOM_LEVEL_FOREGROUND 04/296304/7
authorUnsung Lee <unsung.lee@samsung.com>
Fri, 21 Jul 2023 08:01:52 +0000 (17:01 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Mon, 31 Jul 2023 02:37:40 +0000 (02:37 +0000)
Add a new oom_level called OOM_LEVEL_FOREGROUND
between OOM_LEVEL_MOST_RECENTLY_USED and OOM_LEVEL_FOREGROUND_AND_PROC
to choose victims only from foreground status app group.
Although all foreground apps are contained in
OOM_LEVEL_FOREGROUND_AND_PROC group, it also contains process in /proc.

Change-Id: Ie257c8a280afe89eaa750075aa09a7f8d6167396
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
src/common/cgroup/memory-cgroup.c
src/common/cgroup/memory-cgroup.h
src/resource-limiter/memory/lowmem.c

index ebde437..1aa7805 100644 (file)
@@ -104,6 +104,8 @@ int cgroup_get_lowest_oom_score_adj(enum oom_level oom_level)
                 return OOMADJ_BACKGRD_UNLOCKED + OOMADJ_APP_INCREASE;
         case OOM_LEVEL_BACKGROUND_MOST_RECENTLY_USED:
                 return OOMADJ_BACKGRD_PERCEPTIBLE;
+       case OOM_LEVEL_FOREGROUND:
+               return OOMADJ_FOREGRD_LOCKED;
         case OOM_LEVEL_FOREGROUND_AND_PROC:
                 return OOMADJ_SU;
         default:
@@ -122,6 +124,8 @@ int cgroup_get_highest_oom_score_adj(enum oom_level oom_level)
                 return OOMADJ_APP_MAX;
         case OOM_LEVEL_BACKGROUND_MOST_RECENTLY_USED:
                 return OOMADJ_BACKGRD_UNLOCKED;
+       case OOM_LEVEL_FOREGROUND:
+               return OOMADJ_FOREGRD_UNLOCKED;
         case OOM_LEVEL_FOREGROUND_AND_PROC:
                 return OOMADJ_FOREGRD_UNLOCKED;
         default:
index 5ae3ffa..974208c 100644 (file)
@@ -75,6 +75,7 @@ enum {
 enum oom_level {
        OOM_LEVEL_BACKGROUND_LEAST_RECENTLY_USED,
        OOM_LEVEL_BACKGROUND_MOST_RECENTLY_USED,
+       OOM_LEVEL_FOREGROUND,
        OOM_LEVEL_FOREGROUND_AND_PROC,
        OOM_LEVEL_ALL,
 };
index ef48f63..02d3c14 100644 (file)
@@ -868,6 +868,12 @@ retry:
                goto retry;
        } else if ((oom_level == OOM_LEVEL_BACKGROUND_MOST_RECENTLY_USED)
                        && (ctl->flags & OOM_IN_DEPTH)) {
+               oom_level = OOM_LEVEL_FOREGROUND;
+               if(ctl->flags & OOM_FORCE)
+                       max_victim_cnt = FOREGROUND_VICTIMS;
+               goto retry;
+       } else if ((oom_level == OOM_LEVEL_FOREGROUND)
+                       && (ctl->flags & OOM_IN_DEPTH)) {
                oom_level = OOM_LEVEL_FOREGROUND_AND_PROC;
                if(ctl->flags & OOM_FORCE)
                        max_victim_cnt = FOREGROUND_VICTIMS;