From: "D. Wythe" <alibuda@linux.alibaba.com>
To: kgraul@linux.ibm.com, wenjia@linux.ibm.com
Cc: kuba@kernel.org, davem@davemloft.net, netdev@vger.kernel.org,
linux-s390@vger.kernel.org, linux-rdma@vger.kernel.org,
"D. Wythe" <alibuda@linux.alibaba.com>
Subject: [PATCH net-next v2 00/10] optimize the parallelism of SMC-R connections
Date: Fri, 26 Aug 2022 17:51:27 +0800 [thread overview]
Message-ID: <cover.1661407821.git.alibuda@linux.alibaba.com> (raw)
From: "D. Wythe" <alibuda@linux.alibaba.com>
This patch set attempts to optimize the parallelism of SMC-R connections,
mainly to reduce unnecessary blocking on locks, and to fix exceptions that
occur after thoses optimization.
According to Off-CPU graph, SMC worker's off-CPU as that:
smc_close_passive_work (1.09%)
smcr_buf_unuse (1.08%)
smc_llc_flow_initiate (1.02%)
smc_listen_work (48.17%)
__mutex_lock.isra.11 (47.96%)
An ideal SMC-R connection process should only block on the IO events
of the network, but it's quite clear that the SMC-R connection now is
queued on the lock most of the time.
The goal of this patchset is to achieve our ideal situation where
network IO events are blocked for the majority of the connection lifetime.
There are three big locks here:
1. smc_client_lgr_pending & smc_server_lgr_pending
2. llc_conf_mutex
3. rmbs_lock & sndbufs_lock
And an implementation issue:
1. confirm/delete rkey msg can't be sent concurrently while
protocol allows indeed.
Unfortunately,The above problems together affect the parallelism of
SMC-R connection. If any of them are not solved. our goal cannot
be achieved.
After this patch set, we can get a quite ideal off-CPU graph as
following:
smc_close_passive_work (41.58%)
smcr_buf_unuse (41.57%)
smc_llc_do_delete_rkey (41.57%)
smc_listen_work (39.10%)
smc_clc_wait_msg (13.18%)
tcp_recvmsg_locked (13.18)
smc_listen_find_device (25.87%)
smcr_lgr_reg_rmbs (25.87%)
smc_llc_do_confirm_rkey (25.87%)
We can see that most of the waiting times are waiting for network IO
events. This also has a certain performance improvement on our
short-lived conenction wrk/nginx benchmark test:
+--------------+------+------+-------+--------+------+--------+
|conns/qps |c4 | c8 | c16 | c32 | c64 | c200 |
+--------------+------+------+-------+--------+------+--------+
|SMC-R before |9.7k | 10k | 10k | 9.9k | 9.1k | 8.9k |
+--------------+------+------+-------+--------+------+--------+
|SMC-R now |13k | 19k | 18k | 16k | 15k | 12k |
+--------------+------+------+-------+--------+------+--------+
|TCP |15k | 35k | 51k | 80k | 100k | 162k |
+--------------+------+------+-------+--------+------+--------+
The reason why the benefit is not obvious after the number of connections
has increased dues to workqueue. If we try to change workqueue to UNBOUND,
we can obtain at least 4-5 times performance improvement, reach up to half
of TCP. However, this is not an elegant solution, the optimization of it
will be much more complicated. But in any case, we will submit relevant
optimization patches as soon as possible.
Please note that the premise here is that the lock related problem
must be solved first, otherwise, no matter how we optimize the workqueue,
there won't be much improvement.
Because there are a lot of related changes to the code, if you have
any questions or suggestions, please let me know.
Thanks
D. Wythe
v1 -> v2:
1. Fix panic in SMC-D scenario
2. Fix lnkc related hashfn calculation exception, caused by operator
priority.
3. Remove -EBUSY processing of rhashtable_insert_fast, see more details
in comments around smcr_link_get_or_create_cluster().
4. Only wake up one connection if the link has not been active.
5. Delete obsolete unlock logic in smc_listen_work().
6. PATCH format, do Reverse Christmas tree.
7. PATCH format, change all xxx_lnk_xxx function to xxx_link_xxx.
8. PATCH format, add correct fix tag for the patches for fixes.
9. PATCH format, fix some spelling error.
10.PATCH format, rename slow to do_slow in smcr_lgr_reg_rmbs().
D. Wythe (10):
net/smc: remove locks smc_client_lgr_pending and
smc_server_lgr_pending
net/smc: fix SMC_CLC_DECL_ERR_REGRMB without smc_server_lgr_pending
net/smc: allow confirm/delete rkey response deliver multiplex
net/smc: make SMC_LLC_FLOW_RKEY run concurrently
net/smc: llc_conf_mutex refactor, replace it with rw_semaphore
net/smc: use read semaphores to reduce unnecessary blocking in
smc_buf_create() & smcr_buf_unuse()
net/smc: reduce unnecessary blocking in smcr_lgr_reg_rmbs()
net/smc: replace mutex rmbs_lock and sndbufs_lock with rw_semaphore
net/smc: Fix potential panic dues to unprotected
smc_llc_srv_add_link()
net/smc: fix application data exception
net/smc/af_smc.c | 42 +++--
net/smc/smc_core.c | 443 +++++++++++++++++++++++++++++++++++++++++++++++------
net/smc/smc_core.h | 78 +++++++++-
net/smc/smc_llc.c | 286 +++++++++++++++++++++++++---------
net/smc/smc_llc.h | 6 +
net/smc/smc_wr.c | 10 --
net/smc/smc_wr.h | 10 ++
7 files changed, 725 insertions(+), 150 deletions(-)
--
1.8.3.1
next reply other threads:[~2022-08-26 9:51 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-26 9:51 D. Wythe [this message]
2022-08-26 9:51 ` [PATCH net-next v2 01/10] net/smc: remove locks smc_client_lgr_pending and smc_server_lgr_pending D. Wythe
2022-08-29 14:48 ` Jan Karcher
2022-08-31 15:04 ` Jan Karcher
2022-09-02 11:25 ` D. Wythe
2022-09-07 8:10 ` Jan Karcher
2022-09-16 5:16 ` D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 02/10] net/smc: fix SMC_CLC_DECL_ERR_REGRMB without smc_server_lgr_pending D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 03/10] net/smc: allow confirm/delete rkey response deliver multiplex D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 04/10] net/smc: make SMC_LLC_FLOW_RKEY run concurrently D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 05/10] net/smc: llc_conf_mutex refactor, replace it with rw_semaphore D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 06/10] net/smc: use read semaphores to reduce unnecessary blocking in smc_buf_create() & smcr_buf_unuse() D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 07/10] net/smc: reduce unnecessary blocking in smcr_lgr_reg_rmbs() D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 08/10] net/smc: replace mutex rmbs_lock and sndbufs_lock with rw_semaphore D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 09/10] net/smc: Fix potential panic dues to unprotected smc_llc_srv_add_link() D. Wythe
2022-08-26 9:51 ` [PATCH net-next v2 10/10] net/smc: fix application data exception D. Wythe
2022-09-08 9:37 ` Wen Gu
2022-09-16 5:24 ` D. Wythe
2022-08-27 1:32 ` [PATCH net-next v2 00/10] optimize the parallelism of SMC-R connections Jakub Kicinski
2022-08-29 3:25 ` Tony Lu
2022-08-29 3:28 ` D. Wythe
2022-09-09 6:59 ` Jan Karcher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1661407821.git.alibuda@linux.alibaba.com \
--to=alibuda@linux.alibaba.com \
--cc=davem@davemloft.net \
--cc=kgraul@linux.ibm.com \
--cc=kuba@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=wenjia@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).