mbox series

[RFC,v2,0/7] Introduce nfs-readahead-udev

Message ID 20220311190617.3294919-1-tbecker@redhat.com (mailing list archive)
Headers show
Series Introduce nfs-readahead-udev | expand

Message

Thiago Becker March 11, 2022, 7:06 p.m. UTC
Recent changes in the linux kernel caused NFS readahead to default to
128 from the previous default of 15 * rsize. This causes performance
penalties to some read-heavy workloads, which can be fixed by
tuning the readahead for that given mount.

Specifically, the read troughput on a sec=krb5p mount drops by 50-75%
when comparing the default readahead with a readahead of 15360.

Previous discussions:
https://lore.kernel.org/linux-nfs/20210803130717.2890565-1-trbecker@gmail.com/
I attempted to add a non-kernel option to mount.nfs, and it was
rejected.

https://lore.kernel.org/linux-nfs/20210811171402.947156-1-trbecker@gmail.com/
Attempted to add a mount option to the kernel, rejected as well.

I had started a separate tool to set the readahead of BDIs, but the
scope is specifically for NFS, so I would like to get the community
feeling for having this in nfs-utils.

This patch series introduces nfs-readahead-udev, a utility to
automatically set NFS readahead when NFS is mounted. The utility is
triggered by udev when a new BDI is added, returns to udev the value of
the readahead that should be used.

The tool currently supports setting read ahead per mountpoint, nfs major
version, or by a global default value.

Thiago Becker (7):
  Create nfs-readahead-udev
  readahead: configure udev
  readahead: create logging facility
  readahead: only set readahead for nfs devices.
  readahead: create the configuration file
  readahead: add mountpoint and fstype options
  readahead: documentation

 .gitignore                                    |   6 +
 configure.ac                                  |   4 +
 tools/Makefile.am                             |   2 +-
 tools/nfs-readahead-udev/99-nfs_bdi.rules.in  |   1 +
 tools/nfs-readahead-udev/Makefile.am          |  26 +++
 tools/nfs-readahead-udev/config_parser.c      |  25 +++
 tools/nfs-readahead-udev/config_parser.h      |  14 ++
 tools/nfs-readahead-udev/list.h               |  48 ++++
 tools/nfs-readahead-udev/log.h                |  16 ++
 tools/nfs-readahead-udev/main.c               | 211 ++++++++++++++++++
 .../nfs-readahead-udev/nfs-readahead-udev.man |  47 ++++
 tools/nfs-readahead-udev/parser.y             |  85 +++++++
 tools/nfs-readahead-udev/readahead.conf       |  15 ++
 tools/nfs-readahead-udev/scanner.l            |  19 ++
 tools/nfs-readahead-udev/syslog.c             |  47 ++++
 15 files changed, 565 insertions(+), 1 deletion(-)
 create mode 100644 tools/nfs-readahead-udev/99-nfs_bdi.rules.in
 create mode 100644 tools/nfs-readahead-udev/Makefile.am
 create mode 100644 tools/nfs-readahead-udev/config_parser.c
 create mode 100644 tools/nfs-readahead-udev/config_parser.h
 create mode 100644 tools/nfs-readahead-udev/list.h
 create mode 100644 tools/nfs-readahead-udev/log.h
 create mode 100644 tools/nfs-readahead-udev/main.c
 create mode 100644 tools/nfs-readahead-udev/nfs-readahead-udev.man
 create mode 100644 tools/nfs-readahead-udev/parser.y
 create mode 100644 tools/nfs-readahead-udev/readahead.conf
 create mode 100644 tools/nfs-readahead-udev/scanner.l
 create mode 100644 tools/nfs-readahead-udev/syslog.c

Comments

