linux-s390.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] net/smc: increase SMC_WR_BUF_CNT
@ 2024-10-25  7:46 Wenjia Zhang
  2024-10-25 13:56 ` Simon Horman
  2024-10-25 23:58 ` Dust Li
  0 siblings, 2 replies; 7+ messages in thread
From: Wenjia Zhang @ 2024-10-25  7:46 UTC (permalink / raw)
  To: Wen Gu, D. Wythe, Tony Lu, David Miller, Jakub Kicinski,
	Eric Dumazet, Paolo Abeni
  Cc: netdev, linux-s390, Heiko Carstens, Jan Karcher, Gerd Bayer,
	Alexandra Winter, Halil Pasic, Nils Hoppmann, Niklas Schnell,
	Thorsten Winkler, Karsten Graul, Stefan Raspl, Wenjia Zhang

From: Halil Pasic <pasic@linux.ibm.com>

The current value of SMC_WR_BUF_CNT is 16 which leads to heavy
contention on the wr_tx_wait workqueue of the SMC-R linkgroup and its
spinlock when many connections are  competing for the buffer. Currently
up to 256 connections per linkgroup are supported.

To make things worse when finally a buffer becomes available and
smc_wr_tx_put_slot() signals the linkgroup's wr_tx_wait wq, because
WQ_FLAG_EXCLUSIVE is not used all the waiters get woken up, most of the
time a single one can proceed, and the rest is contending on the
spinlock of the wq to go to sleep again.

For some reason include/linux/wait.h does not offer a top level wrapper
macro for wait_event with interruptible, exclusive and timeout. I did
not spend too many cycles on thinking if that is even a combination that
makes sense (on the quick I don't see why not) and conversely I
refrained from making an attempt to accomplish the interruptible,
exclusive and timeout combo by using the abstraction-wise lower
level __wait_event interface.

To alleviate the tx performance bottleneck and the CPU overhead due to
the spinlock contention, let us increase SMC_WR_BUF_CNT to 256.

Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Reported-by: Nils Hoppmann <niho@linux.ibm.com>
Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
Signed-off-by: Wenjia Zhang <wenjia@linux.ibm.com>
---
 net/smc/smc_wr.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/smc/smc_wr.h b/net/smc/smc_wr.h
index f3008dda222a..81e772e241f3 100644
--- a/net/smc/smc_wr.h
+++ b/net/smc/smc_wr.h
@@ -19,7 +19,7 @@
 #include "smc.h"
 #include "smc_core.h"
 
-#define SMC_WR_BUF_CNT 16	/* # of ctrl buffers per link */
+#define SMC_WR_BUF_CNT 256	/* # of ctrl buffers per link */
 
 #define SMC_WR_TX_WAIT_FREE_SLOT_TIME	(10 * HZ)
 
-- 
2.43.0


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

end of thread, other threads:[~2024-11-05 14:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-25  7:46 [PATCH net-next] net/smc: increase SMC_WR_BUF_CNT Wenjia Zhang
2024-10-25 13:56 ` Simon Horman
2024-10-25 23:58 ` Dust Li
2024-10-31 12:30   ` Halil Pasic
2024-11-04 16:42     ` Halil Pasic
2024-11-05 10:16       ` Paolo Abeni
2024-11-05 14:34       ` Dust Li

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).