mptcp.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM
@ 2022-06-30 22:17 Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 1/4] mptcp: never fetch fwd memory from the subflow Mat Martineau
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Mat Martineau @ 2022-06-30 22:17 UTC (permalink / raw)
  To: netdev
  Cc: Mat Martineau, davem, kuba, pabeni, edumazet, matthieu.baerts, mptcp

In the "net: reduce tcp_memory_allocated inflation" series (merge commit
e10b02ee5b6c), Eric Dumazet noted that "Removal of SK_RECLAIM_CHUNK and
SK_RECLAIM_THRESHOLD is left to MPTCP maintainers as a follow up."

Patches 1-3 align MPTCP with the above TCP changes to forward memory
allocation, reclaim, and memory scheduling.

Patch 4 removes the SK_RECLAIM_* macros as Eric requested.


Paolo Abeni (4):
  mptcp: never fetch fwd memory from the subflow
  mptcp: drop SK_RECLAIM_* macros
  mptcp: refine memory scheduling
  net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK

 include/net/sock.h   |  5 -----
 net/mptcp/protocol.c | 49 +++++++-------------------------------------
 2 files changed, 7 insertions(+), 47 deletions(-)


base-commit: b7d78b46d5e8dc77c656c13885d31e931923b915
-- 
2.37.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next 1/4] mptcp: never fetch fwd memory from the subflow
  2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
@ 2022-06-30 22:17 ` Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 2/4] mptcp: drop SK_RECLAIM_* macros Mat Martineau
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2022-06-30 22:17 UTC (permalink / raw)
  To: netdev
  Cc: Paolo Abeni, davem, kuba, edumazet, matthieu.baerts, mptcp,
	Mat Martineau

From: Paolo Abeni <pabeni@redhat.com>

The memory accounting is broken in such exceptional code
path, and after commit 4890b686f408 ("net: keep sk->sk_forward_alloc
as small as possible") we can't find much help there.

Drop the broken code.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
 net/mptcp/protocol.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index e0fb9f96c45c..c67c6fc1fe04 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -328,15 +328,10 @@ static bool mptcp_rmem_schedule(struct sock *sk, struct sock *ssk, int size)
 
 	amt = sk_mem_pages(size);
 	amount = amt << PAGE_SHIFT;
-	msk->rmem_fwd_alloc += amount;
-	if (!__sk_mem_raise_allocated(sk, size, amt, SK_MEM_RECV)) {
-		if (ssk->sk_forward_alloc < amount) {
-			msk->rmem_fwd_alloc -= amount;
-			return false;
-		}
+	if (!__sk_mem_raise_allocated(sk, size, amt, SK_MEM_RECV))
+		return false;
 
-		ssk->sk_forward_alloc -= amount;
-	}
+	msk->rmem_fwd_alloc += amount;
 	return true;
 }
 
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 2/4] mptcp: drop SK_RECLAIM_* macros
  2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 1/4] mptcp: never fetch fwd memory from the subflow Mat Martineau
@ 2022-06-30 22:17 ` Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 3/4] mptcp: refine memory scheduling Mat Martineau
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2022-06-30 22:17 UTC (permalink / raw)
  To: netdev
  Cc: Paolo Abeni, davem, kuba, edumazet, matthieu.baerts, mptcp,
	Mat Martineau

From: Paolo Abeni <pabeni@redhat.com>

