Subject: NFSv4 Bakeoff Report

From: Brent <[email-masked]>
Date: Wed, 27 Oct 1999 12:49:59 -0700

NFS Version 4 Bakeoff
              ---------------------
 
                 October 19 - 21
              Santa Clara, California

The NFS Version 4 bakeoff brought together six implementations
of the NFS version 4 protocol for 3 days of interoperability
testing.  With the NFSv4 specification becoming feature
complete, we needed the bakeoff to establish a level of
confidence in the specification, and to raise issues that often
do not come to light until we attempt to write code and attempt
to run it.

The Participants
----------------
The six implementations came from:
 
        EMC Inc.                (Server)
        Hummingbird Inc.        (Windows/NT Client and Server)
        Network Appliance       (Server)
        Sun Microsystems        (Solaris & Java client/server)
        University of Michigan CITI (Linux client and server)
 
All implementations were built independently from the draft
spec at http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-01.txt

The Network
-----------
The bakeoff was staged like a mini-Connectathon.  The participants
brought their computers, compilers and code, and connected them
to a common network.  The bakeoff network was non-routed, which
made it easy to sniff packets.  All participants had access to
an enhanced version of the Solaris snoop packet sniffer that
interpreted the NFS version 4 protocol.  Prompt protocol decodes
made is easy to determine the source of a problem: client or server.

The Code
--------
The participants brought partial implementations of the protocol
to the event, and not only fixed bugs in the existing code, but
also took advantage of the lack of email and Internet access to
implement large chunks of NFSv4. Several of us had clients and
servers that interoperated with each other, but with no other
implementation. These interoperability problems were mostly due
to errors in interpreting the spec, or to ambiguity in the spec.
Either way, these problems pointed out places where the spec
could be improved.

A typical interoperability session worked like this:
 
        1. Choose another participant to interoperate with
           (client or server).
 
        2. Start snoop and watch what happens.

        3. If test succeeds, shout for joy and high fives.

        4. If test fails, wrinkle brow and peer at snoop
           trace, printfs, source code and NFSv4 spec.
 
        5. Code fix, recompile.

        6. Call out to other participant for retry.

The ready availability of clients was particularly
convenient for those who implemented the server only.

The Presentations
-----------------
All participants concluded the testing on Thursday afternoon
with presentations that described their implementation and
progress made at the bakeoff.  These presentations will
be made available on-line via www.nfsv4.org.

The Results
-----------
All participants interoperated to some degree. There was
some initial uncertainty over the implementation of 
compound ops (several NFS operations per request) and
the open-ended file attribute operations.  These are
both features of the protocol that are significantly
different from NFS versions 2 and 3.  By the end of
the bakeoff, however, almost all implementations were
able to handle compound ops and exchange file attributes.
All implementors began with operations associated with
a simple file lookup and attribute retrieval - enough to
complete a "mount", i.e.

        PUTROOTFH, PUTFH, LOOKUP, GETFH, GETATTR

followed by operations that extended the utility of
the mount, i.e.

        READDIR, OPEN, CLOSE, READ, WRITE

and some added:

        CREATE, SETATTR, REMOVE, RENAME

bringing their clients and servers almost to the same
level of functionality as NFS version 3.

What's Next
-----------
Many participants expressed interest in attending
another bakeoff to further advance their implementations
in an atmosphere of cooperation and interoperability.
Although the bakeoff exceeded our expectations for
initial interoperability, we will need further opportunities
to validate some of the more sophisticated features of
the protocol such as security, file locking and delegation,
and named attributes.  

The next most likely venue for interoperability testing
will be Connectathon 2000 in March 2000 (www.connectathon.org).
Meanwhile, we hope to set up NFSv4 servers
on the Internet for testing of both client and server
implementations.  A list of these Internet sites will
be posted to www.nfsv4.org.
Another NFSv4-only bakeoff would be necessary to 
validate interoperation prior to submission of the protocol
spec for draft standard next August.

-------------------------