Re: Re: [PATCH net-next v5 3/3] sock: Fix misuse of sk_under_memory_pressure()
From: Abel Wu <hidden>
Date: 2023-06-05 08:35:03
Also in:
cgroups, lkml
On 6/3/23 4:53 AM, Shakeel Butt wrote:
On Fri, Jun 02, 2023 at 04:11:35PM +0800, Abel Wu wrote:quoted
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.
quoted
So the conditions of leaving global pressure are inconstant, which*inconsistent
Will fix in next version.
quoted
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 <redacted>This patch looks good.
Thanks! Abel