Linux 6.0 SMB3 client code brings improved multi-channel performance

Linux CIFS/SMB3 client updates were merged on Sunday for the Linux 6.0 merge window. Notable with this round of updates is a performance boost for multi-channel mode.

The SMB 3.0 protocol in modern versions of Windows and Linux supports multi-channel operation to increase network performance and reliability. SMB multichannel operation allows file servers to use multiple network connections simultaneously to aggregate bandwidth and improve fault tolerance. Linux already supported multichannel but with Linux 6.0 the CIFS/SMB3 client code brings a performance improvement to this mode of operation.

Microsoft documentation showing general performance benefits of SMB3 multichannel in Azure and Windows. Performance of the Linux SMB3 multichannel client should be better with the v6.0 kernel.

CIFS kernel code has been updated to avoid global locks around high contention data. While Microsoft engineers were analyzing the multi-channel performance of SMB3, they noticed two locks shared between multiple data structures and causing numerous conflicts. With Linux 6.0, there are new, more granular level locks to resolve high contention.

Microsoft engineer Shyam Prasad N authored this change to avoid the locking conflict in multi-channel mode, but did not comment on specifics regarding the quantification of the performance improvement. CIFS maintainer Steve French of Microsoft simply summed it up as a “multi-channel performance improvement” in the pull request that was merged on Sunday.

Other SMB3/CIFS client changes are mostly fixes, including fixing a memory leak. There is also a change so that more SMB1 code is not compiled when disabling legacy SMB support.