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+
- dCache (the project where I am involved)
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.