From: Wen Gu <guwen@linux.alibaba.com>
To: wintera@linux.ibm.com, wenjia@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,
jaka@linux.ibm.com
Cc: borntraeger@linux.ibm.com, svens@linux.ibm.com,
alibuda@linux.alibaba.com, tonylu@linux.alibaba.com,
guwen@linux.alibaba.com, linux-s390@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH net-next 14/15] net/smc: introduce loopback-ism DMB data copy control
Date: Thu, 11 Jan 2024 20:00:35 +0800 [thread overview]
Message-ID: <20240111120036.109903-15-guwen@linux.alibaba.com> (raw)
In-Reply-To: <20240111120036.109903-1-guwen@linux.alibaba.com>
This provides a way to {get|set} whether loopback-ism device supports
merging sndbuf with peer DMB to eliminate data copies between them.
echo 0 > /sys/devices/virtual/smc/loopback-ism/dmb_copy # support
echo 1 > /sys/devices/virtual/smc/loopback-ism/dmb_copy # not support
The settings take effect after re-activating loopback-ism by:
echo 0 > /sys/devices/virtual/smc/loopback-ism/active
echo 1 > /sys/devices/virtual/smc/loopback-ism/active
After this, the link group related to loopback-ism will be flushed and
the sndbufs of subsequent connections will be merged or not merged with
peer DMB.
The motivation of this control is that the bandwidth will be highly
improved when sndbuf and DMB are merged, but when virtually contiguous
DMB is provided and merged with sndbuf, it will be concurrently accessed
on Tx and Rx, then there will be a bottleneck caused by lock contention
of find_vmap_area when there are many CPUs and CONFIG_HARDENED_USERCOPY
is set (see link below). So an option is provided.
Link: https://lore.kernel.org/all/238e63cd-e0e8-4fbf-852f-bc4d5bc35d5a@linux.alibaba.com/
Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
---
net/smc/smc_loopback.c | 46 ++++++++++++++++++++++++++++++++++++++++++
net/smc/smc_loopback.h | 8 +++++++-
2 files changed, 53 insertions(+), 1 deletion(-)
diff --git a/net/smc/smc_loopback.c b/net/smc/smc_loopback.c
index 2e734f8e08f5..bfbb346ef01a 100644
--- a/net/smc/smc_loopback.c
+++ b/net/smc/smc_loopback.c
@@ -26,6 +26,7 @@
static const char smc_lo_dev_name[] = "loopback-ism";
static unsigned int smc_lo_dmb_type = SMC_LO_DMB_PHYS;
+static unsigned int smc_lo_dmb_copy = SMC_LO_DMB_NOCOPY;
static struct smc_lo_dev *lo_dev;
static struct class *smc_class;
@@ -167,9 +168,52 @@ static ssize_t dmb_type_store(struct device *dev,
return count;
}
static DEVICE_ATTR_RW(dmb_type);
+
+static ssize_t dmb_copy_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct smc_lo_dev *ldev =
+ container_of(dev, struct smc_lo_dev, dev);
+ const char *copy;
+
+ switch (ldev->dmb_copy) {
+ case SMC_LO_DMB_NOCOPY:
+ copy = "sndbuf and DMB merged and no data copied";
+ break;
+ case SMC_LO_DMB_COPY:
+ copy = "sndbuf and DMB separated and data copied";
+ break;
+ default:
+ copy = "Unknown setting";
+ }
+
+ return sysfs_emit(buf, "%d: %s\n", ldev->dmb_copy, copy);
+}
+
+static ssize_t dmb_copy_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ unsigned int dmb_copy;
+ int ret;
+
+ ret = kstrtouint(buf, 0, &dmb_copy);
+ if (ret)
+ return ret;
+
+ if (dmb_copy != SMC_LO_DMB_NOCOPY &&
+ dmb_copy != SMC_LO_DMB_COPY)
+ return -EINVAL;
+
+ smc_lo_dmb_copy = dmb_copy; /* re-activate to take effect */
+ return count;
+}
+static DEVICE_ATTR_RW(dmb_copy);
+
static struct attribute *smc_lo_attrs[] = {
&dev_attr_active.attr,
&dev_attr_dmb_type.attr,
+ &dev_attr_dmb_copy.attr,
&dev_attr_xfer_bytes.attr,
&dev_attr_dmbs_cnt.attr,
NULL,
@@ -451,6 +495,7 @@ static int smcd_lo_register_dev(struct smc_lo_dev *ldev)
smcd->priv = ldev;
smc_ism_set_v2_capable();
ldev->dmb_type = smc_lo_dmb_type;
+ ldev->dmb_copy = smc_lo_dmb_copy;
mutex_lock(&smcd_dev_list.mutex);
list_add(&smcd->list, &smcd_dev_list.list);
mutex_unlock(&smcd_dev_list.mutex);
@@ -475,6 +520,7 @@ static void smcd_lo_unregister_dev(struct smc_lo_dev *ldev)
kfree(smcd->conn);
kfree(smcd);
ldev->dmb_type = smc_lo_dmb_type;
+ ldev->dmb_copy = smc_lo_dmb_copy;
smc_lo_clear_stats(ldev);
}
diff --git a/net/smc/smc_loopback.h b/net/smc/smc_loopback.h
index 8ee5c6805fc4..7ecb4a35eb36 100644
--- a/net/smc/smc_loopback.h
+++ b/net/smc/smc_loopback.h
@@ -28,6 +28,11 @@ enum {
SMC_LO_DMB_VIRT,
};
+enum {
+ SMC_LO_DMB_NOCOPY,
+ SMC_LO_DMB_COPY,
+};
+
struct smc_lo_dmb_node {
struct hlist_node list;
u64 token;
@@ -45,7 +50,8 @@ struct smc_lo_dev_stats64 {
struct smc_lo_dev {
struct smcd_dev *smcd;
struct device dev;
- u8 active;
+ u8 active : 1;
+ u8 dmb_copy : 1;
u8 dmb_type;
u16 chid;
struct smcd_gid local_gid;
--
2.32.0.3.g01195cf9f
next prev parent reply other threads:[~2024-01-11 12:01 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-11 12:00 [PATCH net-next 00/15] net/smc: implement loopback-ism used by SMC-D Wen Gu
2024-01-11 12:00 ` [PATCH net-next 01/15] net/smc: improve SMC-D device dump for virtual ISM Wen Gu
2024-01-11 12:00 ` [PATCH net-next 02/15] net/smc: decouple specialized struct from SMC-D DMB registration Wen Gu
2024-01-11 12:00 ` [PATCH net-next 03/15] net/smc: introduce virtual ISM device loopback-ism Wen Gu
2024-02-16 14:11 ` Wenjia Zhang
2024-02-20 1:20 ` Wen Gu
2024-01-11 12:00 ` [PATCH net-next 04/15] net/smc: implement ID-related operations of loopback-ism Wen Gu
2024-01-11 12:00 ` [PATCH net-next 05/15] net/smc: implement some unsupported " Wen Gu
2024-01-11 12:00 ` [PATCH net-next 06/15] net/smc: implement DMB-related " Wen Gu
2024-02-16 14:13 ` Wenjia Zhang
2024-02-20 1:55 ` Wen Gu
2024-02-23 14:12 ` Wenjia Zhang
2024-02-26 3:04 ` Wen Gu
2024-01-11 12:00 ` [PATCH net-next 07/15] net/smc: register loopback-ism into SMC-D device list Wen Gu
2024-01-11 12:00 ` [PATCH net-next 08/15] net/smc: introduce loopback-ism runtime switch Wen Gu
2024-01-11 12:00 ` [PATCH net-next 09/15] net/smc: introduce loopback-ism statistics attributes Wen Gu
2024-02-16 14:24 ` Wenjia Zhang
2024-02-20 2:45 ` Wen Gu
2024-02-23 14:13 ` Wenjia Zhang
2024-02-26 12:58 ` Wen Gu
2024-01-11 12:00 ` [PATCH net-next 10/15] net/smc: add operations to merge sndbuf with peer DMB Wen Gu
2024-01-11 12:00 ` [PATCH net-next 11/15] net/smc: attach or detach ghost sndbuf to " Wen Gu
2024-01-11 12:00 ` [PATCH net-next 12/15] net/smc: adapt cursor update when sndbuf and peer DMB are merged Wen Gu
2024-01-11 12:00 ` [PATCH net-next 13/15] net/smc: introduce loopback-ism DMB type control Wen Gu
2024-02-16 14:25 ` Wenjia Zhang
2024-02-20 3:19 ` Wen Gu
2024-01-11 12:00 ` Wen Gu [this message]
2024-01-12 16:24 ` [PATCH net-next 14/15] net/smc: introduce loopback-ism DMB data copy control Niklas Schnelle
2024-01-13 7:12 ` Wen Gu
2024-02-16 14:25 ` Wenjia Zhang
2024-02-20 3:36 ` Wen Gu
2024-02-23 14:42 ` Wenjia Zhang
2024-01-11 12:00 ` [PATCH net-next 15/15] net/smc: implement DMB-merged operations of loopback-ism Wen Gu
2024-01-11 13:36 ` [PATCH net-next 00/15] net/smc: implement loopback-ism used by SMC-D Simon Horman
2024-01-12 2:54 ` Wen Gu
2024-01-11 14:50 ` Jiri Pirko
2024-01-12 8:29 ` Wen Gu
2024-01-12 9:10 ` Jiri Pirko
2024-01-12 12:32 ` Wen Gu
2024-01-12 15:50 ` Jiri Pirko
2024-01-13 9:22 ` Wen Gu
2024-01-15 14:11 ` Jiri Pirko
2024-01-18 8:27 ` Wen Gu
2024-01-18 13:59 ` Wenjia Zhang
2024-01-19 1:46 ` Wen Gu
2024-01-23 14:03 ` Alexandra Winter
2024-01-24 6:33 ` Wen Gu
2024-02-05 10:05 ` Wen Gu
2024-02-07 9:08 ` Wenjia Zhang
2024-02-06 12:18 ` Alexandra Winter
2024-02-08 16:12 ` Wen Gu
2024-02-19 14:04 ` Wen Gu
2024-02-16 14:09 ` Wenjia Zhang
2024-02-20 3:52 ` Wen Gu
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=20240111120036.109903-15-guwen@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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®