diff mbox series

[V2] nfs(5): Update rsize/wsize options

Message ID 20241119165942.213409-1-steved@redhat.com (mailing list archive)
State New
Headers show
Series [V2] nfs(5): Update rsize/wsize options | expand

Commit Message

Steve Dickson Nov. 19, 2024, 4:59 p.m. UTC
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>
---
 utils/mount/nfs.man | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

V2: Replaced PAGE_SIZE with "system's page size"

Comments

Cedric Blancher Nov. 20, 2024, 7:57 a.m. UTC | #1
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
>
>
Steve Dickson Nov. 20, 2024, 9:18 a.m. UTC | #2
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
>>
>>
> 
>
Benjamin Coddington Nov. 20, 2024, 2:48 p.m. UTC | #3
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
Steve Dickson Nov. 20, 2024, 8:56 p.m. UTC | #4
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
Dan Shelton Nov. 20, 2024, 11:04 p.m. UTC | #5
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 mbox series

Patch

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