cpu-sched: Add background notifiers for fixed oom score app 08/303608/1
authorUnsung Lee <unsung.lee@samsung.com>
Sun, 26 Nov 2023 11:07:59 +0000 (20:07 +0900)
committerUnsung Lee <unsung.lee@samsung.com>
Tue, 2 Jan 2024 08:46:49 +0000 (17:46 +0900)
Add background notifiers for fixed oom score app. This is because,
ForegroundApps fixs cpu affinity for foreground app, but fixed oom score app
was excluded from cpu affinity update.

newly added notifiers are like below:
  - RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE for background status

Change-Id: I737c568c3bd18bc8fe436df16e8bcc370c6abf71
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
src/common/notifier.h
src/process/proc-process.c
src/resource-optimizer/cpu/cpu-sched.c

index 676455477b8d3c8a8e57ef8319ac8b58a327f542..6857a034b319977074efdf7b8396fb1390309cac 100644 (file)
@@ -38,6 +38,12 @@ enum notifier_type {
        RESOURCED_NOTIFIER_APP_INACTIVE,
        RESOURCED_NOTIFIER_APP_PRELAUNCH,
        RESOURCED_NOTIFIER_APP_ANR,
+
+       /**
+        * FIXME: It is temporary notifier to update cpu affinity for
+        * background app with fixed oom score.
+        */
+       RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE,
        /*
         * start terminating application
         */
index 35418a90f4c5cffc5b18a219ad1bda1b1bd156d8..976f1856b6a24892ccf93087f5c1841b7df0c743 100644 (file)
@@ -436,6 +436,35 @@ int proc_set_foregrd(pid_t pid, int oom_score_adj, struct proc_app_info *pai)
        return ret;
 }
 
+static int check_oom_score_for_backgrd(int pid, int oom_score_adj, struct proc_app_info *pai)
+{
+       struct proc_status ps;
+
+       ps.pid = pid;
+       ps.pai = pai;
+
+       if (oom_score_adj > OOMADJ_BACKGRD_UNLOCKED)
+               return 0;
+
+       if (ps.pid < 0)
+               return -1;
+
+       if (ps.pai == NULL)
+               return -1;
+
+       if (proc_oom_priority_is_oom_fixed_process(pid)) {
+               resourced_notify(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, &ps);
+               return 0;
+       }
+
+       if (oom_score_adj == OOMADJ_BACKGRD_PERCEPTIBLE) {
+               resourced_notify(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, &ps);
+               return 0;
+       }
+
+       return -1;
+}
+
 int proc_set_backgrd(int pid, int oom_score_adj, struct proc_app_info *pai)
 {
        int ret = 0;
@@ -454,10 +483,7 @@ int proc_set_backgrd(int pid, int oom_score_adj, struct proc_app_info *pai)
                ret = proc_backgrd_manage(pid, PROC_BACKGROUND_INACTIVE, OOMADJ_BACKGRD_UNLOCKED, pai);
                break;
        default:
-               if (oom_score_adj > OOMADJ_BACKGRD_UNLOCKED)
-                       ret = 0;
-               else
-                       ret = -1;
+               ret = check_oom_score_for_backgrd(pid, oom_score_adj, pai);
                break;
        }
        return ret;
index c69abf6eb96d76bd9f88bab4fb970d94ffadbdb0..a5e52088708d699b96ddea142fbfea544285f961 100644 (file)
@@ -595,6 +595,8 @@ static void register_notifiers()
 
                register_notifier(RESOURCED_NOTIFIER_WIDGET_FOREGRD, cpu_sched_app_foreground);
                register_notifier(RESOURCED_NOTIFIER_WIDGET_BACKGRD, cpu_sched_app_background);
+
+               register_notifier(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, cpu_sched_app_background);
        }
 
 //     register_notifier(RESOURCED_NOTIFIER_RT_SCHEDULER, cpu_sched_rt_scheduler);
@@ -617,6 +619,8 @@ static void unregister_notifiers()
 
                unregister_notifier(RESOURCED_NOTIFIER_WIDGET_FOREGRD, cpu_sched_app_foreground);
                unregister_notifier(RESOURCED_NOTIFIER_WIDGET_BACKGRD, cpu_sched_app_background);
+
+               unregister_notifier(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, cpu_sched_app_background);
        }
 
 //     unregister_notifier(RESOURCED_NOTIFIER_RT_SCHEDULER, cpu_sched_rt_scheduler);