* [PATCH net] sock: Fix misuse of sk_under_memory_pressure()
@ 2023-08-16 9:12 Abel Wu
2023-08-16 16:23 ` Shakeel Butt
2023-08-17 19:00 ` patchwork-bot+netdevbpf
0 siblings, 2 replies; 3+ messages in thread
From: Abel Wu @ 2023-08-16 9:12 UTC (permalink / raw)
To: Shakeel Butt, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Kuniyuki Iwashima, Alexei Starovoitov,
Martin KaFai Lau, Breno Leitao, Alexander Mikhalitsyn,
David Howells, Jason Xing, Glauber Costa, KAMEZAWA Hiroyuki
Cc: Abel Wu, open list:NETWORKING [GENERAL], open list
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]
So the conditions of leaving global pressure are inconstant, which
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@bytedance.com>
---
include/net/sock.h | 6 ++++++
net/core/sock.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/net/sock.h b/include/net/sock.h
index 2eb916d1ff64..e3d987b2ef12 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1420,6 +1420,12 @@ static inline bool sk_has_memory_pressure(const struct sock *sk)
return sk->sk_prot->memory_pressure != NULL;
}
+static inline bool sk_under_global_memory_pressure(const struct sock *sk)
+{
+ return sk->sk_prot->memory_pressure &&
+ !!*sk->sk_prot->memory_pressure;
+}
+
static inline bool sk_under_memory_pressure(const struct sock *sk)
{
if (!sk->sk_prot->memory_pressure)
diff --git a/net/core/sock.c b/net/core/sock.c
index 732fc37a4771..c9cffb7acbea 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -3159,7 +3159,7 @@ void __sk_mem_reduce_allocated(struct sock *sk, int amount)
if (mem_cgroup_sockets_enabled && sk->sk_memcg)
mem_cgroup_uncharge_skmem(sk->sk_memcg, amount);
- if (sk_under_memory_pressure(sk) &&
+ if (sk_under_global_memory_pressure(sk) &&
(sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0)))
sk_leave_memory_pressure(sk);
}
--
2.37.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net] sock: Fix misuse of sk_under_memory_pressure()
2023-08-16 9:12 [PATCH net] sock: Fix misuse of sk_under_memory_pressure() Abel Wu
@ 2023-08-16 16:23 ` Shakeel Butt
2023-08-17 19:00 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: Shakeel Butt @ 2023-08-16 16:23 UTC (permalink / raw)
To: Abel Wu
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Kuniyuki Iwashima, Alexei Starovoitov, Martin KaFai Lau,
Breno Leitao, Alexander Mikhalitsyn, David Howells, Jason Xing,
Glauber Costa, KAMEZAWA Hiroyuki, open list:NETWORKING [GENERAL],
open list
On Wed, Aug 16, 2023 at 2:12 AM Abel Wu <wuyun.abel@bytedance.com> 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]
>
> So the conditions of leaving global pressure are inconstant, which
> 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@bytedance.com>
Acked-by: Shakeel Butt <shakeelb@google.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net] sock: Fix misuse of sk_under_memory_pressure()
2023-08-16 9:12 [PATCH net] sock: Fix misuse of sk_under_memory_pressure() Abel Wu
2023-08-16 16:23 ` Shakeel Butt
@ 2023-08-17 19:00 ` patchwork-bot+netdevbpf
1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-08-17 19:00 UTC (permalink / raw)
To: Abel Wu
Cc: shakeelb, davem, edumazet, kuba, pabeni, kuniyu, ast, martin.lau,
leitao, alexander, dhowells, kernelxing, glommer, kamezawa.hiroyu,
netdev, linux-kernel
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 16 Aug 2023 17:12:22 +0800 you 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]
>
> [...]
Here is the summary with links:
- [net] sock: Fix misuse of sk_under_memory_pressure()
https://git.kernel.org/netdev/net/c/2d0c88e84e48
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-08-17 19:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-16 9:12 [PATCH net] sock: Fix misuse of sk_under_memory_pressure() Abel Wu
2023-08-16 16:23 ` Shakeel Butt
2023-08-17 19:00 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).