[PATCH 4/4] mm: fix oom_kill event handling
Tim Gardner
tim.gardner at canonical.com
Fri Apr 30 11:35:07 UTC 2021
On 4/30/21 1:36 AM, Krzysztof Kozlowski wrote:
> On 29/04/2021 20:54, Tim Gardner wrote:
>> From: Roman Gushchin <guro at fb.com>
>>
>> BugLink: https://bugs.launchpad.net/bugs/1926081
>>
>> Commit e27be240df53 ("mm: memcg: make sure memory.events is uptodate
>> when waking pollers") converted most of memcg event counters to
>> per-memcg atomics, which made them less confusing for a user. The
>> "oom_kill" counter remained untouched, so now it behaves differently
>> than other counters (including "oom"). This adds nothing but confusion.
>>
>> Let's fix this by adding the MEMCG_OOM_KILL event, and follow the
>> MEMCG_OOM approach.
>>
>> This also removes a hack from count_memcg_event_mm(), introduced earlier
>> specially for the OOM_KILL counter.
>>
>> [akpm at linux-foundation.org: fix for droppage of memcg-replace-mm-owner-with-mm-memcg.patch]
>> Link: http://lkml.kernel.org/r/20180508124637.29984-1-guro@fb.com
>> Signed-off-by: Roman Gushchin <guro at fb.com>
>> Acked-by: Konstantin Khlebnikov <khlebnikov at yandex-team.ru>
>> Acked-by: Johannes Weiner <hannes at cmpxchg.org>
>> Acked-by: Michal Hocko <mhocko at suse.com>
>> Cc: Vladimir Davydov <vdavydov.dev at gmail.com>
>> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
>> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
>> (backported from commit fe6bdfc8e1e131720abbe77a2eb990c94c9024cb)
>> [rtg - context adjustments]
>> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
>> ---
>> include/linux/memcontrol.h | 26 ++++++++++++++++++++++----
>> mm/memcontrol.c | 6 ++++--
>> mm/oom_kill.c | 2 +-
>> 3 files changed, 27 insertions(+), 7 deletions(-)
>>
>> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
>> index c7876eadd206d..b5cd86e320ff3 100644
>> --- a/include/linux/memcontrol.h
>> +++ b/include/linux/memcontrol.h
>> @@ -53,6 +53,7 @@ enum memcg_memory_event {
>> MEMCG_HIGH,
>> MEMCG_MAX,
>> MEMCG_OOM,
>> + MEMCG_OOM_KILL,
>> MEMCG_NR_MEMORY_EVENTS,
>> };
>>
>> @@ -706,11 +707,8 @@ static inline void count_memcg_event_mm(struct mm_struct *mm,
>>
>> rcu_read_lock();
>> memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
>> - if (likely(memcg)) {
>> + if (likely(memcg))
>> count_memcg_events(memcg, idx, 1);
>> - if (idx == OOM_KILL)
>> - cgroup_file_notify(&memcg->events_file);
>> - }
>> rcu_read_unlock();
>> }
>>
>> @@ -721,6 +719,21 @@ static inline void memcg_memory_event(struct mem_cgroup *memcg,
>> cgroup_file_notify(&memcg->events_file);
>> }
>>
>> +static inline void memcg_memory_event_mm(struct mm_struct *mm,
>> + enum memcg_memory_event event)
>> +{
>> + struct mem_cgroup *memcg;
>> +
>> + if (mem_cgroup_disabled())
>> + return;
>> +
>> + rcu_read_lock();
>> + memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
>> + if (likely(memcg))
>> + memcg_memory_event(memcg, event);
>> + rcu_read_unlock();
>> +}
>
> I cannot find memcg_memory_event() in bionic/linux. Does this compile?
>
> Best regards,
> Krzysztof
>
It must have. I made a test kernel.
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1926081/comments/22
gloin:for-review/linux.git nr_writeback-memory-leak-LP#1926081
rtg
-----------
Tim Gardner
Canonical, Inc
More information about the kernel-team
mailing list