Since its introduction by Sun Microsystems in 1986, the NFS protocol has become the defacto standard distributed file system protocol for Unix based workstations. Most of these Unix implementations are based on the reference port provided by Sun Microsystems. Research published to date on NFS performance has focused on the problems of NFS server write performance and NFS server performance characterization. This paper discusses other performance and implementation aspects of NFS observed while tuning a rather different implementation of the Sun NFS protocol for Unix. Aspects of performance related to differences in caching mechanisms, the use of different RPC transport protocols and techniques that minimize memory to memory copying are explored. In particular, the notion that TCP transport would provide unacceptable performance for NFS RPCs is shown to be unfounded. Introduction There are several aspects of the 4.3BSD Reno implementation of Network File System (NFS)1 that set it apart from the Sun reference port.2 In the 4.3BSD Reno implementation, particular emphasis has been put on caching mechanisms, network transport layer independence and the avoidance of memory to memory copy operations. To minimize memory to memory copying and retain network transport layer independence, the NFS remote procedure call (RPC) requests and replies are handled directly in mbuf3 data areas. Network transport independence permits experimentation with running NFS over other protocols, including TCP. As such, it was felt that by benchmarking this implementation of NFS, we could gain insight into various aspects of performance that have not yet been adequately addressed. This paper describes the results of benchmarking and tuning in three major areas: Server CPU overheads Effects of transport protocols Effects of different caching mechanisms In Section 1, a brief overview of the NFS protocol is presented, followed in Section 2 by an overview of the 4.3BSD Reno NFS implementation. Section 3 discusses techniques used to reduce server CPU overhead. Section 4 compares the performance of NFS over a variety of transport protocols operating on three different internetwork topologies. Following this, a comparison in Section 5 of 4.3BSD Reno NFS with Ultrix† NFS is used to identify significant differences related to caching mechanisms. The conclusion summarizes the results and suggests areas of distributed file system performance that 1 NFS is a trademark of Sun Microsystems Inc. 2 Along with the published NFS specification, Sun Microsystems licensed a reference port of NFS which forms the basis of most commercially available NFS systems. Since I have no access to this code, information about its structure was gleaned from a variety of publications. Apologies for any inaccuracies w.r.t. this port. 3 mbuf is the Berkeley Unix structure for handling network buffers. † MicroVAXII, DECstation and Ultrix are trademarks of Digital Equipment Corporation
[1]
Bruce E. Keith.
Perspectives on NES File Server Performance Characterization
,
1990,
USENIX Summer.
[2]
John K. Ousterhout,et al.
Why Aren't Operating Systems Getting Faster As Fast as Hardware?
,
1990,
USENIX Summer.
[3]
Bill Nowicki.
Transport issues in the network file system
,
1989,
CCRV.
[4]
William I. Nowicki,et al.
NFS: Network File System Protocol specification
,
1989,
RFC.
[5]
Jeffrey Mogul,et al.
Spritely NFS: Implementation and Performance of Cache-Consistency Protocols
,
1989
.
[6]
G. Chesson,et al.
Protocol engine design
,
1988
.
[7]
Van Jacobson,et al.
TCP extensions for long-delay paths
,
1988,
RFC.
[8]
V. Jacobson,et al.
Congestion avoidance and control
,
1988,
SIGCOMM '88.
[9]
Christopher A. Kent,et al.
Fragmentation considered harmful
,
1987,
SIGCOMM '87.
[10]
David R. Cheriton,et al.
VMTP: a transport protocol for the next generation of communication systems
,
1986,
SIGCOMM '86.
[11]
Dan Walsh,et al.
Design and implementation of the Sun network filesystem
,
1985,
USENIX Conference Proceedings.