Re: [PATCH v5 00/13] NFSD DIRECT and NFS DIRECT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux