From: Unsung Lee Date: Sun, 26 Nov 2023 11:07:59 +0000 (+0900) Subject: cpu-sched: Add background notifiers for fixed oom score app X-Git-Tag: accepted/tizen/unified/20240104.012423~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0de23b8c4de5768cbafdfeb066281deeb1987d48;p=platform%2Fcore%2Fsystem%2Fresourced.git cpu-sched: Add background notifiers for fixed oom score app 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 --- diff --git a/src/common/notifier.h b/src/common/notifier.h index 6764554..6857a03 100644 --- a/src/common/notifier.h +++ b/src/common/notifier.h @@ -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 */ diff --git a/src/process/proc-process.c b/src/process/proc-process.c index 35418a9..976f185 100644 --- a/src/process/proc-process.c +++ b/src/process/proc-process.c @@ -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; diff --git a/src/resource-optimizer/cpu/cpu-sched.c b/src/resource-optimizer/cpu/cpu-sched.c index c69abf6..a5e5208 100644 --- a/src/resource-optimizer/cpu/cpu-sched.c +++ b/src/resource-optimizer/cpu/cpu-sched.c @@ -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);