The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [RFC 0/3] ksmbd: use splice for SMB2 READ responses
@ 2026-07-13  7:11 wang zhaolong
  2026-07-13  7:11 ` [RFC 1/3] ksmbd: add read payload infrastructure wang zhaolong
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: wang zhaolong @ 2026-07-13  7:11 UTC (permalink / raw)
  To: linux-cifs
  Cc: linkinjeon, smfrench, senozhatsky, tom, linux-kernel,
	Wang Zhaolong

From: Wang Zhaolong <wangzhaolong@fnnas.com>

SMB2 READ currently copies file data into an allocated auxiliary buffer
before sending the response. This series adds a page-backed payload,
collects page-cache data with splice_direct_to_actor(), and sends it after
the SMB response header with MSG_SPLICE_PAGES.

This RFC deliberately limits the new path to plain TCP reads of at least
64 KiB. Signed, encrypted, compressed, compound, RDMA, stream, non-regular,
O_DIRECT and DAX reads continue to use the buffered path. Unsupported
splice collection also falls back before the response owns the payload. If
a socket error occurs after part of a PDU has been sent, the connection is
shut down rather than reusing a corrupted byte stream.

I would particularly appreciate feedback on the work-owned bio_vec payload,
the transport hook, and whether splice_direct_to_actor() is an appropriate
interface for this path.

I tested the series in QEMU with ksmbd and the SMB client in the same
guest. The smb2.read.eof tests passed, including zero-length and
MinimumCount cases. Reads of 65535 bytes used the buffered path, while
65536-byte and 1 MiB reads used the splice payload path. Forced signed and
encrypted 1 MiB reads stayed on the buffered path. All data checks matched
and no kernel warning was observed.

For an exploratory performance comparison, I used a warm 4 GiB file over
SMB 3.1.1 with cache=none, 1 MiB synchronous reads and one job. Median
results across eight valid 60-second samples per kernel were:

                            baseline    patched     delta
  bandwidth                 1.728 GB/s  2.246 GB/s  +30.0%
  mean completion latency   604.1 us    464.5 us    -23.1%
  median sample P99 latency 794.6 us    606.2 us    -23.7%

One patched-kernel sample with TCP retransmissions was discarded by the
validity gate and replaced. These are loopback results; an independent
client is still needed to measure network-path and server CPU effects. The
benchmark candidate preceded the final zero-length READ ordering fix, which
did not change the positive-length payload path exercised here.

Compression, large compound READ, RDMA, stream, non-regular, DAX and
O_DIRECT exclusions, and the unsupported-splice fallback, were not
exercised by this lab.

Wang Zhaolong (3):
  ksmbd: add read payload infrastructure
  ksmbd: add splice-based read payload helper
  ksmbd: use splice payloads for simple SMB2 READ

 fs/smb/server/connection.c    |  25 ++++-
 fs/smb/server/connection.h    |   4 +
 fs/smb/server/ksmbd_work.c    |  45 ++++++++
 fs/smb/server/ksmbd_work.h    |  12 +++
 fs/smb/server/smb2pdu.c       |  67 ++++++++++++
 fs/smb/server/transport_tcp.c |  58 ++++++++++
 fs/smb/server/vfs.c           | 195 ++++++++++++++++++++++++++++++----
 fs/smb/server/vfs.h           |   4 +
 8 files changed, 382 insertions(+), 28 deletions(-)

-- 
2.47.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-17 12:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-13  7:11 [RFC 0/3] ksmbd: use splice for SMB2 READ responses wang zhaolong
2026-07-13  7:11 ` [RFC 1/3] ksmbd: add read payload infrastructure wang zhaolong
2026-07-13  7:11 ` [RFC 2/3] ksmbd: add splice-based read payload helper wang zhaolong
2026-07-13  7:11 ` [RFC 3/3] ksmbd: use splice payloads for simple SMB2 READ wang zhaolong
2026-07-13  8:58   ` Namjae Jeon
2026-07-13  9:36     ` Wang Zhaolong
2026-07-17 12:49     ` Wang Zhaolong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox