Skip to content

Commit 1c6bbc4

Browse files
meetakshi253Steve French
authored andcommitted
cifs: add documentation for smbdirect setup
Document steps to use SMB over RDMA using the linux SMB client and KSMBD server Signed-off-by: Meetakshi Setiya <msetiya@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 42ca547 commit 1c6bbc4

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

Documentation/filesystems/smb/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ CIFS
88

99
ksmbd
1010
cifsroot
11+
smbdirect
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
===========================
4+
SMB Direct - SMB3 over RDMA
5+
===========================
6+
7+
This document describes how to set up the Linux SMB client and server to
8+
use RDMA.
9+
10+
Overview
11+
========
12+
The Linux SMB kernel client supports SMB Direct, which is a transport
13+
scheme for SMB3 that uses RDMA (Remote Direct Memory Access) to provide
14+
high throughput and low latencies by bypassing the traditional TCP/IP
15+
stack.
16+
SMB Direct on the Linux SMB client can be tested against KSMBD - a
17+
kernel-space SMB server.
18+
19+
Installation
20+
=============
21+
- Install an RDMA device. As long as the RDMA device driver is supported
22+
by the kernel, it should work. This includes both software emulators (soft
23+
RoCE, soft iWARP) and hardware devices (InfiniBand, RoCE, iWARP).
24+
25+
- Install a kernel with SMB Direct support. The first kernel release to
26+
support SMB Direct on both the client and server side is 5.15. Therefore,
27+
a distribution compatible with kernel 5.15 or later is required.
28+
29+
- Install cifs-utils, which provides the `mount.cifs` command to mount SMB
30+
shares.
31+
32+
- Configure the RDMA stack
33+
34+
Make sure that your kernel configuration has RDMA support enabled. Under
35+
Device Drivers -> Infiniband support, update the kernel configuration to
36+
enable Infiniband support.
37+
38+
Enable the appropriate IB HCA support or iWARP adapter support,
39+
depending on your hardware.
40+
41+
If you are using InfiniBand, enable IP-over-InfiniBand support.
42+
43+
For soft RDMA, enable either the soft iWARP (`RDMA _SIW`) or soft RoCE
44+
(`RDMA_RXE`) module. Install the `iproute2` package and use the
45+
`rdma link add` command to load the module and create an
46+
RDMA interface.
47+
48+
e.g. if your local ethernet interface is `eth0`, you can use:
49+
50+
.. code-block:: bash
51+
52+
sudo rdma link add siw0 type siw netdev eth0
53+
54+
- Enable SMB Direct support for both the server and the client in the kernel
55+
configuration.
56+
57+
Server Setup
58+
59+
.. code-block:: text
60+
61+
Network File Systems --->
62+
<M> SMB3 server support
63+
[*] Support for SMB Direct protocol
64+
65+
Client Setup
66+
67+
.. code-block:: text
68+
69+
Network File Systems --->
70+
<M> SMB3 and CIFS support (advanced network filesystem)
71+
[*] SMB Direct support
72+
73+
- Build and install the kernel. SMB Direct support will be enabled in the
74+
cifs.ko and ksmbd.ko modules.
75+
76+
Setup and Usage
77+
================
78+
79+
- Set up and start a KSMBD server as described in the `KSMBD documentation
80+
<https://www.kernel.org/doc/Documentation/filesystems/smb/ksmbd.rst>`_.
81+
Also add the "server multi channel support = yes" parameter to ksmbd.conf.
82+
83+
- On the client, mount the share with `rdma` mount option to use SMB Direct
84+
(specify a SMB version 3.0 or higher using `vers`).
85+
86+
For example:
87+
88+
.. code-block:: bash
89+
90+
mount -t cifs //server/share /mnt/point -o vers=3.1.1,rdma
91+
92+
- To verify that the mount is using SMB Direct, you can check dmesg for the
93+
following log line after mounting:
94+
95+
.. code-block:: text
96+
97+
CIFS: VFS: RDMA transport established
98+
99+
Or, verify `rdma` mount option for the share in `/proc/mounts`:
100+
101+
.. code-block:: bash
102+
103+
cat /proc/mounts | grep cifs

0 commit comments

Comments
 (0)