Steve Dickson March 15, 2022, 11:54 a.m. UTC | #1
On 3/11/22 2:06 PM, Thiago Becker wrote:
> Recent changes in the linux kernel caused NFS readahead to default to
> 128 from the previous default of 15 * rsize. This causes performance
> penalties to some read-heavy workloads, which can be fixed by
> tuning the readahead for that given mount.
> 
> Specifically, the read troughput on a sec=krb5p mount drops by 50-75%
> when comparing the default readahead with a readahead of 15360.
> 
> Previous discussions:
> https://lore.kernel.org/linux-nfs/20210803130717.2890565-1-trbecker@gmail.com/
> I attempted to add a non-kernel option to mount.nfs, and it was
> rejected.
> 
> https://lore.kernel.org/linux-nfs/20210811171402.947156-1-trbecker@gmail.com/
> Attempted to add a mount option to the kernel, rejected as well.
> 
> I had started a separate tool to set the readahead of BDIs, but the
> scope is specifically for NFS, so I would like to get the community
> feeling for having this in nfs-utils.
> 
> This patch series introduces nfs-readahead-udev, a utility to
> automatically set NFS readahead when NFS is mounted. The utility is
> triggered by udev when a new BDI is added, returns to udev the value of
> the readahead that should be used.
> 
> The tool currently supports setting read ahead per mountpoint, nfs major
> version, or by a global default value.
> 
> Thiago Becker (7):
>    Create nfs-readahead-udev
>    readahead: configure udev
>    readahead: create logging facility
>    readahead: only set readahead for nfs devices.
>    readahead: create the configuration file
>    readahead: add mountpoint and fstype options
>    readahead: documentation
> 
>   .gitignore                                    |   6 +
>   configure.ac                                  |   4 +
>   tools/Makefile.am                             |   2 +-
>   tools/nfs-readahead-udev/99-nfs_bdi.rules.in  |   1 +
>   tools/nfs-readahead-udev/Makefile.am          |  26 +++
>   tools/nfs-readahead-udev/config_parser.c      |  25 +++
>   tools/nfs-readahead-udev/config_parser.h      |  14 ++
>   tools/nfs-readahead-udev/list.h               |  48 ++++
>   tools/nfs-readahead-udev/log.h                |  16 ++
>   tools/nfs-readahead-udev/main.c               | 211 ++++++++++++++++++
>   .../nfs-readahead-udev/nfs-readahead-udev.man |  47 ++++
>   tools/nfs-readahead-udev/parser.y             |  85 +++++++
>   tools/nfs-readahead-udev/readahead.conf       |  15 ++
>   tools/nfs-readahead-udev/scanner.l            |  19 ++
>   tools/nfs-readahead-udev/syslog.c             |  47 ++++
>   15 files changed, 565 insertions(+), 1 deletion(-)
>   create mode 100644 tools/nfs-readahead-udev/99-nfs_bdi.rules.in
>   create mode 100644 tools/nfs-readahead-udev/Makefile.am
>   create mode 100644 tools/nfs-readahead-udev/config_parser.c
>   create mode 100644 tools/nfs-readahead-udev/config_parser.h
>   create mode 100644 tools/nfs-readahead-udev/list.h
>   create mode 100644 tools/nfs-readahead-udev/log.h
>   create mode 100644 tools/nfs-readahead-udev/main.c
>   create mode 100644 tools/nfs-readahead-udev/nfs-readahead-udev.man
>   create mode 100644 tools/nfs-readahead-udev/parser.y
>   create mode 100644 tools/nfs-readahead-udev/readahead.conf
>   create mode 100644 tools/nfs-readahead-udev/scanner.l
>   create mode 100644 tools/nfs-readahead-udev/syslog.c
> 
My apologies for waiting late on this... I was on PTO.

I really don't like the name of the is command. It
does not follow any of the naming conventions we used in the
past... Can you please rename the command to nfsrahead.

tia,

steved.
Thiago Becker March 18, 2022, 3:13 p.m. UTC | #2
On Tue, Mar 15, 2022 at 8:54 AM Steve Dickson <steved@redhat.com> wrote:
> My apologies for waiting late on this... I was on PTO.
>
> I really don't like the name of the is command. It
> does not follow any of the naming conventions we used in the
> past... Can you please rename the command to nfsrahead.

I have this on my git, I'm just waiting for more comments to release a
new version.

> tia,
>
> steved.

thiago