[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c35446b4-5e7f-3c3c-6d42-80e9721e5169@bytedance.com>
Date: Mon, 5 Jun 2023 16:34:21 +0800
From: Abel Wu <wuyun.abel@...edance.com>
To: Shakeel Butt <shakeelb@...gle.com>
Cc: "David S . Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, Johannes Weiner <hannes@...xchg.org>,
Michal Hocko <mhocko@...nel.org>, Vladimir Davydov <vdavydov.dev@...il.com>,
Muchun Song <muchun.song@...ux.dev>, Simon Horman
<simon.horman@...igine.com>, netdev@...r.kernel.org, linux-mm@...ck.org,
cgroups@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: Re: [PATCH net-next v5 3/3] sock: Fix misuse of
sk_under_memory_pressure()
On 6/3/23 4:53 AM, Shakeel Butt wrote:
> On Fri, Jun 02, 2023 at 04:11:35PM +0800, Abel Wu wrote:
>> The status of global socket memory pressure is updated when:
>>
>> a) __sk_mem_raise_allocated():
>>
>> enter: sk_memory_allocated(sk) > sysctl_mem[1]
>> leave: sk_memory_allocated(sk) <= sysctl_mem[0]
>>
>> b) __sk_mem_reduce_allocated():
>>
>> leave: sk_under_memory_pressure(sk) &&
>> sk_memory_allocated(sk) < sysctl_mem[0]
>
> There is also sk_page_frag_refill() where we can enter the global
> protocol memory pressure on actual global memory pressure i.e. page
> allocation failed. However this might be irrelevant from this patch's
> perspective as the focus is on the leaving part.
Leaving prot pressure or not under actual global vm pressure is
something similar to what you concerned last time (prot & memcg
is now intermingled), as this will mix prot & global together.
To decouple global info from prot level pressure, a new variable
might be needed. But I doubt the necessity as this seems to be a
rare case but a constant overhead on net core path to check the
global status (although can be relieved by static key).
And after a second thought, failing in skb_page_frag_refill()
doesn't necessarily mean there is global memory pressure since
it can due to the mpol/memset of the current task.
>
>>
>> So the conditions of leaving global pressure are inconstant, which
>
> *inconsistent
Will fix in next version.
>
>> may lead to the situation that one pressured net-memcg prevents the
>> global pressure from being cleared when there is indeed no global
>> pressure, thus the global constrains are still in effect unexpectedly
>> on the other sockets.
>>
>> This patch fixes this by ignoring the net-memcg's pressure when
>> deciding whether should leave global memory pressure.
>>
>> Fixes: e1aab161e013 ("socket: initial cgroup code.")
>> Signed-off-by: Abel Wu <wuyun.abel@...edance.com>
>
> This patch looks good.
Thanks!
Abel
Powered by blists - more mailing lists