projects techreports press lab location staff
citi top.2 top.3
citi mid.3
bot.1 bot.2 bot.3

Projects: NFS Version 4 Open Source Reference Implementation

Linux Open Source Reference Implementation NFS Version 4 Bakeoff Report


This details my experience at the NFS Version 4 Bakeoff.

My strategy is to adapt the existing Linux NFSv3 kernel client and server code to first be NVSv4 compliant on the wire, leaving the client and server error returns and logic NFSv3 where possible. My goal for the bakeoff was to demonstrate the Linux client and server NFSv4 on the wire correctness.

I began the bakeoff having implemented the NFSv4 client and server COMPOUND rpc mechanism with the following operations:

  • GETATTR (20 of the 53 attributes)

which along with a modified mount program, allowed the Linux client to use the compound rpc to perform an NFSv4 mount (PUTROOTFH,LOOKUP, GETATTR,GETFH), and then an ls (PUTFH, READDIR) on the mount point.

I was pleased to find that the Linux client was able to mount and ls the Solaris server on first try. By the end of the bakeoff, the Linux client and server had filled it's dance card - mount and ls worked with all available clients and servers.

	|               SERVER
CLIENT  | Solaris | Java  | WinNT | Linux | NetApp |
Solaris |         |       |       |mount  |        |
        |         |       |       |readdir|        |
Java    |         |       |       |(see *)|        |
        |         |       |       |readdir|        |
Win95   |         |       |       |mount  |        |
        |         |       |       |readdir|        |
Linux   |mount    |mount  |mount  |mount  |mount   |
        |readdir  |readdir|readdir|readdir|readdir |

* The Java Client does not perform a mount.
EMC Inc. (Server)
Sun Microsystems (Solaris & Java client/server)
Network Appliance (Server)
Hummingbird Inc. (Windows/NT Client and Server)
University of Michigan, CITI (Linux client and server)

The EMC server was very early on in the development cycle, and was not available for interoperation.

The Linux kernel does not have the Sun RPC XDR primitives used by the xdr code generated by rpcgen, thus all XDR functions are coded by hand. During the process of interoperating with all available implementations, I found several bugs in my XDR implementation, and in my interpretation of the NFSv4 protocol spec. It was extreemly useful to test against the other clients and servers.

There was also a good deal of discussion on the protocol, and my understanding of locking and delegation improved.

I coded several GETATTR attributes, ACCESS, and most of READ while at the bakeoff. Oh, and I also coded the other NFSv4 proceedure, the NULL rpc ;).

I thought the bakeoff was very successful. Everyone made progress. projects | techreports | press | lab | location | staff Email address
or call +1 734 763 2929
Copyright © 1996-2013
The Regents of the University of Michigan