From: Wen Gu <guwen@linux.alibaba.com>
To: Jan Karcher <jaka@linux.ibm.com>,
wintera@linux.ibm.com, twinkler@linux.ibm.com, hca@linux.ibm.com,
gor@linux.ibm.com, agordeev@linux.ibm.com, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
wenjia@linux.ibm.com
Cc: borntraeger@linux.ibm.com, svens@linux.ibm.com,
alibuda@linux.alibaba.com, tonylu@linux.alibaba.com,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
netdev@vger.kernel.org
Subject: Re: [PATCH net-next v3 00/11] net/smc: SMC intra-OS shortcut with loopback-ism
Date: Tue, 12 Mar 2024 22:43:51 +0800 [thread overview]
Message-ID: <ef810058-7529-4deb-889c-82477aeef3fb@linux.alibaba.com> (raw)
In-Reply-To: <aa8062a9-9caa-4773-a3f5-29df70ec93b7@linux.ibm.com>
On 2024/3/12 22:33, Jan Karcher wrote:
>
>
> On 12/03/2024 15:27, Wen Gu wrote:
>> This patch set acts as the second part of the new version of [1] (The first
>> part can be referred from [2]), the updated things of this version are listed
>> at the end.
>
> Hi Wen Gu,
>
> Re-running the tests with this version and finishing up review.
> Please give me some time.
>
Sure! Thank you very much for your time and help!
> Thank you
> - Jan
>
>>
>> - Background
>>
>> SMC-D is now used in IBM z with ISM function to optimize network interconnect
>> for intra-CPC communications. Inspired by this, we try to make SMC-D available
>> on the non-s390 architecture through a software-implemented Emulated-ISM device,
>> that is the loopback-ism device here, to accelerate inter-process or
>> inter-containers communication within the same OS instance.
>>
>> - Design
>>
>> This patch set includes 3 parts:
>>
>> - Patch #1-#2: some prepare work for loopback-ism.
>> - Patch #3-#7: implement loopback-ism device. Noted that loopback-ism now
>> serves only SMC and no userspace interface exposed.
>> - Patch #10-#15: memory copy optimization for intra-OS scenario.
>>
>> The loopback-ism device is designed as an ISMv2 device and not be limited to
>> a specific net namespace, ends of both inter-process connection (1/1' in diagram
>> below) or inter-container connection (2/2' in diagram below) can find the same
>> available loopback-ism and choose it during the CLC handshake.
>>
>> Container 1 (ns1) Container 2 (ns2)
>> +-----------------------------------------+ +-------------------------+
>> | +-------+ +-------+ +-------+ | | +-------+ |
>> | | App A | | App B | | App C | | | | App D |<-+ |
>> | +-------+ +---^---+ +-------+ | | +-------+ |(2') |
>> | |127.0.0.1 (1')| |192.168.0.11 192.168.0.12| |
>> | (1)| +--------+ | +--------+ |(2) | | +--------+ +--------+ |
>> | `-->| lo |-` | eth0 |<-` | | | lo | | eth0 | |
>> +---------+--|---^-+---+-----|--+---------+ +-+--------+---+-^------+-+
>> | | | |
>> Kernel | | | |
>> +----+-------v---+-----------v----------------------------------+---+----+
>> | | TCP | |
>> | | | |
>> | +--------------------------------------------------------------+ |
>> | |
>> | +--------------+ |
>> | | smc loopback | |
>> +---------------------------+--------------+-----------------------------+
>>
>> loopback-ism device creates DMBs (shared memory) for each connection peer.
>> Since data transfer occurs within the same kernel, the sndbuf of each peer
>> is only a descriptor and point to the same memory region as peer DMB, so that
>> the data copy from sndbuf to peer DMB can be avoided in loopback-ism case.
>>
>> Container 1 (ns1) Container 2 (ns2)
>> +-----------------------------------------+ +-------------------------+
>> | +-------+ | | +-------+ |
>> | | App C |-----+ | | | App D | |
>> | +-------+ | | | +-^-----+ |
>> | | | | | |
>> | (2) | | | (2') | |
>> | | | | | |
>> +---------------|-------------------------+ +----------|--------------+
>> | |
>> Kernel | |
>> +---------------|-----------------------------------------|--------------+
>> | +--------+ +--v-----+ +--------+ +--------+ |
>> | |dmb_desc| |snd_desc| |dmb_desc| |snd_desc| |
>> | +-----|--+ +--|-----+ +-----|--+ +--------+ |
>> | +-----|--+ | +-----|--+ |
>> | | DMB C | +---------------------------------| DMB D | |
>> | +--------+ +--------+ |
>> | |
>> | +--------------+ |
>> | | smc loopback | |
>> +---------------------------+--------------+-----------------------------+
>>
>> - Benchmark Test
>>
>> * Test environments:
>> - VM with Intel Xeon Platinum 8 core 2.50GHz, 16 GiB mem.
>> - SMC sndbuf/DMB size 1MB.
>>
>> * Test object:
>> - TCP: run on TCP loopback.
>> - SMC lo: run on SMC loopback-ism.
>>
>> 1. ipc-benchmark (see [3])
>>
>> - ./<foo> -c 1000000 -s 100
>>
>> TCP SMC-lo
>> Message
>> rate (msg/s) 81433 143938(+76.75%)
>>
>> 2. sockperf
>>
>> - serv: <smc_run> taskset -c <cpu> sockperf sr --tcp
>> - clnt: <smc_run> taskset -c <cpu> sockperf { tp | pp } --tcp --msg-size={ 64000 for tp | 14 for pp } -i 127.0.0.1
>> -t 30
>>
>> TCP SMC-lo
>> Bandwidth(MBps) 4903.07 7978.69(+62.73%)
>> Latency(us) 6.095 3.539(-41.94%)
>>
>> 3. nginx/wrk
>>
>> - serv: <smc_run> nginx
>> - clnt: <smc_run> wrk -t 8 -c 1000 -d 30 http://127.0.0.1:80
>>
>> TCP SMC-lo
>> Requests/s 161665.67 244272.41(+51.10%)
>>
>> 4. redis-benchmark
>>
>> - serv: <smc_run> redis-server
>> - clnt: <smc_run> redis-benchmark -h 127.0.0.1 -q -t set,get -n 400000 -c 200 -d 1024
>>
>> TCP SMC-lo
>> GET(Requests/s) 88790.23 117474.30(+32.31%)
>> SET(Requests/s) 87508.20 118623.96(+35.57%)
>>
>>
>> Change log:
>>
>> v3->v2:
>> - Patch #11: use tasklet_schedule(&conn->rx_tsklet) instead of smcd_cdc_rx_handler()
>> to avoid possible recursive locking of conn->send_lock and use {read|write}_lock_bh()
>> to acquire dmb_ht_lock.
>>
>> v2->v1:
>> Link: https://lore.kernel.org/netdev/20240307095536.29648-1-guwen@linux.alibaba.com/
>> - All the patches: changed the term virtual-ISM to Emulated-ISM as defined by SMCv2.1.
>> - Patch #3: optimized the description of SMC_LO config. Avoid exposing loopback-ism
>> to sysfs and remove all the knobs until future definition clear.
>> - Patch #3: try to make lockdep happy by using read_lock_bh() in smc_lo_move_data().
>> - Patch #6: defaultly use physical contiguous DMB buffers.
>> - Patch #11: defaultly enable DMB no-copy for loopback-ism and free the DMB in
>> unregister_dmb or detach_dmb when dmb_node->refcnt reaches 0, instead of using
>> wait_event to keep waiting in unregister_dmb.
>>
>> v1->RFC:
>> Link: https://lore.kernel.org/netdev/20240111120036.109903-1-guwen@linux.alibaba.com/
>> - Patch #9: merge rx_bytes and tx_bytes as xfer_bytes statistics:
>> /sys/devices/virtual/smc/loopback-ism/xfer_bytes
>> - Patch #10: add support_dmb_nocopy operation to check if SMC-D device supports
>> merging sndbuf with peer DMB.
>> - Patch #13 & #14: introduce loopback-ism device control of DMB memory type and
>> control of whether to merge sndbuf and DMB. They can be respectively set by:
>> /sys/devices/virtual/smc/loopback-ism/dmb_type
>> /sys/devices/virtual/smc/loopback-ism/dmb_copy
>> The motivation for these two control is that a performance bottleneck was
>> found when using vzalloced DMB and sndbuf is merged with DMB, and there are
>> many CPUs and CONFIG_HARDENED_USERCOPY is set [4]. The bottleneck is caused
>> by the lock contention in vmap_area_lock [5] which is involved in memcpy_from_msg()
>> or memcpy_to_msg(). Currently, Uladzislau Rezki is working on mitigating the
>> vmap lock contention [6]. It has significant effects, but using virtual memory
>> still has additional overhead compared to using physical memory.
>> So this new version provides controls of dmb_type and dmb_copy to suit
>> different scenarios.
>> - Some minor changes and comments improvements.
>>
>> RFC->old version([1]):
>> Link: https://lore.kernel.org/netdev/1702214654-32069-1-git-send-email-guwen@linux.alibaba.com/
>> - Patch #1: improve the loopback-ism dump, it shows as follows now:
>> # smcd d
>> FID Type PCI-ID PCHID InUse #LGs PNET-ID
>> 0000 0 loopback-ism ffff No 0
>> - Patch #3: introduce the smc_ism_set_v2_capable() helper and set
>> smc_ism_v2_capable when ISMv2 or virtual ISM is registered,
>> regardless of whether there is already a device in smcd device list.
>> - Patch #3: loopback-ism will be added into /sys/devices/virtual/smc/loopback-ism/.
>> - Patch #8: introduce the runtime switch /sys/devices/virtual/smc/loopback-ism/active
>> to activate or deactivate the loopback-ism.
>> - Patch #9: introduce the statistics of loopback-ism by
>> /sys/devices/virtual/smc/loopback-ism/{{tx|rx}_tytes|dmbs_cnt}.
>> - Some minor changes and comments improvements.
>>
>> [1] https://lore.kernel.org/netdev/1695568613-125057-1-git-send-email-guwen@linux.alibaba.com/
>> [2] https://lore.kernel.org/netdev/20231219142616.80697-1-guwen@linux.alibaba.com/
>> [3] https://github.com/goldsborough/ipc-bench
>> [4] https://lore.kernel.org/all/3189e342-c38f-6076-b730-19a6efd732a5@linux.alibaba.com/
>> [5] https://lore.kernel.org/all/238e63cd-e0e8-4fbf-852f-bc4d5bc35d5a@linux.alibaba.com/
>> [6] https://lore.kernel.org/all/20240102184633.748113-1-urezki@gmail.com/
>>
>> Wen Gu (11):
>> net/smc: adapt SMC-D device dump for Emulated-ISM
>> net/smc: decouple ism_client from SMC-D DMB registration
>> net/smc: introduce loopback-ism for SMC intra-OS shortcut
>> net/smc: implement ID-related operations of loopback-ism
>> net/smc: implement some unsupported operations of loopback-ism
>> net/smc: implement DMB-related operations of loopback-ism
>> net/smc: register loopback-ism into SMC-D device list
>> net/smc: add operations to merge sndbuf with peer DMB
>> net/smc: attach or detach ghost sndbuf to peer DMB
>> net/smc: adapt cursor update when sndbuf and peer DMB are merged
>> net/smc: implement DMB-merged operations of loopback-ism
>>
>> drivers/s390/net/ism_drv.c | 2 +-
>> include/net/smc.h | 7 +-
>> net/smc/Kconfig | 13 ++
>> net/smc/Makefile | 2 +-
>> net/smc/af_smc.c | 28 ++-
>> net/smc/smc_cdc.c | 52 ++++-
>> net/smc/smc_core.c | 61 ++++-
>> net/smc/smc_core.h | 1 +
>> net/smc/smc_ism.c | 71 +++++-
>> net/smc/smc_ism.h | 5 +
>> net/smc/smc_loopback.c | 462 +++++++++++++++++++++++++++++++++++++
>> net/smc/smc_loopback.h | 52 +++++
>> 12 files changed, 727 insertions(+), 29 deletions(-)
>> create mode 100644 net/smc/smc_loopback.c
>> create mode 100644 net/smc/smc_loopback.h
>>
next prev parent reply other threads:[~2024-03-12 14:43 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-12 14:27 [PATCH net-next v3 00/11] net/smc: SMC intra-OS shortcut with loopback-ism Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 01/11] net/smc: adapt SMC-D device dump for Emulated-ISM Wen Gu
2024-03-14 10:23 ` Jan Karcher
2024-03-15 3:44 ` Wen Gu
2024-03-15 10:27 ` Jan Karcher
2024-03-15 12:29 ` Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 02/11] net/smc: decouple ism_client from SMC-D DMB registration Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 03/11] net/smc: introduce loopback-ism for SMC intra-OS shortcut Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 04/11] net/smc: implement ID-related operations of loopback-ism Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 05/11] net/smc: implement some unsupported " Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 06/11] net/smc: implement DMB-related " Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 07/11] net/smc: register loopback-ism into SMC-D device list Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 08/11] net/smc: add operations to merge sndbuf with peer DMB Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 09/11] net/smc: attach or detach ghost sndbuf to " Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 10/11] net/smc: adapt cursor update when sndbuf and peer DMB are merged Wen Gu
2024-03-12 14:27 ` [PATCH net-next v3 11/11] net/smc: implement DMB-merged operations of loopback-ism Wen Gu
2024-03-12 14:33 ` [PATCH net-next v3 00/11] net/smc: SMC intra-OS shortcut with loopback-ism Jan Karcher
2024-03-12 14:43 ` Wen Gu [this message]
2024-03-12 15:00 ` Paolo Abeni
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=ef810058-7529-4deb-889c-82477aeef3fb@linux.alibaba.com \
--to=guwen@linux.alibaba.com \
--cc=agordeev@linux.ibm.com \
--cc=alibuda@linux.alibaba.com \
--cc=borntraeger@linux.ibm.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=jaka@linux.ibm.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=svens@linux.ibm.com \
--cc=tonylu@linux.alibaba.com \
--cc=twinkler@linux.ibm.com \
--cc=wenjia@linux.ibm.com \
--cc=wintera@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.