Message ID | 20241119165942.213409-1-steved@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [V2] nfs(5): Update rsize/wsize options | expand |
On Tue, 19 Nov 2024 at 18:07, Steve Dickson <steved@redhat.com> wrote: > > From: Seiichi Ikarashi <s.ikarashi@fujitsu.com> > > The rsize/wsize values are not multiples of 1024 but multiples of the > system's page size or powers of 2 if < system's page size as defined > in fs/nfs/internal.h:nfs_io_size(). > > Signed-off-by: Steve Dickson <steved@redhat.com> REJECT. As discussed, this is the WRONG approach. The pagesize is not not easily determinable (/bin/pagesize not even being part of the default install), and the page size is flexible on many architectures. rsize/wsize depending on the page size makes this option non portable across platforms, or even same platforms with different default pagesize settings. In real life, this can prevent puppet from working for NFS root, if NFS root needs rsize/wsize, and someone switches the default page size. I thought the correct fix would be to fix the NFS client to count in kbytes as documented, and round up/down to the pagesize. Ced > --- > utils/mount/nfs.man | 24 +++++++++++++++--------- > 1 file changed, 15 insertions(+), 9 deletions(-) > > V2: Replaced PAGE_SIZE with "system's page size" > > diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man > index 233a7177..eab4692a 100644 > --- a/utils/mount/nfs.man > +++ b/utils/mount/nfs.man > @@ -215,15 +215,18 @@ or smaller than the > setting. The largest read payload supported by the Linux NFS client > is 1,048,576 bytes (one megabyte). > .IP > -The > +The allowed > .B rsize > -value is a positive integral multiple of 1024. > +value is a positive integral multiple of > +system's page size > +or a power of two if it is less than > +system's page size. > Specified > .B rsize > values lower than 1024 are replaced with 4096; values larger than > 1048576 are replaced with 1048576. If a specified value is within the supported > -range but not a multiple of 1024, it is rounded down to the nearest > -multiple of 1024. > +range but not such an allowed value, it is rounded down to the nearest > +allowed value. > .IP > If an > .B rsize > @@ -257,16 +260,19 @@ setting. The largest write payload supported by the Linux NFS client > is 1,048,576 bytes (one megabyte). > .IP > Similar to > -.B rsize > -, the > +.BR rsize , > +the allowed > .B wsize > -value is a positive integral multiple of 1024. > +value is a positive integral multiple of > +system's page size > +or a power of two if it is less than > +system's page size. > Specified > .B wsize > values lower than 1024 are replaced with 4096; values larger than > 1048576 are replaced with 1048576. If a specified value is within the supported > -range but not a multiple of 1024, it is rounded down to the nearest > -multiple of 1024. > +range but not such an allowed value, it is rounded down to the nearest > +allowed value. > .IP > If a > .B wsize > -- > 2.47.0 > >
On 11/20/24 2:57 AM, Cedric Blancher wrote: > On Tue, 19 Nov 2024 at 18:07, Steve Dickson <steved@redhat.com> wrote: >> >> From: Seiichi Ikarashi <s.ikarashi@fujitsu.com> >> >> The rsize/wsize values are not multiples of 1024 but multiples of the >> system's page size or powers of 2 if < system's page size as defined >> in fs/nfs/internal.h:nfs_io_size(). >> >> Signed-off-by: Steve Dickson <steved@redhat.com> > > REJECT. You mean NACK! :-) > As discussed, this is the WRONG approach. The pagesize is not > not easily determinable (/bin/pagesize not even being part of the > default install), and the page size is flexible on many architectures. Yes... /bin/pagesize is not needed only getconf PAGESIZE is which is in all default installs. > rsize/wsize depending on the page size makes this option non portable > across platforms, or even same platforms with different default > pagesize settings. "rsize/wsize depending on the page size" is a kernel thing... Nothing nfs-utils can do about it but accurately document what is happening. > In real life, this can prevent puppet from working for NFS root, if > NFS root needs rsize/wsize, and someone switches the default page > size. Why is puppet evening messing with rsize/wsize? Just let the kernel do the right thing... > > I thought the correct fix would be to fix the NFS client to count in > kbytes as documented, and round up/down to the pagesize. Again this is a kernel thing... Patches are welcomed! steved. > > Ced > >> --- >> utils/mount/nfs.man | 24 +++++++++++++++--------- >> 1 file changed, 15 insertions(+), 9 deletions(-) >> >> V2: Replaced PAGE_SIZE with "system's page size" >> >> diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man >> index 233a7177..eab4692a 100644 >> --- a/utils/mount/nfs.man >> +++ b/utils/mount/nfs.man >> @@ -215,15 +215,18 @@ or smaller than the >> setting. The largest read payload supported by the Linux NFS client >> is 1,048,576 bytes (one megabyte). >> .IP >> -The >> +The allowed >> .B rsize >> -value is a positive integral multiple of 1024. >> +value is a positive integral multiple of >> +system's page size >> +or a power of two if it is less than >> +system's page size. >> Specified >> .B rsize >> values lower than 1024 are replaced with 4096; values larger than >> 1048576 are replaced with 1048576. If a specified value is within the supported >> -range but not a multiple of 1024, it is rounded down to the nearest >> -multiple of 1024. >> +range but not such an allowed value, it is rounded down to the nearest >> +allowed value. >> .IP >> If an >> .B rsize >> @@ -257,16 +260,19 @@ setting. The largest write payload supported by the Linux NFS client >> is 1,048,576 bytes (one megabyte). >> .IP >> Similar to >> -.B rsize >> -, the >> +.BR rsize , >> +the allowed >> .B wsize >> -value is a positive integral multiple of 1024. >> +value is a positive integral multiple of >> +system's page size >> +or a power of two if it is less than >> +system's page size. >> Specified >> .B wsize >> values lower than 1024 are replaced with 4096; values larger than >> 1048576 are replaced with 1048576. If a specified value is within the supported >> -range but not a multiple of 1024, it is rounded down to the nearest >> -multiple of 1024. >> +range but not such an allowed value, it is rounded down to the nearest >> +allowed value. >> .IP >> If a >> .B wsize >> -- >> 2.47.0 >> >> > >
On 20 Nov 2024, at 2:57, Cedric Blancher wrote: > On Tue, 19 Nov 2024 at 18:07, Steve Dickson <steved@redhat.com> wrote: >> >> From: Seiichi Ikarashi <s.ikarashi@fujitsu.com> >> >> The rsize/wsize values are not multiples of 1024 but multiples of the >> system's page size or powers of 2 if < system's page size as defined >> in fs/nfs/internal.h:nfs_io_size(). >> >> Signed-off-by: Steve Dickson <steved@redhat.com> > > REJECT. As discussed, this is the WRONG approach. I am astounded that this response keeps appearing, we must have some fundamental inability to understand each other. > The pagesize is not not easily determinable (/bin/pagesize not even being > part of the default install), and the page size is flexible on many > architectures. rsize/wsize depending on the page size makes this option > non portable across platforms, or even same platforms with different > default pagesize settings. Why do you need to determine the page size to set this option? You are incorrect when stating that rsize/wsize depends on the page size. As I explained before, one does not need to know the page size to set this mount option. The kernel takes the desired size and rounds down to the current system's page size. > In real life, this can prevent puppet from working for NFS root, if > NFS root needs rsize/wsize, and someone switches the default page > size. What does "prevent puppet from working" mean? Please show a real example of this problem that requires a kernel fix. > I thought the correct fix would be to fix the NFS client to count in > kbytes as documented, and round up/down to the pagesize. What problem are we fixing? Currently, the only non-hypothetical issue is that the man page is incorrect. Ben
On 11/19/24 11:59 AM, Steve Dickson wrote: > From: Seiichi Ikarashi <s.ikarashi@fujitsu.com> > > The rsize/wsize values are not multiples of 1024 but multiples of the > system's page size or powers of 2 if < system's page size as defined > in fs/nfs/internal.h:nfs_io_size(). > > Signed-off-by: Steve Dickson <steved@redhat.com> Committed... (tag: nfs-utils-2-8-2-rc2) I know we are still discussing this but I think this version is better than what we have. So update patches are welcome! steved. > --- > utils/mount/nfs.man | 24 +++++++++++++++--------- > 1 file changed, 15 insertions(+), 9 deletions(-) > > V2: Replaced PAGE_SIZE with "system's page size" > > diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man > index 233a7177..eab4692a 100644 > --- a/utils/mount/nfs.man > +++ b/utils/mount/nfs.man > @@ -215,15 +215,18 @@ or smaller than the > setting. The largest read payload supported by the Linux NFS client > is 1,048,576 bytes (one megabyte). > .IP > -The > +The allowed > .B rsize > -value is a positive integral multiple of 1024. > +value is a positive integral multiple of > +system's page size > +or a power of two if it is less than > +system's page size. > Specified > .B rsize > values lower than 1024 are replaced with 4096; values larger than > 1048576 are replaced with 1048576. If a specified value is within the supported > -range but not a multiple of 1024, it is rounded down to the nearest > -multiple of 1024. > +range but not such an allowed value, it is rounded down to the nearest > +allowed value. > .IP > If an > .B rsize > @@ -257,16 +260,19 @@ setting. The largest write payload supported by the Linux NFS client > is 1,048,576 bytes (one megabyte). > .IP > Similar to > -.B rsize > -, the > +.BR rsize , > +the allowed > .B wsize > -value is a positive integral multiple of 1024. > +value is a positive integral multiple of > +system's page size > +or a power of two if it is less than > +system's page size. > Specified > .B wsize > values lower than 1024 are replaced with 4096; values larger than > 1048576 are replaced with 1048576. If a specified value is within the supported > -range but not a multiple of 1024, it is rounded down to the nearest > -multiple of 1024. > +range but not such an allowed value, it is rounded down to the nearest > +allowed value. > .IP > If a > .B wsize
On Wed, 20 Nov 2024 at 21:56, Steve Dickson <steved@redhat.com> wrote: > > > > On 11/19/24 11:59 AM, Steve Dickson wrote: > > From: Seiichi Ikarashi <s.ikarashi@fujitsu.com> > > > > The rsize/wsize values are not multiples of 1024 but multiples of the > > system's page size or powers of 2 if < system's page size as defined > > in fs/nfs/internal.h:nfs_io_size(). > > > > Signed-off-by: Steve Dickson <steved@redhat.com> > Committed... (tag: nfs-utils-2-8-2-rc2) > > I know we are still discussing this but I think > this version is better than what we have. Nope. The code is IMO wrong, and the docs are buggy too. > > So update patches are welcome! Solaris, HPUX, FreeBSD and Windows NFSv3/v4 implementations all count in bytes. Why does Linux again have to be the oddball of the family and count in pages? Not-invented-here-syndrome, need-reason-why-companies-have-to-pay-for-Linux-admin-training? My recommendation would be to fix the code to count in bytes, rounded to the page size, and being a minimum of one page size. Will bite of course if someone chooses 2M pages as default on x86-64. Dan
diff --git a/utils/mount/nfs.man b/utils/mount/nfs.man index 233a7177..eab4692a 100644 --- a/utils/mount/nfs.man +++ b/utils/mount/nfs.man @@ -215,15 +215,18 @@ or smaller than the setting. The largest read payload supported by the Linux NFS client is 1,048,576 bytes (one megabyte). .IP -The +The allowed .B rsize -value is a positive integral multiple of 1024. +value is a positive integral multiple of +system's page size +or a power of two if it is less than +system's page size. Specified .B rsize values lower than 1024 are replaced with 4096; values larger than 1048576 are replaced with 1048576. If a specified value is within the supported -range but not a multiple of 1024, it is rounded down to the nearest -multiple of 1024. +range but not such an allowed value, it is rounded down to the nearest +allowed value. .IP If an .B rsize @@ -257,16 +260,19 @@ setting. The largest write payload supported by the Linux NFS client is 1,048,576 bytes (one megabyte). .IP Similar to -.B rsize -, the +.BR rsize , +the allowed .B wsize -value is a positive integral multiple of 1024. +value is a positive integral multiple of +system's page size +or a power of two if it is less than +system's page size. Specified .B wsize values lower than 1024 are replaced with 4096; values larger than 1048576 are replaced with 1048576. If a specified value is within the supported -range but not a multiple of 1024, it is rounded down to the nearest -multiple of 1024. +range but not such an allowed value, it is rounded down to the nearest +allowed value. .IP If a .B wsize