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