NFS4 – Current Status of pNFS on Ubuntu

file-servernfs4storage

There is a lot of confusing information out there on pNFS, and I have some very simple questions:

  • How can I check if it is running/enabled/active on my system?
  • Is pNFS widely available today or still experimental? In particular what is its status on Ubuntu 18.04? Does nfs-kernel-server use pNFS?
  • What is the difference/relationship between NFSv4.1 and pNFS?
  • Is pNFS an optional part of NFSv4.1 or is it always active when using NFSv4.1?
  • Is pNFS also a part of NFSv4.2 or just 4.1?
  • pNFS is so called because it enables parallel access from client to server. I assume this means that without pNFS a client only has a single NFS process running that connects to the server by a single TCP connection. Is this correct?

Best Answer

pNFS is an optional part of NFSv4.1 spec. IOW, you need nfs server and client to talk nfsv4.1+ to make use of it. As this is an option functionality, your client and server should support it. Linux kernel support pNFS since version 3.9 and with every new release it's get more mature.

In general, pNFS allows to spread request for a single file to multiple so called data-servers. For example, an application issues 16MB read, but the NFS server sends 2MB reads to 8 different servers that have required blocks. There are several server implementations that support pnfs:

  • Linux server; supports only block layout
  • Gangesha nfs based implementations
  • NetApp 8.1+
  • HammerSpace
  • dCache (the project where I am involved)
  • FreeBSD

I can't talk about other systems, but we are moving terabytes of data per day on systems with hundreds of pNFS data-servers exposed as a single NFS server.

Check your NFS server for pNFS capability. On the client side, ensure that the server is mounted with nfsv4.1 or above. If the server is pNFS capable, then you should see the appropriate layout driver loaded as a kernel module:

$ lsmod | grep layout
nfs_layout_nfsv41_files    36864  0
nfs_layout_flexfiles    53248  0
nfsv4                 708608  11 nfs_layout_flexfiles,nfs_layout_nfsv41_files
nfs                   323584  3 nfsv4,nfs_layout_flexfiles,nfs_layout_nfsv41_files
sunrpc                454656  22 nfsv4,auth_rpcgss,nfs_layout_flexfiles,lockd,nfs_layout_nfsv41_files,rpcsec_gss_krb5,nfs
$

as well as the corresponding kernel message:

$ dmesg  | grep Layout
[41827.049921] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
$

The Layout type specifies how clients talk to various data server. Check the Storage Protocols section in RFC 5661.

Related Topic