[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