platform/core/system/resourced.git
10 months agolowmem-limit: Update app (w/ MemLimitAction) cgroup when status is changed 04/303604/1
Unsung Lee [Sun, 3 Dec 2023 10:53:59 +0000 (19:53 +0900)]
lowmem-limit: Update app (w/ MemLimitAction) cgroup when status is changed

Update memory cgroup of MemLimitAction defined app when status is changed.

Change-Id: Ia1211b1c1982c25e8adf7910cee894bfb98a6cf7
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconf: Support memory limit exception for specific app 03/303603/1
Unsung Lee [Mon, 27 Nov 2023 07:53:48 +0000 (16:53 +0900)]
conf: Support memory limit exception for specific app

Support memory limit exception for specific app if <limit> value is -1.
This functionality is required to exclude specific app from
ServicePerAppLimitAction, WidgetPerAppLimitAction, GUIPerAppLimitAction, and
BackgroundPerAppLimitAction.

Change-Id: Ia58c4538ca541b78adc61a32d870730063915c6f
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconf: Remove action from all LimitAction 02/303602/1
Unsung Lee [Mon, 27 Nov 2023 04:47:28 +0000 (13:47 +0900)]
conf: Remove action from all LimitAction

Remove action from all LimitAction confs
(i.e., ServicePerAppLimitAction, WidgetPerAppLimitAction, GUIPerAppLimitAction,
BackgroundPerAppLimitAction and MemLimitAction).
Action will be decided only by MemoryLimitTrigger conf.
It also change type of memory in mem_action from unsigned long long to uint64_t.

Change-Id: Ieae8ed65d8d55b6a6e70e21fc1024bfaf09664f3
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agolowmem: Restore default value of LmkThresholdLeave and LmkMaxVictimPerOom 01/303601/1
Unsung Lee [Tue, 21 Nov 2023 11:42:41 +0000 (20:42 +0900)]
lowmem: Restore default value of LmkThresholdLeave and LmkMaxVictimPerOom

Set default value of LmkThresholdLeave and LmkMaxVictimPerOom as before
of commit 3b936616d4a2b9e4058ff191c396aebc5f5efc57

Change-Id: I487117ca976b9ab57240385f889f992b67faec75
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoprocess: Fix watchdog handler to use proper appid 00/303600/1
SangYoun Kwak [Fri, 17 Nov 2023 02:23:57 +0000 (11:23 +0900)]
process: Fix watchdog handler to use proper appid

The watchdog handler handles dbus signal(with a pid as a parameter) and
kills an app of this pid if its watchdog action is not configured as
"ignore".  (Watchdog action can be configured by locating proper .conf
file in /etc/resourced/process.conf.d.)

Previously, the watchdog handler uses /proc/<pid>/cmdline as an app
name, which is not an actual app name. This caused the watchdog handler
to think 'this app is not configured as "ignore"' even it is configured
as "ignore" because the actual app name and /proc/<pid>/cmdline are not
matched.
Thus, apps which should be not killed by the watchdog were killed.

To fix this issue, find_app_info() is used, which gets
struct proc_app_info from pid, to get the proper app name.

Change-Id: I2bc9c9d7ffcb45bbc10243241d4786fb73d2f7b4
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
10 months agoconf: Add LmkMaxVictimPerOom to set max victim per oom level during LMK 99/303599/1
Unsung Lee [Fri, 17 Nov 2023 11:29:00 +0000 (20:29 +0900)]
conf: Add LmkMaxVictimPerOom to set max victim per oom level during LMK

Add LmkMaxVictimPerOom to set max victim per oom level during LMK.
It is restoration of 'NumMaxVictims' in tizen 6.0.

Change-Id: I3771d00e1d3f847072039e553d9f8ce3aae1146a
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconf: Add LmkThresholdLeave to set stop condition of LMK 98/303598/1
Unsung Lee [Fri, 17 Nov 2023 06:28:21 +0000 (15:28 +0900)]
conf: Add LmkThresholdLeave to set stop condition of LMK

Add LmkThresholdLeave to set stop condition of LMK.
It is restoration of 'ThresholdLeave' in tizen 6.0.

Change-Id: I0fb27492d8aae4ae0807fd65e98560c025e6c057
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoproc-oom-priority: Support fixed oom for service type app 97/303597/1
Unsung Lee [Fri, 17 Nov 2023 06:17:10 +0000 (15:17 +0900)]
proc-oom-priority: Support fixed oom for service type app

Change-Id: Ia8c3dfa1f973f44948f6b11cc9a223302505b951
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agolowmem-governor: Remove app with LmkKillException from the LMK victim list 96/303596/1
Unsung Lee [Fri, 10 Nov 2023 07:46:29 +0000 (16:46 +0900)]
lowmem-governor: Remove app with LmkKillException from the LMK victim list

Remove app with LmkKillException configuration property (yes|1|ok|on|)
from the LMK victim list during LMK. If LmkKillException is not declared in
limiter.conf.d, then the process can be included in LMK victim list during LMK
(default is no|0|off).

Change-Id: I8aa5903850438952a6f2f9e024eba1bb4f7ccd43
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconf: Add LmkKillException to remove app from LMK list 95/303595/1
Unsung Lee [Thu, 9 Nov 2023 11:37:01 +0000 (20:37 +0900)]
conf: Add LmkKillException to remove app from LMK list

Change-Id: I3cd92aa109185a2dbab2171230681e3ec9cf75b3
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoproc-common: Change limit_bytes type to cover larger than 4GB 94/303594/1
Unsung Lee [Thu, 9 Nov 2023 07:55:21 +0000 (16:55 +0900)]
proc-common: Change limit_bytes type to cover larger than 4GB

Change limit_bytes type from unsigned long to uint64_t
to cover more than 4GB in 32bit machine.

Change-Id: I48405ad16066f21a5c569f7eab181ef2d2ef2a14
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agolowmem-limit: Remove useless max limit size check 93/303593/1
Unsung Lee [Thu, 9 Nov 2023 07:37:23 +0000 (16:37 +0900)]
lowmem-limit: Remove useless max limit size check

Resourced already resizes limit size when limit size is larger than total memory size.

Change-Id: I71cf191f07c398e1916bbe6d1397874e7f6df302
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agolowmem-limit: Add oom based event trigger and handler 92/303592/1
Unsung Lee [Wed, 8 Nov 2023 12:21:52 +0000 (21:21 +0900)]
lowmem-limit: Add oom based event trigger and handler

Add oom based event trigger and handler to restore 'MemLimitTrigger=oom' in tizen 6.0.
If memory limit is triggered by oom instead of threshold, then do NOT kill or
reclaim forcely in the resourced (Kernel's oom job).

Change-Id: I3c00412ddac9e89080aee3a2b8bfa5297ef7e5d9
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconf: Support oom based event trigger and handler in conf 91/303591/1
Unsung Lee [Thu, 9 Nov 2023 01:12:03 +0000 (10:12 +0900)]
conf: Support oom based event trigger and handler in conf

Add 'MemoryLimitTrigger' conf to support oom based event trigger and handler.
If conf value is oom then, memory limit is handled by kernel oom. On the other hand,
reosurced handles memory limit directly with threshold value in the conf.

Change-Id: I785fc8bdac9505f990dc48cf3c4c7d4ead013c01
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoswap: Reclaim memory when LCD is off 90/303590/1
Unsung Lee [Thu, 17 Aug 2023 05:34:57 +0000 (14:34 +0900)]
swap: Reclaim memory when LCD is off

Reclaim memory from BackgroundMru memory cgroup when LCD is off
to reserve memory.

This is one of patch to restore BackgroundReclaim configuration of resourced 6.0.

Change-Id: I3657689a11931f8f80deeaaebc64fcdc4dc35747
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agomemory-cgroup: Add BackgroundMru cgroup 89/303589/1
Unsung Lee [Thu, 17 Aug 2023 08:33:22 +0000 (17:33 +0900)]
memory-cgroup: Add BackgroundMru cgroup

Add a memory cgroup called BackgroundMru to include apps
which have oom_score_adj like below range.
OOMADJ_BACKGRD_PERCEPTIBLE <= oom_score_adj
< OOMADJ_BACKGRD_UNLOCKED + OOMADJ_APP_INCREASE

resourced allows process migration from Private to BackgroundMru and vice versa.
However, it is impossible to be migrated from Private to / (top) or BackgroundLru
and vice versa.

This is one of patch to restore BackgroundReclaim configuration of resourced 6.0.

Change-Id: Icd540641b65e75e87fd73ee3511f7b3c33c32957
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agomemory-cgroup: Rename memory throttling to memory background LRU 88/303588/1
Unsung Lee [Thu, 17 Aug 2023 06:31:49 +0000 (15:31 +0900)]
memory-cgroup: Rename memory throttling to memory background LRU

Rename memory throttling to memory background LRU to emphasize the meaning
of the corresponding memory cgroup.

This is one of patch to restore BackgroundReclaim configuration of resourced 6.0.

Change-Id: I7f7243d40cc1a1c9e4762bea2176d4abbbe62b1c
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
10 months agoconfig: Add AfterScreenDim configuration 87/303587/1
Unsung Lee [Thu, 17 Aug 2023 04:39:04 +0000 (13:39 +0900)]
config: Add AfterScreenDim configuration

Add AfterScreenDim configuration of MemoryBackgroundReclaim section
in optimizer.conf to reclaim memory from most recently used background apps.

This is one of patch to restore BackgroundReclaim configuration of resourced 6.0.

Change-Id: I30fbb0814c3622ea1d4615f8e3b424a4c105ace7
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
12 months agoAdd ISU package 95/300695/3
Adam Michalski [Tue, 31 Oct 2023 09:36:29 +0000 (10:36 +0100)]
Add ISU package

Change-Id: Ibe9c1e87d8af96c49a75cc3ab1196940578f17f6

12 months agolowmem-monitor-psi: Add the lowest PSI level 21/300621/1 accepted/tizen/unified/20231031.163521
Unsung Lee [Mon, 30 Oct 2023 04:41:45 +0000 (13:41 +0900)]
lowmem-monitor-psi: Add the lowest PSI level

Add the lowest PSI level to monitor low memory early.
This is because, sometimes Out-of-Memory (OOM) is triggered earlier than LMK
in ths past 3 level PSIs.

New PSI also cannot perfectly detect LMK status before OOM is triggered.
However, it covers some LMK status detected by vmpressure(low).

In conclusion, change PSI like below:
PSI_LEVEL1(NEW): 30ms/500ms (6%)
LOW -> PSI_LEVEL2
MEDIUM -> PSI_LEVEL3
HIGH -> PSI_LEVEL4

Change-Id: Ib8fe1f75f8baf07d585fd1af8ef4306994d9c442
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agoconf: Add governor (post) configurations 50/299050/1 accepted/tizen/8.0/unified/20231005.093836 accepted/tizen/unified/20230920.072014 tizen_8.0_m2_release
Unsung Lee [Thu, 7 Sep 2023 03:05:33 +0000 (12:05 +0900)]
conf: Add governor (post) configurations

Add memory (LMK) and cpu (boosting stall) governor configurations to
turn on/off options.

Two new section is added like below:
  - MemoryLMKGovernor in limiter.conf
    : LMK post governor related section
  - CpuBoostingStallGovernor in optimizer.conf
    : Cpu boosting stall governor related section

MemoryLMKGovernor includes configurations
  - ForegroundAppListPostGovernor: LMK post governor for foreground app list
  - WorkingSetSizePostGovernor: LMK post governor for working set size

CpuBoostingStallGovernor includes a configuration
  - CpuBoostingStallGovernor: Cpu boosting governor for stall handler

Change-Id: I901915bc6d80b66256466a54d56e9216d80f5737
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agoconf: Move proc-common to memory-common for consistency 49/299049/1
Unsung Lee [Thu, 7 Sep 2023 06:01:00 +0000 (15:01 +0900)]
conf: Move proc-common to memory-common for consistency

Move function and variable of configuration defined in proc-common
to memory-common for consistency.
foreground_app_list_status_enabled configuration is actually used in
LMK (lowmem.c). In addition, both configuration foreground_app_list_status_enabled
and lmk_governor_post_wss_enabled are related to LMK post governors.
Therefore, function and variable related to two configurations needs to be gathered
together in memory-common.c.

Change-Id: I0fffbd0fa0bea0846517ffcbbdde17742eaa4681
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting-monitor: Check return value of eventfd_write and remove useless code 18/298718/4 accepted/tizen/unified/20230914.100402
Unsung Lee [Wed, 13 Sep 2023 01:51:39 +0000 (10:51 +0900)]
cpu-boosting-monitor: Check return value of eventfd_write and remove useless code

Check return value of eventfd_write and remove eventfd_read function. This is
because if eventfd_write is not correctly working (return value is -1),
then monitor pthread will not be exited. In addition, eventfd_read is used to
read dummy value, so psi monitor will be exited correctly regardless of eventfd_read.

It solves problems reported by Coverity with cid = 1704480 and cid = 1704688.

Change-Id: Ife5e17998a0edd46e3d7e6ad028d7a0a7285f19a
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agoproc-monitor: Modify variable type and function to parse window info 03/298703/3
Unsung Lee [Fri, 8 Sep 2023 01:56:49 +0000 (10:56 +0900)]
proc-monitor: Modify variable type and function to parse window info

Modify variable type and function to parse an array of windows received
from the window system. This is fundamentally to solve the issue while
parsing window info.

In gvariant, i and b are gint32 and gboolean, whereas previously
int and bool types were used respectively.

In addition, g_variant_iter_next() is definitely preferred over
g_variant_iter_loop() when parsing simple type such as integer and string within a loop.

Change-Id: If19b9199f9bdd4a0a32518f9a400dbf9423ff410
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem-controller: Exclude app from kill when is_killed_free_from is true 83/298383/3 accepted/tizen/unified/20230907.175319
Unsung Lee [Tue, 5 Sep 2023 12:16:44 +0000 (21:16 +0900)]
lowmem-controller: Exclude app from kill when is_killed_free_from is true

Exclude app from LMK from kill when is_killed_free_from is true.
This value can be set by LMK governor post function in resourced LMK plugin backend.

Change-Id: I2b70370d05c9e08fbb7d168cb8c2717faa44a028
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem: Add active, inactive, and swap usage in task_info 82/298382/3
Unsung Lee [Tue, 5 Sep 2023 04:42:01 +0000 (13:42 +0900)]
lowmem: Add active, inactive, and swap usage in task_info

Add active, inactive, and swap usage of each app in task_info structure.
This infomration will be used in get_kill_candidates_post_with_wss() function.

Active, inactive, and swap usage are counted by
  - Active usage is sum of active_anon + active_file in memcg
  - Inactive usage is sum of inactive_anon + inactive_file in memcg
  - Swap usage is a mount of swap in memcg

Change-Id: I1e96d12023eb303754a0120e18c20ee9e66a1459
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem-limit: Make private memcg for each app 81/298381/2
Unsung Lee [Tue, 5 Sep 2023 07:45:00 +0000 (16:45 +0900)]
lowmem-limit: Make private memcg for each app

Private memory cgroup for each app is essential to monitor app information
such as working set size. This is because calculation ofworking set size
is based on memory stat in memcg.

Change-Id: Ic2d840bad0aa54eb9293ced1333c14de81917c13
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem: Add lmk_try_count in syscommon_plugin_resourced_memory_lmk_get_kill_candidate... 89/298389/1
Unsung Lee [Wed, 6 Sep 2023 08:51:53 +0000 (17:51 +0900)]
lowmem: Add lmk_try_count in syscommon_plugin_resourced_memory_lmk_get_kill_candidates_post_with_wss()

Add lmk_try_count argument
into syscommon_plugin_resourced_memory_lmk_get_kill_candidates_post_with_wss to
notify the current LMK cycle to resourced LMK backend plugin.

Change-Id: Ia83ab53c6179beec00b3f2430e9218256077032e
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agoconf: Add lmk_governor_post_wss_enabled to turn on/off governor post with WSS 80/298380/2
Unsung Lee [Tue, 5 Sep 2023 02:47:24 +0000 (11:47 +0900)]
conf: Add lmk_governor_post_wss_enabled to turn on/off governor post with WSS

Add lmk_governor_post_wss_enabled variable to turn on/off governor post with
working set size (WSS).

Change-Id: I31f24e0dde2514893338429fc65ed83e75a3697e
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Check whether cpu stall handler is turned on 55/298255/2 accepted/tizen/unified/20230906.014625
Unsung Lee [Fri, 1 Sep 2023 08:19:24 +0000 (17:19 +0900)]
cpu-boosting: Check whether cpu stall handler is turned on

Check cpu stall handler is turned on.
If so, wake up cpu boosting thread to handle cpu stall.
If not, ignore event from the cpu boosting monitor.

Change-Id: Idc14a3804200291a6c4e9d021e590e98ba199e56
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Remove useless overhead caused by governor 54/298254/2
Unsung Lee [Mon, 4 Sep 2023 07:50:29 +0000 (16:50 +0900)]
cpu-boosting: Remove useless overhead caused by governor

Remove useless overhead caused by cpu boosting governor.

It removes useless overhead in two cases
  1. If cpu is not busy when stall event is monitored, then
     do not decrease boost thread level
  2. If action list to do is empty and no already decreased thread,
     then do not make an additional timer. This timer is used to check
     whether there is not stall event during interval.

Change-Id: I01ce568278a7acdb2b958644b95a97c838c3da70
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Decrease timer from 2000ms to 500ms 53/298253/1
Unsung Lee [Fri, 1 Sep 2023 08:45:57 +0000 (17:45 +0900)]
cpu-boosting: Decrease timer from 2000ms to 500ms

Decrease timer for checking additional PSIs from 2000ms to 500ms.
That is, if no addition PSIs are triggered during 500ms,
then cpu boosting level is restored.
This is because 2000ms is too long to check cpu contention is alleviated or not.

Change-Id: I4485d6499e1317a4af92398b2a7d5ef0053423a7
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Move is_cpu_contention_alleviated to libsyscommon 52/298252/1
Unsung Lee [Fri, 1 Sep 2023 07:08:39 +0000 (16:08 +0900)]
cpu-boosting: Move is_cpu_contention_alleviated to libsyscommon

Move is_cpu_contention_alleviated function to libsyscommon and
reference syscommon_resourced_is_cpu_contention_alleviated() from libsyscommon.

Change-Id: I7f799bd4c1b8f0f7970c2731d9035e217b7696bb
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Modify cpu boosting level to handle cpu contention 38/297138/7
Unsung Lee [Thu, 10 Aug 2023 23:55:39 +0000 (08:55 +0900)]
cpu-boosting: Modify cpu boosting level to handle cpu contention

Modify cpu boosting level to handle cpu contention.
The cpu boosting governor makes a list of commands to handle cpu contention,
and it decreases cpu boosting level of some threads (victims).

The cpu boosting module waits for timer events to check whehter cpu contention
is alleviated or not. If so, restoring cpu boosting level.
If not, making a new timer to check cpu contention after some interval.

Currently, cpu boosting module just checks whether PSI events are not
triggered for some interval. It is not the best solution, but simple
and intuitive solution.

Change-Id: I897c89c054ab11ed08ad16ef171610d7fa2944bd
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Execute cpu boosting backend (governor) 27/297127/5
Unsung Lee [Thu, 10 Aug 2023 03:09:00 +0000 (12:09 +0900)]
cpu-boosting: Execute cpu boosting backend (governor)

Execute cpu boosting governor in plugin backend to govern cpu contention.
The prototype of governor function is like below:
  - int syscommon_plugin_resourced_cpu_boosting_governor_govern_request
(GHashTable *cpu_boosting_info_table,
 cpu_boosting_level_e cpu_boosting_level,
 GSList **cpu_boosting_controller_action);
    * This function receives cpu_boosting_info_table and cpu_boosting_level
      as inputs and gives cpu_boosting_controller_action as an output.
      If return value of this function is not 0,
      then cpu_boosting_controller_action is meaningless.

Change-Id: I6c8d805b63e258147932fb7ce8928001ef715ca8
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Move cpu boosting common struct to libsyscommon 26/297126/5
Unsung Lee [Wed, 9 Aug 2023 12:52:19 +0000 (21:52 +0900)]
cpu-boosting: Move cpu boosting common struct to libsyscommon

Extract cpu boosting common struct and move it to libsyscmmon to be referenced
between resourced cpu boosting module and cpu boosting plugin backend.

structure name is changed like below for consistency:
  - cpu_boosting_info -> syscommon_resourced_cpu_boosting_info
  - cpu_boosting_input -> syscommon_resourced_cpu_boosting_input

Change-Id: Id1296115c984cd03250cbb3cf182b79f4067ecaf
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting-monitor: Notify cpu boosting module when monitoring cpu PSIs 25/297125/5
Unsung Lee [Wed, 9 Aug 2023 07:27:06 +0000 (16:27 +0900)]
cpu-boosting-monitor: Notify cpu boosting module when monitoring cpu PSIs

Notify cpu boosting module when cpu PSIs are triggered.
When monitoring cpu PSIs, the monitor needs to wake up cpu boosting main thread.
This is because cpu boosting monitor just catches cpu PSIs and need to
wait for next PSI events.

Thread running cpu boosting monitor should wake up main cpu boosting thread
running g_main_loop_run() function. When main cpu boosting is idle,
the thread is woken up immediately.

Change-Id: I7f89265f4e7394c07c86cb0f3e40edc785eb922c
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Init cpu boosting module early 24/297124/5
Unsung Lee [Wed, 9 Aug 2023 04:42:10 +0000 (13:42 +0900)]
cpu-boosting: Init cpu boosting module early

Initialize cpu boosting module earlier than cpu boosting monitor module.
This is because, cpu boosting module must be ready to accept requests from
cpu boosting monitor.
Currently, cpu boosting module does not depend on any other resourced modules,
so initailize cpu boosting module with the highest priority (i.e., MODULE_PRIORITY_EARLY).

Change-Id: I9cff9d0c24205d7887b4d6d758b7410efe1fc165
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting-monitor: Add cpu PSI monitor module 23/297123/5
Unsung Lee [Wed, 9 Aug 2023 03:23:25 +0000 (12:23 +0900)]
cpu-boosting-monitor: Add cpu PSI monitor module

Add cpu PSI monitor to detect cpu contention.
cpu PSI monitor code works very similar with lowmem PSI monitor (memory PSI).
However, CPU PSI is only focusing on 'some' events.
This is because, global CPU PSI information (i.e., /proc/pressure/cpu)
always has zero (i.e., meaningless value) for 'full'.

Change-Id: Ie4d06bda0a57d7918abc1dddd23eb09dfffce053
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agocpu-boosting: Split a cpu boosting info table into three tables 22/297122/4
Unsung Lee [Thu, 10 Aug 2023 07:44:13 +0000 (16:44 +0900)]
cpu-boosting: Split a cpu boosting info table into three tables

Split a cpu boosting info table into three independent cpu boosting info tables
according to cpu boosting level.
Currently, resourced supports three cpu boosting level
(CPU_BOOSTING_LEVEL_STRONG, CPU_BOOSTING_LEVEL_MEDIUM, and CPU_BOOSTING_LEVEL_WEAK).

Separate cpu boosting info table according to cpu boosting level
to find and handle threads with same cpu boosting level easily.

Change-Id: I9eb8eac89df8112e91802154401fd59bd0626781
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem-monitor: Check return value of eventfd_write and remove useless code 73/297673/3 accepted/tizen/unified/20230825.044230 accepted/tizen/unified/riscv/20230829.072052
Unsung Lee [Tue, 22 Aug 2023 11:47:50 +0000 (20:47 +0900)]
lowmem-monitor: Check return value of eventfd_write and remove useless code

Check return value of eventfd_write and remove eventfd_read function. This is
because if eventfd_write is not correctly working (return value is -1),
then monitor pthread will not be exited. In addition, eventfd_read is used to
read dummy value, so psi monitor will be exited correctly regardless of eventfd_read.

It solves problems reported by Coverity with cid = 1704480 and cid = 1704688.

Change-Id: Ic753aaf3b96c95d7f1e2e629c165800728b92289
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
14 months agolowmem-monitor: Add a module for PSI and vmpressure 08/297508/1 accepted/tizen/unified/20230822.162228
SangYoun Kwak [Mon, 21 Aug 2023 05:57:25 +0000 (14:57 +0900)]
lowmem-monitor: Add a module for PSI and vmpressure

A new module "lowmem-monitor" is added:
 - Initialize monitor: PSI or vmpressure
    - Use PSI if the PSI initialization was successful.
    - Use vmpressure otherwise.

Change-Id: I37d9b223698d3742dd4a02b27c94f65852810fb4
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
15 months agolowmem-monitor: Modify PSI monitor to do one action per monitor 11/296711/1 accepted/tizen/unified/20230809.071852 accepted/tizen/unified/riscv/20230809.013259
SangYoun Kwak [Thu, 3 Aug 2023 08:24:44 +0000 (17:24 +0900)]
lowmem-monitor: Modify PSI monitor to do one action per monitor

Multiple events can be occured at one epoll_wait return.
In this case, lowmem_trigger_memory_state_action can be called multiple
times which is unnecessary.
With this patch, lowmem_trigger_memory_state_action will be called only
once per epoll_wait's return.

Change-Id: I6ef5cc7aeee4c9baa273517333c1cd2655752d58
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
15 months agolowmem-monitor: Modify PSI's epoll_wait as blocking 04/296704/1
SangYoun Kwak [Thu, 3 Aug 2023 07:56:49 +0000 (16:56 +0900)]
lowmem-monitor: Modify PSI's epoll_wait as blocking

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>
15 months agolowmem-monitor: Modify PSI memory monitoring levels 98/296698/1
SangYoun Kwak [Thu, 3 Aug 2023 07:03:38 +0000 (16:03 +0900)]
lowmem-monitor: Modify PSI memory monitoring levels

The levels of PSI memory monitor changed from 5 levels to 3 levels.
 1. PSI_MEM_LEVEL_LOW (low psi, memory stall is small)
 2. PSI_MEM_LEVEL_MEDIUM
 3. PSI_MEM_LEVEL_HIGH (high psi, memory stall is greater than the aboves)
In accordance with the modification above, stall time also changed.

Code modifications are made to accompany the above modification.

Change-Id: I2bc87ae48a6dd7fc2d019e4a8ebece899c81c747
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
15 months agolowmem-monitor: Modify psi event handler like vmpressure 97/296697/1
SangYoun Kwak [Thu, 3 Aug 2023 06:33:58 +0000 (15:33 +0900)]
lowmem-monitor: Modify psi event handler like vmpressure

The handler for psi events is modified like the vmpressure's one.
 - Get available memory by calling proc_get_mem_available()
 - Get memory status(level) by calling lowmem_check_mem_state()
 - Do an action by calling lowmem_trigger_memory_state_action
 - Do nothing if the available memory is same as the previous one.

Change-Id: I770093c1ad501c63620444a6aede91f500978fd3
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
15 months agoproc: Check whether window is enabled or not 17/296617/3 accepted/tizen/unified/20230803.174805
Unsung Lee [Wed, 2 Aug 2023 07:48:51 +0000 (16:48 +0900)]
proc: Check whether window is enabled or not

Check the option which indicates whether window is enabled or not.
If the corresponding option is turned off, then do not execute
window related code in proc and lowmem modules.

If the option is turned on,
   - Update window stack each time
   - Active 'ForegroundAppList' config
   - Consider window information during LMK

Change-Id: Id976634628ca9bdd49e8e508ebc70739c410f7e3
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc: Reset the window stack information from proc_app_info 63/296563/5
Unsung Lee [Mon, 31 Jul 2023 11:17:47 +0000 (20:17 +0900)]
proc: Reset the window stack information from proc_app_info

Reset window stack information before updating it
to remove invalid window information.
Currently, window information of window stack is saved in proc_app_info,
so resourced needs to know each window owner after the latest window stack update.

Change-Id: If2ef136577c329e63cf48673254b9e04642b283c
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc-monitor: Check window validity using focus information 62/296562/5
Unsung Lee [Mon, 31 Jul 2023 08:11:20 +0000 (17:11 +0900)]
proc-monitor: Check window validity using focus information

Check whether focus information of app life cycle
and focus information of window stack is same to judge window stack validity.

Window information in window stack includes focus information
and appfw also notifies resourced when focus information of app is updated.
In this case, both information should be synchronized.

Change-Id: I7a9a0e5eb772ac93ec45d07bb393d8d42e832f41
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc-monitor: Update window stack when updating app life cycle 61/296561/2
Unsung Lee [Mon, 31 Jul 2023 07:27:36 +0000 (16:27 +0900)]
proc-monitor: Update window stack when updating app life cycle

Update window stack information when app life cycle is updated
to get the latest window stack information.

Window stack is dbus method call, so resourced doest not know
when window stack is updated. On the other hand, app life cycle update
can be caught by call back function. That is, resourced can catch
timing of window stack update using app life cycle

Change-Id: I626d338e7e45814449a899f2ed9ebf059e9a964a
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc-monitor: Identify windows to save in app info 60/296560/1
Unsung Lee [Mon, 31 Jul 2023 06:04:58 +0000 (15:04 +0900)]
proc-monitor: Identify windows to save in app info

A process can have more than one window, so identify
a window to save in an app info.
Currently, if a process already registered a window
and other window of this process is not focused,
then resourced ignores window update.

Change-Id: I50890744ee93dd8da4fd996a3eea7880a7efd9ee
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agolowmem: Pass oom level to LMK governor post for fg app 35/296335/7
Unsung Lee [Tue, 25 Jul 2023 11:38:12 +0000 (20:38 +0900)]
lowmem: Pass oom level to LMK governor post for fg app

LMK governor post function reordering foreground status app candidates
requires oom level, so pass oom level to this post function.

LMK governor post function reordering foreground status app candidates
needs to know oom level to judge whether all candidates are
from foreground app or not.

Change-Id: I3fad91585db910a39dc5e9ccdc52b22e5401f66d
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agomemory-cgroup: Move code to correct module and refer to correct module 34/296334/7
Unsung Lee [Tue, 25 Jul 2023 10:26:09 +0000 (19:26 +0900)]
memory-cgroup: Move code to correct module and refer to correct module

Move lowmem module code which is located in memory-cgroup to lowmem module.
In addition, add a function which sets lowest oom score of memory cgroup.
Previously, swap module was incorrectly referencing oom level
insteaf of memory cgroup.

Relocation is done like below:
  - oom_level is only related to lowmem module. so move all related functions
    to lowmem module
  - swap module needs to reference memory cgroup to move pid
    to Throttling memory cgroup. Therefore, it should reference function
    from memory cgroup instead of lowmem module.

Change-Id: Idd863113f7d058afa60973aea541d5c1c03a2c02
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agolowmem: Move oom level to libsyscommon 09/296509/4
Unsung Lee [Sun, 30 Jul 2023 06:58:47 +0000 (15:58 +0900)]
lowmem: Move oom level to libsyscommon

enum oom_level needs to be referenced by both resourced lowmem module and
resourced plugin-backend (i.e., LMK governor). Therefore, it should be located
a shared library (i.e., libsyscommon) which can be accessed by both sides.
In addition, add corresponding header file from libsyscommon.

Change-Id: I1f6c9676e1cdf9f436cbaa5413ed433dfe6e4ffe
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agolowmem: Support 'get_kill_candidates_post' funcs 59/294659/19
Unsung Lee [Wed, 21 Jun 2023 10:31:02 +0000 (19:31 +0900)]
lowmem: Support 'get_kill_candidates_post' funcs

Support LMK governor post funcs which will be called after
LMK governor function to reorder a victim candidate list

resourced LMK needs to reorder victim candidates list according to
serveral conditions (e.g., working set size, foreground app status)

resourced supports three type of get_kill_candidates_post ops newly
  - int syscommon_plugin_resourced_memory_lmk_get_kill_candidates_post(
  GArray *candidates)
  to consider user custom governor policy
  - int syscommon_plugin_resourced_memory_lmk_get_kill_candidates_post_with_wss(
  GArray *candidates)
  to consider working set size of app
  - int syscommon_plugin_resourced_memory_lmk_get_kill_candidates_post_with_foreground(
  GArray *candidates)
  to consider window information of app

Change-Id: I32bab160d66d05cd986b9f84c942ea1d2b8a59c4
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agomemory-cgroup: Add a new oom_level called OOM_LEVEL_FOREGROUND 04/296304/7
Unsung Lee [Fri, 21 Jul 2023 08:01:52 +0000 (17:01 +0900)]
memory-cgroup: Add a new oom_level called OOM_LEVEL_FOREGROUND

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>
15 months agolowmem: Initalize task window info using app window info 48/295748/10
Unsung Lee [Thu, 13 Jul 2023 01:38:52 +0000 (10:38 +0900)]
lowmem: Initalize task window info using app window info

When LMK is triggered by low memory, task window information is
needed to be initalize using app window information

LMK governor needs to know window information to make an order of
vicitim candidates. Currently, resourced app information includes
itself window information. Therefore, app window information needs
to be passed to task info.

Change-Id: If54217a1a4738d3a01945e8c375d6c3d2144895e
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agolowmem: Set fixed oom_score_adj of foreground app during LMK 93/294693/17
Unsung Lee [Fri, 23 Jun 2023 04:19:17 +0000 (13:19 +0900)]
lowmem: Set fixed oom_score_adj of foreground app during LMK

Set fixed oom_score_adj during LMK process when app is foreground
and foreground oom_score_adj is fixed.

resourced LMK considers oom_score_adj and memory size to choose vicitim when
available memory size is too low. Meanwhile, some apps should not be killed
by LMK when apps are foreground (visible to user).
This configuration can protect foreground apps when LMK is triggered by
fixing low oom_score_adj.

If foreground oom_score_adj is already fixed by the configuration and
App is foreground, then oom_score_adj of 'task_info' gets value from
the fixed oom_score_adj (very low value).

Change-Id: Idbc1352a1994f7bc5363159021117b8b0e79f2a4
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc-oom-priority: Set low oom_score_adj for 'ForegroundAppList' 47/295747/10
Unsung Lee [Wed, 12 Jul 2023 05:57:04 +0000 (14:57 +0900)]
proc-oom-priority: Set low oom_score_adj for 'ForegroundAppList'

Set low oom_score_adj of foreground app if the corresponding configuration sets.

oom_score_adj is an important indicator to choose victim
when available memory is too low.
Therefore, if specific foreground app(s) have low fixed oom_score_adj
compared to other apps, then they will be selected for victim with relatively
low probability.

Change-Id: Ic2752fb658da05d9d92a167e5a0f4d1dae411994
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoconf: Parse 'ForegroundAppList' property of process.conf 58/294658/18
Unsung Lee [Thu, 22 Jun 2023 09:06:17 +0000 (18:06 +0900)]
conf: Parse 'ForegroundAppList' property of process.conf

Parse configuration for foreground status app(s)
which want to have low oom_socre_adj

This configuration supports recording low oom_score_adj
for foreground app. oom_score_adj is an important indicator
to choose victim when available memory is too low.
Therefore, with this configuration, specific foreground app(s) have low
probability to be choosen as victim of LMK.

A new configuration called 'App' in section 'ForegroundAppList'
is added in process.conf

Change-Id: Ia25c4a966ad7351e0bf67b55d8fb925417f1cc8c
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoconf: Extract functions to reduce duplicate code 46/295746/7
Unsung Lee [Wed, 12 Jul 2023 00:34:38 +0000 (09:34 +0900)]
conf: Extract functions to reduce duplicate code

Find configuration parsing codes that are predicted to be commonly used and
extract them as functions.

'proc_conf_info' structure is used to store configurations of
per process information. In addition, this structure can be used
for all kind of configurations in resourced
(e.g., limiter.conf, optimizer.conf, and process.conf).
Therefore, initialization and inserting of 'proc_conf_info'
are predicted to be commonly used.

Change-Id: I161ffce5c6b28ee4acf9610af7c984f2323ea07e
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoproc-monitor: Save window info obtained from window system in app info 52/294552/39
Unsung Lee [Mon, 19 Jun 2023 08:49:25 +0000 (17:49 +0900)]
proc-monitor: Save window info obtained from window system in app info

Send dbus method call to window system to get window stack
and store window information into app information after checking validity

The window system manages information of windows called window stack, and
window stack includes information such as visibility and whether a window has
focus. This information is added to app information after validation process.

New dbus method call added from resourced to window system.
  - A bus name (org.enlightenment.wm), a path (/org/enlightenment/wm),
  and an interface (org.enlightenment.wm.proc) of window system
  - A method (GetVisibleWinInfo_v2)

Change-Id: I03984bbfedc7f861063c824ecd7541cc0bc8794f
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agoRefactor enum 'oom_score' for high readability 84/296084/7
Unsung Lee [Wed, 19 Jul 2023 06:09:28 +0000 (15:09 +0900)]
Refactor enum 'oom_score' for high readability

Rename 'oom_score' enumeration and refactor all of code related to
this enumeration to improve readability

resourced uses enum 'oom_score' and this enum has four elements
(OOM_SCORE_HIGH, OOM_SCORE_MEDIUM, OOM_SCORE_LOW, OOM_SCORE_MAX).
Each element means foreground app + /proc group,
most recently used background app group,
least recently used background app group, and all process group respectively.
However, it is too difficult to match element and group.
In addition, order of the element is wrong.

Name 'oom_score' is changed to 'oom_level' and
each element name is changed like below:
OOM_SCORE_LOW  -> OOM_LEVEL_BACKGROUND_LEAST_RECENTLY_USED = 0
OOM_SCORE_MEDIUM -> OOM_LEVEL_BACKGROUND_MOST_RECENTLY_USED = 1
OOM_SCORE_HIGH  -> OOM_LEVEL_FOREGROUND_AND_PROC = 2
OOM_SCORE_MAX  -> OOM_LEVEL_ALL = 3

Change-Id: I499f1ef23a83d0e436f91b8de5437fece7c916ac
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
15 months agolowmem-monitor: Disable PSI monitoring method 14/296414/1
SangYoun Kwak [Thu, 27 Jul 2023 06:31:23 +0000 (15:31 +0900)]
lowmem-monitor: Disable PSI monitoring method

The PSI monitoring feature of lowmem-monitor was disabled since this
feature is under development.

Change-Id: I0459020a64ace157b0d421a6fd1fb797b0fed263
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
16 months agolowmem-monitor: Add PSI monitoring method 54/295654/5
SangYoun Kwak [Wed, 12 Jul 2023 07:12:27 +0000 (16:12 +0900)]
lowmem-monitor: Add PSI monitoring method

PSI, the "Pressure Stall Information" functionality of the kernel
monitors the stall time of CPU, IO and Memory.
Since it monitors memory stall, it can be used as a monitoring method of
the LMK.

As a new monitoring method, PSI monitoring has been added to the LMK.
(To use this method, the kernel should support PSI)

Change-Id: Ic19fb8a74b4047788b8ce52f18a1f04d028ef136
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
16 months agolowmem-monitor: Rename to lowmem-monitor-vmpressure 53/295653/3
SangYoun Kwak [Tue, 11 Jul 2023 10:54:58 +0000 (19:54 +0900)]
lowmem-monitor: Rename to lowmem-monitor-vmpressure

Since the current LMK monitoring method uses vmpressure(cgroup), clarify
it by adding 'vmpressure' to the file name and symbols.

Change-Id: I435c1acebe03d828da36a79980136ae5531c2f11
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
16 months agoconf: Add detailed explanations for process confs 64/295564/3
SangYoun Kwak [Tue, 11 Jul 2023 02:42:39 +0000 (11:42 +0900)]
conf: Add detailed explanations for process confs

Sections below needed to be explained more in detail:
 * In the 7.1 section:
    - ActionOnFailure (What it does)
    - OomScore (What are the predefined oom_score_adj values)
 * In the 8.1 section:
    - ACTION_ON_FAILURE (What it does)

Change-Id: I88a892586accec682a6be883e8ef16d31e0acebf
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
16 months agoFix the build error using gcc 13 30/295230/1 accepted/tizen/unified/20230706.152150 accepted/tizen/unified/dev/20230726.115715
SangYoun Kwak [Tue, 4 Jul 2023 04:43:08 +0000 (13:43 +0900)]
Fix the build error using gcc 13

In the function "resourced_proc_dump" from src/process/proc-main.c, it
concatenates directory and filename and writes it into a buffer using
snprintf.
In this situation, the gcc-13 compiler complains about: the length of
directory + filename can be greater than the size of the buffer, so
it should be handled.
It is already handled by checking the lengths of the directory &
filename but the compiler don't know about it.
To fix this situation, codes for checking the return value of snprintf
have been added.

Change-Id: I2776c5164c57323212e09377ca0eff1f55279ec6
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
17 months agooptimizer.conf: Change CPU RT throttling from 90% to 95% 75/293675/1 accepted/tizen/unified/20230613.170823
Unsung Lee [Tue, 28 Mar 2023 08:17:03 +0000 (17:17 +0900)]
optimizer.conf: Change CPU RT throttling from 90% to 95%

This patch includes
  - modification of CPU RT runtime

Increase the value from 90% to 95% to avoid throttling issue.

Change-Id: Ie80f32191a428b03e86606eb851ec5e9fb5ac836
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
18 months agoRename package, include and function name of system plugin 91/292091/3
SangYoun Kwak [Thu, 27 Apr 2023 05:48:45 +0000 (14:48 +0900)]
Rename package, include and function name of system plugin

Since the name of plugin has changed to syscommon-plugin/system-plugin,
the package name, include path and function name of plugin should be
changed.
 * in .spec file and CMakeLists.txt, package names are renamed:
      plugin-api-resourced -> libsyscommon-plugin-api-resourced
 * include path:
      plugin/plugin-resourced... -> syscommon-plugin-resourced...
      (The 'system' directory was included by the package config(.pc)
       file of plugins)
 * function name:
      plugin_resourced_memory_lmk_get_kill_candidates
      -> syscommon_plugin_resourced_memory_lmk_get_kill_candidates

Change-Id: Ie3b07e06e4d43536ac5ba2d92a2ef7ed2c1926b7
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agoRename plugins according to conf/resource/module 65/291665/1
Unsung Lee [Wed, 19 Apr 2023 04:53:27 +0000 (13:53 +0900)]
Rename plugins according to conf/resource/module

Renaming plugins in resourced-*.rpm package considering conf, resource, and module.
Plugin library name normally follows the rule below:
libplugin-resourced-<conf>-<resource>-<module>.so

conf: 'limiter' or 'optimizer' or 'monitor' or ''
resource: 'cpu' or 'memory' or ''

Change-Id: I14512fc0bb5f4a36a2a64a0b7f6c9da9e4e0bf46
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
19 months agoresourced.spec: revert "Undo modification of light package" 90/291590/2
Unsung Lee [Wed, 19 Apr 2023 01:43:24 +0000 (10:43 +0900)]
resourced.spec: revert "Undo modification of light package"

This reverts commit 6a493507d964637b89b5b6d69208189609de5e33.
This is because light package requires bin package, so even if the light package
is empty, there is no problem at all.

Change-Id: I133ec3bf45919d8e3d955ca17a6508a149e9a594
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
19 months agolowmem: Add MEM_LEVEL_LOW in lowmem_register_mem_level_controller() 31/291331/2
Unsung Lee [Thu, 13 Apr 2023 11:27:06 +0000 (20:27 +0900)]
lowmem: Add MEM_LEVEL_LOW in lowmem_register_mem_level_controller()

MEM_LEVEL_LOW is missing in lowmem_register_mem_level_controller(),
so currently controller of MEM_LEVEL_LOW is always NULL.
It causes SIGABRT when memory level is MEM_LEVEL_LOW.
To fix the problem, add MEM_LEVEL_LOW in lowmem_register_mem_level_controller()

Change-Id: I2bec09b0944f9f0b33c8fa5487b7204a6fc1a305
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
19 months agolowmem: Remove unused function 19/291119/4
SangYoun Kwak [Mon, 10 Apr 2023 06:18:04 +0000 (15:18 +0900)]
lowmem: Remove unused function

A function named 'is_dynamic_process_killer' is a static inline function
but it is not used anywhere.

Change-Id: I3a75011f3d49461b29c731fe326a2cac06b4878a
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem: Rename structure and functions of controller ops 18/291118/4
SangYoun Kwak [Mon, 10 Apr 2023 05:21:28 +0000 (14:21 +0900)]
lowmem: Rename structure and functions of controller ops

For unity, structure for storing governor/controller and related
functions to it were renamed.

Big rules:
 * initialize -> register
 * controller_ops -> mem_level_ops
 * action -> controller

Details are below:
 * Registering(init) functions
    * lowmem_initialize_... -> lowmem_register_...
    * lowmem_..._governor_ops -> lowmem_..._lmk_governor
    * lowmem_..._kill_candidates -> lowmem_..._lmk_controller
    * lowmem_..._controller_ops_... -> lowmem_..._mem_level_...
    * lowmem_..._action -> lowmem_..._controller
 * Structure
    * struct lowmem_controller_ops -> structure lowmem_mem_level_ops
    * action -> controller
      (member of lowmem_mem_level_ops)
    * lowmem_actions[MEM_LEVEL_MAX] -> mem_level_ops_list[MEM_LEVEL_MAX]
      (declaration of 'struct lowmem_mem_level_ops')
 * Governor function
    * oom_mem_governor -> mem_state_oom_governor
      (for unity, since dummy governor is mem_state_dummy_governor)

Change-Id: Ieb03b2ced71dd4826fbedc75cc333215b8d20193
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Move oom memory action from lowmem to controller 60/290660/17
SangYoun Kwak [Thu, 30 Mar 2023 08:21:27 +0000 (17:21 +0900)]
lowmem-controller: Move oom memory action from lowmem to controller

For modulization, oom memory action is moved from lowmem.c(core) to
lowmem-controller.c(controller) and this action will be assigned to
lowmem.c by the initializer of controller.

Change-Id: Ida6f53bb0af6a4d8ddf438ea14c939c732027bfb
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Move critical memory action from lowmem to controller 81/290581/18
SangYoun Kwak [Wed, 29 Mar 2023 06:48:42 +0000 (15:48 +0900)]
lowmem-controller: Move critical memory action from lowmem to controller

For modulization, critical memory action is moved from lowmem.c(core) to
lowmem-controller.c(controller) and this action will be assigned to
lowmem.c by the initializer of controller.

Change-Id: Ied7e33d21dd2f6055ad45cbd576521fa595d68a8
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Move low memory action from lowmem to controller 78/290578/18
SangYoun Kwak [Wed, 29 Mar 2023 06:25:01 +0000 (15:25 +0900)]
lowmem-controller: Move low memory action from lowmem to controller

For modulization, low memory action is moved from lowmem.c(core) to
lowmem-controller.c(controller) and this action will be assigned to
lowmem.c by the initializer of controller.

Functions which are related to swap_activate_act are moved to controller
as well.
register_notifier and unregister_notifier of
RESOURCED_NOTIFIER_MEM_CONTROL are moved to controller.

Change-Id: Icd0a0c78d660e773221426c585e41ee6c4449ed8
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Move medium memory action from lowmem to controller 75/290575/18
SangYoun Kwak [Wed, 29 Mar 2023 04:47:42 +0000 (13:47 +0900)]
lowmem-controller: Move medium memory action from lowmem to controller

For modulization, medium memory action is moved from lowmem.c(core) to
lowmem-controller.c(controller) and this action will be assigned to
lowmem.c by the initializer of controller.

The dedup_act is moved from lowmem.c to controller since it is an action
of medium memory. But this function is also an action of critical
memory. Thus, a part of critical memory actions was replaced with
lowmem_controller_ops.

Change-Id: I04663b904cfd8c1a18008bc45be74abb2cb6fb47
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Move high memory action from lowmem to controller 51/290351/18
SangYoun Kwak [Thu, 23 Mar 2023 10:38:01 +0000 (19:38 +0900)]
lowmem-controller: Move high memory action from lowmem to controller

For modulization, high memory action is moved from lowmem.c(core) to
lowmem-controller.c(controller) and this high memory action will be
assigned to lowmem.c by the initializer of controller.

Change-Id: Ic0f25890ff5372bfde5471bac27c441f19213960
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-controller: Modify controller as a module 40/290340/14
SangYoun Kwak [Thu, 23 Mar 2023 08:56:13 +0000 (17:56 +0900)]
lowmem-controller: Modify controller as a module

lowmem-controller was just a library and used by lowmem.c.
lowmem-controller is now a module which is registered to module manager
of resourced and initialized as an independent module.

Change-Id: I207fa4404e076f2555cc00730e79e7c540c898dc
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-monitor: Modify monitor as a module 61/290261/15
SangYoun Kwak [Wed, 22 Mar 2023 07:01:11 +0000 (16:01 +0900)]
lowmem-monitor: Modify monitor as a module

lowmem-monitor was just a library and initialized by lowmem.c using init
function.
lowmem-monitor is now a module which is registered to module manager of
resourced and initialized as an independent module.

lowmem-monitor calculates the memory state with the current available
memory and calls the lowmem_trigger_memory_state_action function with
memory state as a parameter.

lowmem_check_mem_state is a function that calculates memory state with
available memory. This function is used in oom action so it is located
in lowmem.c.

Change-Id: I9a29e7663a1f8a3ec7bf388f65c2cc97e87f5f48
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-governor: Move governor to plugin-backend 38/288338/26
SangYoun Kwak [Wed, 15 Feb 2023 09:04:33 +0000 (18:04 +0900)]
lowmem-governor: Move governor to plugin-backend

lowmem-governor was moved from lowmem to plugin-backend-resourced.
lowmem module can use governor through the functions of
plugin-resourced.
 * "plugin_resourced_memory_lmk_get_kill_candidates" is a function of
   the plugin-backend-resourced. Kill candidates can be retrieved using
   this function.
 * plugin-api-resourced was added to the BuildRequires.

Change-Id: I3d010ee15cf74447ce4a354808bb662674670972
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agolowmem-governor: Modify governor as a module 13/290613/10
SangYoun Kwak [Wed, 29 Mar 2023 10:23:37 +0000 (19:23 +0900)]
lowmem-governor: Modify governor as a module

Since the lowmem-governor is separated from lowmem.c in functional
manner, it is better to modulize the lowmem-governor to reduce
dependency.

lowmem.c uses lowmem_governor_ops to use governor and
lowmem_governor_ops is initialized by the lowmem-governor.
lowmem-governor.h is removed since it is not used directly.

Change-Id: I177d847dd8010a9c66f970f2b7aec53f06210740
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agomodule: Add a new entry to the priority of modules 71/290871/5
SangYoun Kwak [Tue, 4 Apr 2023 09:27:43 +0000 (18:27 +0900)]
module: Add a new entry to the priority of modules

A new entry, MODULE_PRIORITY_INITIAL is added to the enum of
module_priority.

This priority is added for the reason below:
 * Since the 'lowmem' module has MODULE_PRIORITY_EARLY as its priority,
   modules separated from 'lowmem' module should be initialized before
   MODULE_PRIORITY_HIGH but after MODULE_PRIORITY_EARLY.

Thus, the newly added priority MODULE_PRIORITY_INITIAL will be used by
modules which need to be initialized before all other modules but after
MODULE_PRIORITY_EARLY.

Change-Id: I07f31f05c5b8851de14a8461504ce04784b6722f
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agomodule: Refactor to use lists per priorities 63/290863/5
SangYoun Kwak [Tue, 4 Apr 2023 08:04:32 +0000 (17:04 +0900)]
module: Refactor to use lists per priorities

The 'module' feature in resourced manages the modules.
Previously, it used one list to manage modules, so it has to check the
all modules in list to find which was looking for.

In this patch, the 'module' uses separate lists per priorities.
Since the lists of modules are classified by its priority, modules with
specific priority can be found without iterating all lists.

Entries of the 'enum module_priority' are added to make it easy to
iterate through the priorities. (These values are not a priority value)
 * MODULE_PRIORITY_MIN = -1
 * MODULE_PRIORITY_MAX

Change-Id: I7d620d03f1245ed589ea3753a474895f8b232468
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
19 months agoresourced.spec: Undo modification of light package 09/290709/5
Unsung Lee [Fri, 31 Mar 2023 02:44:45 +0000 (11:44 +0900)]
resourced.spec: Undo modification of light package

This patch includes
  - Making a symbolic link from resourced to resourced.common
  - Adding a symbolic link in the light/bin package

This patch undo part of commit 82b39f9c50adcf1d3dbd3bcb90db9eb1e2fe6427.

Change-Id: I9ce3134a1ecc4861cae616fbe823c6fec98f89b9
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
20 months agolowmem-governor: Refactor to use the governor independently 75/288375/11 accepted/tizen/unified/20230310.062650
SangYoun Kwak [Thu, 16 Feb 2023 02:38:34 +0000 (11:38 +0900)]
lowmem-governor: Refactor to use the governor independently

The governor was modified to use it independently.
 * The lists of apps/procs will be created by lowmem.c, and it will be
   passed to the governor(lowmem_governor_get_kill_candidates).
 * The governor will make an array(candidates) of "filtered and sorted".
   It consists of "struct task_info *".
 * The "struct task_info" was modified to store some informations from
   proc_app_info for governor. Also the pointer of oom_killed from
   proc_app_info was added for the killer.
 * According to the above change, killer of lowmem-controller.c was
   modified.
 * Codes that depend on resourced was removed from governor to lowmem.c.

Change-Id: I1350f2b511d13e3dc7cb1b2efb9e37bc62381275
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agoprocess: Support fixed oom for app via Private config 10/288410/3 accepted/tizen/unified/20230220.174507
Unsung Lee [Thu, 16 Feb 2023 06:39:01 +0000 (15:39 +0900)]
process: Support fixed oom for app via Private config

This patch includes
  - Parsing config from Private Section (config-parser.c/h)
  - Elimination of old style fixed oom config (proc.conf, README)
  - Replacement of oom_fixed_app_list using fixed_app_list
    (a.k.a. an hashtable which manages all apps in the Private Section)

Difference between old style fixed oom config and the current one
  - old style: Add app name directly in the common configuration file
  - the current style: Add app name in the Private Section (xxx.conf.d/yyy.conf)
    That is, any developer can add new configurations with making
private conf files.

Change-Id: I367f6b6e0a7315c1e84b1b3871f6bb7bcc4a005a
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
21 months agocpu-sched: Fix memory leak when loading the cpu affinity config 99/288399/2
Unsung Lee [Thu, 16 Feb 2023 06:15:18 +0000 (15:15 +0900)]
cpu-sched: Fix memory leak when loading the cpu affinity config

'name' value will not be freed when 'name' string is different from
'ForegroundApps' (return without free issue)

Change-Id: I5a2ef92944f16f518e40acb9d43285d9df3db1c6
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
21 months agocpu-sched: Optimize search for cpu affinity fixed app 82/288182/5
Unsung Lee [Mon, 13 Feb 2023 06:11:30 +0000 (15:11 +0900)]
cpu-sched: Optimize search for cpu affinity fixed app

This patch includes
  - Change serach for fixed cpu affnity apps
(using the hashtable of apps by calling
'fixed_app_and_service_exist_check(name, APP_TYPE) func')

resourced manages all per-app configurations
('Private' section) using a hashtable.
On the other hand, resourced (cpu-sched) managed cpu affinity fixed apps
using a list instead of hashtable.
That is, when resourced (cpu-sched) detects app launch or app status change,
it searches the list linearly to know whether the app requires fixed cpu affinity or not.
(Linear search is normally slow when app list size is big)

resourced (cpu-shced) will
  - use the hastable of the per-app configuration when searching an app
  - use the legacy list to apply something to all fixed cpu affinity apps

Change-Id: I9340e1e7c6796463625660780b82f30c7a91a025
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
21 months agocpu-sched: Support cpu affinity pinning for App 94/288094/10
Unsung Lee [Thu, 9 Feb 2023 02:32:19 +0000 (11:32 +0900)]
cpu-sched: Support cpu affinity pinning for App

This patch includes:
  - Parse configuration(s) of per app cpu affinity (config-parser.c/h)
  - Update of README to reflect per App cpu affinity (README)
  - Register cpu affinity fixed app in the list (cpu-sched.c)
  - Read /sys/devices/system/cpu/online to know onlie cpuset and
reflect the current online cpuset info to cpuset cgroup

Per app cpu affinity pinning is different from foreground cpu affinity
  - foreground cpu affinity: pinning cpu affinity for foreground status apps
    * foreground app status detect -> pinning cpu affinity
  - per App cpu affinity: pinning cpu affinity for fixed apps
  regardless of app status
* app launch detect -> pinning cpu affinity

Change-Id: Ibef926c5b40049ce00b97cf2ba74f83784efdccd
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
21 months agocpu-sched: Refactor common cpu affinity code 58/287858/8
Unsung Lee [Tue, 7 Feb 2023 07:00:18 +0000 (16:00 +0900)]
cpu-sched: Refactor common cpu affinity code

This patch includes
  - Refactoring of cpu-sched related code
    * 'cpu_sched_parse_cpuset' and 'cpu_shced_new_core' functions are moved
  from cpu-sched.c to config-parser.c/h
    * Cpu common data structure (i.e., 'coreset' and 'core') is moved
  from cpu-sched.c to cpu-common.h
    * Comments are modified
  - Renaming variable
    * Data structure: 'core' -> 'cpu_info' and 'coreset' -> 'cpuset_info'
    * Element: 'id' -> 'cpu_id' and 'on' -> 'online'
    * Other: minor change (such as local variable)

Change-Id: I1d04ee9c33b93f5f82504815c4344c2d472e25b8
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
21 months agolowmem-controller: Split up lowmem-controller feature from lowmem module 13/287613/8 accepted/tizen/unified/20230207.165818
SangYoun Kwak [Wed, 1 Feb 2023 09:10:41 +0000 (18:10 +0900)]
lowmem-controller: Split up lowmem-controller feature from lowmem module

The lowmem-controller.c was created by extracting the killing-process
feature from lowmem.c.
    * Newly created: lowmem-controller.c, lowmem-controller.h
    * "lowmem_controller_kill_candidates" function of
      lowmem-controller.c kills procs/apps from candidates list provided
      by the core(lowmem.c).
    * Symbols used only in lowmem-controller.c were moved from lowmem.c
      to lowmem-controller.c.
    * Symbols used both lowmem.c and lowmem-controller.c were moved from
      lowmem.c to lowmem.h.

Change-Id: I8bd0f65acc9df771385c1839096f1283424ce2a5
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agolowmem-monitor: Split up lowmem-monitor feature from lowmem module 93/287593/8
SangYoun Kwak [Wed, 1 Feb 2023 05:27:53 +0000 (14:27 +0900)]
lowmem-monitor: Split up lowmem-monitor feature from lowmem module

The lowmem-monitor.c was created by extracting the monitor feature from
lowmem.c. (The handler of lowmem pressure)
    * Newly created: lowmem-monitor.c, lowmem-monitor.h
    * "lowmem_monitor_pressure_initialize" function of
      lowmem-monitor.c initializes the handler for lowmem pressure.
    * Symbols used only in lowmem-monitor.c were moved from lowmem.c to
      lowmem-monitor.c.
    * The functions used in both lowmem-monitor.c and lowmem.c remain in
      lowmem.c and were changed to 'non-static' functions.

Change-Id: I26bad0c629b74e8261393d4f7a1d5ce60a9215ab
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agolowmem: Split up governor from lowmem module 29/286529/6 accepted/tizen/unified/20230131.162139
SangYoun Kwak [Mon, 9 Jan 2023 08:28:23 +0000 (17:28 +0900)]
lowmem: Split up governor from lowmem module

The lowmem-governor.c was created by extracting the
"sorting out kill candidate" functionality from lowmem.c.
    * Newly created: lowmem-governor.c, lowmem-governor.h
    * "lowmem_governor_get_kill_candidates" function from
      lowmem-governor.c gets a list of procs/apps and returns a sorted
      list of kill candidates.
    * Functions that only used in lowmem-governor.c were moved into
      lowmem-governor.c from lowmem.c.

Change-Id: Ieba1612c040a9891e2f87f44e6bd1a34251f05ea
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agoprocess: Add proc.conf to config rpm 47/287447/2
SangYoun Kwak [Mon, 30 Jan 2023 05:44:34 +0000 (14:44 +0900)]
process: Add proc.conf to config rpm

"proc.conf" file was added to config rpm, which means "proc.conf" file
can be installed when the platform image is created.

Change-Id: Ided05b12fe05b7e8efd0d36d3951b220b07c486b
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agoresource-limiter: Remove unused include 52/287352/1 accepted/tizen/unified/20230130.165633
SangYoun Kwak [Fri, 27 Jan 2023 04:49:49 +0000 (13:49 +0900)]
resource-limiter: Remove unused include

The "file-helper.h" was not used but included in the source code of
lowmem module.

Change-Id: I1d5149b415cb48d6dd43f8c6c02c1b058aa83322
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agoresource-monitor: Remove unused includes 39/287339/2
SangYoun Kwak [Fri, 27 Jan 2023 02:20:47 +0000 (11:20 +0900)]
resource-monitor: Remove unused includes

Some unused includings in the source file of resource-monitor were
removed.

Change-Id: I2584f083cf00482d3eef121afe6006f13112618b
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
21 months agoprocess: Remove unused includes 38/287338/2
SangYoun Kwak [Fri, 27 Jan 2023 02:14:44 +0000 (11:14 +0900)]
process: Remove unused includes

Some unused includings in the source files of process were removed.

Change-Id: I411e9486b941b533ef057fdfde3aad1294c7a916
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>