After commit 4890b686f408 ("net: keep sk->sk_forward_alloc as small as
possible"), the MPTCP protocol is the last SK_RECLAIM_CHUNK and
SK_RECLAIM_THRESHOLD users.

Update the MPTCP reclaim schema to match the core/TCP one and drop the
mentioned macros. This additionally clean the MPTCP code a bit.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
 net/mptcp/protocol.c | 35 ++---------------------------------
 1 file changed, 2 insertions(+), 33 deletions(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index c67c6fc1fe04..e89a0124023f 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -181,8 +181,8 @@ static void mptcp_rmem_uncharge(struct sock *sk, int size)
 	reclaimable = msk->rmem_fwd_alloc - sk_unused_reserved_mem(sk);
 
 	/* see sk_mem_uncharge() for the rationale behind the following schema */
-	if (unlikely(reclaimable >= SK_RECLAIM_THRESHOLD))
-		__mptcp_rmem_reclaim(sk, SK_RECLAIM_CHUNK);
+	if (unlikely(reclaimable >= PAGE_SIZE))
+		__mptcp_rmem_reclaim(sk, reclaimable);
 }
 
 static void mptcp_rfree(struct sk_buff *skb)
@@ -961,25 +961,6 @@ static bool mptcp_frag_can_collapse_to(const struct mptcp_sock *msk,
 		df->data_seq + df->data_len == msk->write_seq;
 }
 
-static void __mptcp_mem_reclaim_partial(struct sock *sk)
-{
-	int reclaimable = mptcp_sk(sk)->rmem_fwd_alloc - sk_unused_reserved_mem(sk);
-
-	lockdep_assert_held_once(&sk->sk_lock.slock);
-
-	if (reclaimable > (int)PAGE_SIZE)
-		__mptcp_rmem_reclaim(sk, reclaimable - 1);
-
-	sk_mem_reclaim(sk);
-}
-
-static void mptcp_mem_reclaim_partial(struct sock *sk)
-{
-	mptcp_data_lock(sk);
-	__mptcp_mem_reclaim_partial(sk);
-	mptcp_data_unlock(sk);
-}
-
 static void dfrag_uncharge(struct sock *sk, int len)
 {
 	sk_mem_uncharge(sk, len);
@@ -999,7 +980,6 @@ static void __mptcp_clean_una(struct sock *sk)
 {
 	struct mptcp_sock *msk = mptcp_sk(sk);
 	struct mptcp_data_frag *dtmp, *dfrag;
-	bool cleaned = false;
 	u64 snd_una;
 
 	/* on fallback we just need to ignore snd_una, as this is really
@@ -1022,7 +1002,6 @@ static void __mptcp_clean_una(struct sock *sk)
 		}
 
 		dfrag_clear(sk, dfrag);
-		cleaned = true;
 	}
 
 	dfrag = mptcp_rtx_head(sk);
@@ -1044,7 +1023,6 @@ static void __mptcp_clean_una(struct sock *sk)
 		dfrag->already_sent -= delta;
 
 		dfrag_uncharge(sk, delta);
-		cleaned = true;
 	}
 
 	/* all retransmitted data acked, recovery completed */
@@ -1052,9 +1030,6 @@ static void __mptcp_clean_una(struct sock *sk)
 		msk->recovery = false;
 
 out:
-	if (cleaned && tcp_under_memory_pressure(sk))
-		__mptcp_mem_reclaim_partial(sk);
-
 	if (snd_una == READ_ONCE(msk->snd_nxt) &&
 	    snd_una == READ_ONCE(msk->write_seq)) {
 		if (mptcp_timer_pending(sk) && !mptcp_data_fin_enabled(msk))
@@ -1206,12 +1181,6 @@ static struct sk_buff *mptcp_alloc_tx_skb(struct sock *sk, struct sock *ssk, boo
 {
 	gfp_t gfp = data_lock_held ? GFP_ATOMIC : sk->sk_allocation;
 
-	if (unlikely(tcp_under_memory_pressure(sk))) {
-		if (data_lock_held)
-			__mptcp_mem_reclaim_partial(sk);
-		else
-			mptcp_mem_reclaim_partial(sk);
-	}
 	return __mptcp_alloc_tx_skb(sk, ssk, gfp);
 }
 
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 3/4] mptcp: refine memory scheduling
  2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 1/4] mptcp: never fetch fwd memory from the subflow Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 2/4] mptcp: drop SK_RECLAIM_* macros Mat Martineau
@ 2022-06-30 22:17 ` Mat Martineau
  2022-06-30 22:17 ` [PATCH net-next 4/4] net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK Mat Martineau
  2022-07-01 12:40 ` [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2022-06-30 22:17 UTC (permalink / raw)
  To: netdev
  Cc: Paolo Abeni, davem, kuba, edumazet, matthieu.baerts, mptcp,
	Mat Martineau

From: Paolo Abeni <pabeni@redhat.com>

Similar to commit 7c80b038d23e ("net: fix sk_wmem_schedule() and
sk_rmem_schedule() errors"), let the MPTCP receive path schedule
exactly the required amount of memory.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
 net/mptcp/protocol.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index e89a0124023f..91628dbe5a2d 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -323,9 +323,10 @@ static bool mptcp_rmem_schedule(struct sock *sk, struct sock *ssk, int size)
 	struct mptcp_sock *msk = mptcp_sk(sk);
 	int amt, amount;
 
-	if (size < msk->rmem_fwd_alloc)
+	if (size <= msk->rmem_fwd_alloc)
 		return true;
 
+	size -= msk->rmem_fwd_alloc;
 	amt = sk_mem_pages(size);
 	amount = amt << PAGE_SHIFT;
 	if (!__sk_mem_raise_allocated(sk, size, amt, SK_MEM_RECV))
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next 4/4] net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK
  2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
                   ` (2 preceding siblings ...)
  2022-06-30 22:17 ` [PATCH net-next 3/4] mptcp: refine memory scheduling Mat Martineau
@ 2022-06-30 22:17 ` Mat Martineau
  2022-07-01 12:40 ` [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: Mat Martineau @ 2022-06-30 22:17 UTC (permalink / raw)
  To: netdev
  Cc: Paolo Abeni, davem, kuba, edumazet, matthieu.baerts, mptcp,
	Mat Martineau

From: Paolo Abeni <pabeni@redhat.com>

There are no more users for the mentioned macros, just
drop them.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
 include/net/sock.h | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/include/net/sock.h b/include/net/sock.h
index 40bbd0e8925b..0dd43c3df49b 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1619,11 +1619,6 @@ static inline void sk_mem_charge(struct sock *sk, int size)
 	sk->sk_forward_alloc -= size;
 }
 
-/* the following macros control memory reclaiming in mptcp_rmem_uncharge()
- */
-#define SK_RECLAIM_THRESHOLD	(1 << 21)
-#define SK_RECLAIM_CHUNK	(1 << 20)
-
 static inline void sk_mem_uncharge(struct sock *sk, int size)
 {
 	if (!sk_has_account(sk))
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM
  2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
                   ` (3 preceding siblings ...)
  2022-06-30 22:17 ` [PATCH net-next 4/4] net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK Mat Martineau
@ 2022-07-01 12:40 ` patchwork-bot+netdevbpf
  4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-07-01 12:40 UTC (permalink / raw)
  To: Mat Martineau
  Cc: netdev, davem, kuba, pabeni, edumazet, matthieu.baerts, mptcp

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Thu, 30 Jun 2022 15:17:53 -0700 you wrote:
> In the "net: reduce tcp_memory_allocated inflation" series (merge commit
> e10b02ee5b6c), Eric Dumazet noted that "Removal of SK_RECLAIM_CHUNK and
> SK_RECLAIM_THRESHOLD is left to MPTCP maintainers as a follow up."
> 
> Patches 1-3 align MPTCP with the above TCP changes to forward memory
> allocation, reclaim, and memory scheduling.
> 
> [...]

Here is the summary with links:
  - [net-next,1/4] mptcp: never fetch fwd memory from the subflow
    https://git.kernel.org/netdev/net-next/c/4aaa1685f750
  - [net-next,2/4] mptcp: drop SK_RECLAIM_* macros
    https://git.kernel.org/netdev/net-next/c/d24141fe7b48
  - [net-next,3/4] mptcp: refine memory scheduling
    https://git.kernel.org/netdev/net-next/c/69d93daec026
  - [net-next,4/4] net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK
    https://git.kernel.org/netdev/net-next/c/e918c137db40

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] 6+ messages in thread

end of thread, other threads:[~2022-07-01 12:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-30 22:17 [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM Mat Martineau
2022-06-30 22:17 ` [PATCH net-next 1/4] mptcp: never fetch fwd memory from the subflow Mat Martineau
2022-06-30 22:17 ` [PATCH net-next 2/4] mptcp: drop SK_RECLAIM_* macros Mat Martineau
2022-06-30 22:17 ` [PATCH net-next 3/4] mptcp: refine memory scheduling Mat Martineau
2022-06-30 22:17 ` [PATCH net-next 4/4] net: remove SK_RECLAIM_THRESHOLD and SK_RECLAIM_CHUNK Mat Martineau
2022-07-01 12:40 ` [PATCH net-next 0/4] mptcp: Updates for mem scheduling and SK_RECLAIM 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).