On 7/24/25 3:30 PM, Mike Snitzer wrote: > Hi, > > Some workloads benefit from NFSD avoiding the page cache, particularly > those with a working set that is significantly larger than available > system memory. This patchset introduces _optional_ support to > configure the use of O_DIRECT or DONTCACHE for NFSD's READ and WRITE > support. The NFSD default to use page cache is left unchanged. > > The performance win associated with using NFSD DIRECT was previously > summarized here: > https://lore.kernel.org/linux-nfs/aEslwqa9iMeZjjlV@xxxxxxxxxx/ > This picture offers a nice summary of performance gains: > https://original.art/NFSD_direct_vs_buffered_IO.jpg > > Similarly, NFS and LOCALIO in particular also benefit from avoiding > the page cache for workloads that have a working set that is > significantly larger than available system memory. Enter: NFS DIRECT, > which makes it possible to always enable LOCALIO to use O_DIRECT even > if the IO is not DIO-aligned. > > For this v5 I've combined the NFSD and NFSD patchsets because the NFS > changes do depend on the the NFSD changes. In addition, I think it > makes sense to review/test these changes together. I'm ready to pull the six NFSD patches in this series into nfsd-testing. IMO we want regression and performance testing of NFSD, outside of the LOCALIO paths, before claiming merge readiness. > I'm sharing these again now, soon after posting the NFSD and NFS > updates, to hopefully make it clear where the code stands. Thanks to > Chuck's feedback I have kept the patch "NFSD: issue READs using > O_DIRECT even if IO is misaligned" (and will now finish NFSD's > misaligned WRITE handling, splitting IO to misaligned head and/or tail > and DIO-aligned middle, and will include in the next version of this > patchset -- probably mid next week). > > New changes in this v5: > - Combine NFSD DIRECT and NFS DIRECT patches into single patchset. > - Fix a "nsfd" typo in a variable of the NFSD io_cache_read patch that > was masked because the later " NFSD: issue READs using O_DIRECT even > if IO is misaligned" patch fixed it. > - Properly include the "NFSD: filecache: only get DIO alignment > attrs if NFSD_IO_DIRECT enabled" in the patch series. > - Optimize NFS DIRECT's misaligned READ and WRITE support to return > early if IO irreparably misaligned or already DIO-aligned. > > Thanks, > Mike > > Mike Snitzer (13): > NFSD: filecache: add STATX_DIOALIGN and STATX_DIO_READ_ALIGN support > NFSD: pass nfsd_file to nfsd_iter_read() > NFSD: add io_cache_read controls to debugfs interface > NFSD: add io_cache_write controls to debugfs interface > NFSD: filecache: only get DIO alignment attrs if NFSD_IO_DIRECT enabled > NFSD: issue READs using O_DIRECT even if IO is misaligned > nfs/localio: avoid bouncing LOCALIO if nfs_client_is_local() > nfs/localio: make trace_nfs_local_open_fh more useful > nfs/localio: add nfsd_file_dio_alignment > nfs/localio: refactor iocb initialization > nfs/localio: fallback to NFSD for misaligned O_DIRECT READs > nfs/direct: add misaligned READ handling > nfs/direct: add misaligned WRITE handling > > fs/nfs/direct.c | 262 +++++++++++++++++++++++-- > fs/nfs/flexfilelayout/flexfilelayout.c | 1 + > fs/nfs/internal.h | 17 +- > fs/nfs/localio.c | 231 ++++++++++++++-------- > fs/nfs/nfstrace.h | 47 ++++- > fs/nfs/pagelist.c | 22 ++- > fs/nfsd/debugfs.c | 102 ++++++++++ > fs/nfsd/filecache.c | 36 ++++ > fs/nfsd/filecache.h | 4 + > fs/nfsd/localio.c | 11 ++ > fs/nfsd/nfs4xdr.c | 8 +- > fs/nfsd/nfsd.h | 10 + > fs/nfsd/nfsfh.c | 4 + > fs/nfsd/trace.h | 37 ++++ > fs/nfsd/vfs.c | 200 +++++++++++++++++-- > fs/nfsd/vfs.h | 2 +- > include/linux/nfs_page.h | 1 + > include/linux/nfslocalio.h | 2 + > include/linux/sunrpc/svc.h | 5 +- > 19 files changed, 875 insertions(+), 127 deletions(-) > -- Chuck Lever