From: SangYoun Kwak Date: Thu, 4 Apr 2024 06:38:53 +0000 (+0900) Subject: lowmem: Modify to move cgroup when pid is child X-Git-Tag: accepted/tizen/unified/20240408.160614^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8d05e770e94d2af3bbc6dbd65363531e61a117c;p=platform%2Fcore%2Fsystem%2Fresourced.git lowmem: Modify to move cgroup when pid is child Previously, if pid is child's pid and try to move cgroup of it, resourced does nothing because child pids should be moved with their parent process. In the case of Android app, its pid should be grouped with its corresponding dummy app(Tizen app, android-launcher), but it is treated as a child of dummy app, resourced does nothing and it is not registered to the cgroup's tasks. To fix this issue, modify to call lowmem_limit_move_cgroup() to write all pids of parent process even if the target(to move cgroup) is child pid. Change-Id: I0fd516025e2f0dddd4571f5325c54ef44296bc1c Signed-off-by: SangYoun Kwak --- diff --git a/src/resource-limiter/memory/lowmem-controller.c b/src/resource-limiter/memory/lowmem-controller.c index ecfcf3e9..379257a2 100644 --- a/src/resource-limiter/memory/lowmem-controller.c +++ b/src/resource-limiter/memory/lowmem-controller.c @@ -358,8 +358,27 @@ static void lowmem_move_memcgroup(int pid, int next_oom_score_adj, struct proc_a switch (next_memcg_idx) { case MEMCG_ROOT: case MEMCG_BACKGROUND_LRU: - if (pai->memory.use_mem_limit) + if (pai->memory.use_mem_limit) { + /** + * FIXME: + * Calling lowmem_limit_move_cgroup will write + * all pids in the pai to its corresponding + * cgroup node. + * Normally, it has no effect but can fix + * abnormal situation such as 'some pids are + * added to the pai but not appeared in the + * cgroup'. + * This situation can be generated when the + * "AppGroup" signal is sent from the AMD but + * the child pid to group with is not managed by + * the resourced. + */ + int ret = lowmem_limit_move_cgroup(pai); + assert(ret != RESOURCED_ERROR_NO_DATA); + if (ret != RESOURCED_ERROR_NONE) + _E("Failed to move cgroup for child pid(%d)", pid); return; + } break; case MEMCG_BACKGROUND_MRU: break;