1. Field of the Invention
The invention relates generally to optimizing the performance of write operations in a client/server architecture, and particularly to a system and method of enhancing the performance of write requests from a client to a data store on a server disk.
2. Description of the Related Art
Microprocessor technology has evolved to the point where it has become practical to build desktop computers as powerful as earlier mainframe timesharing systems. Individuals can have their own dedicated computers for performing the bulk of their work and they can use communication facilities for transmitting data between such systems and their own computers. Computing is distributed to the sites at which it was needed rather than bringing the data to be processed to some central large scale computer installation such as a mainframe. The key to such distribution has been to transfer information between computers in computer networks. Electronic mail, file transfer, and remote database access applications have proliferated with computer network installations.
Communications in local area networks (LANs) has been made practical and economical by the "Ethernet" standard developed at Xerox Palo Alto Research Center and the "Token ring" standard available from International Business Machines Corp. (IBM). A so-called "client/server" architecture has become widespread on LANs. "Clients" are network users that need various services performed and "servers" are hardware/software network components that perform these services. Typically clients and servers reside on different computers; however, they may exist on the same computer. Many applications exist in which two processes must pass data back and forth over some type of communication transport. Moving data between computers and between processes can cause a large amount of computing overhead. When one of these processes is a "client" computer process and the other related process is a "server" process, more overhead can be incurred by moving the data to different locations in the server's local storage, such as onto a storage disk.
A fundamental component of any computer is its operating system. An operating system is logic, typically software or firmware, that makes the hardware elements of a computer usable. Thus, operation systems are primarily hardware resource managers for resources such as processors storage, input/output devices and communication devices. An important component of an operating system is the "file system". File systems generally contain access mechanisms, file management mechanisms, auxiliary storage management mechanisms, and file integrity mechanisms. A "remote file system" refers to a file system that is on a different "node" than a particular client. That is, computers on a network are referred to as nodes and each node has a unique name. A node may be a server, or client, or both. A server provides services to processors or users on one or more clients. A node issues systems calls and/or commands to the server or client. One approach to handling non-local file references in a computer network is to route all such requests to a "file server", i.e., a computer system dedicated to resolving inter-computer file references. This approach centralizes control of these references, but the file server typically becomes a bottleneck. One approach to overcome the bottleneck problem is to allow separate computers to communicate directly with one another, such as the approach taken in the "network file system (NFS)" architecture developed by Sun Microsystems Inc. In an NFS network, each computer can act as a server and/or a client.
Servers may export file systems to the network and the clients may input these file systems. An NFS server may initiate service by issuing a command to initiate daemons. Daemons are processes that perform their functions automatically when needed, and without interacting with a user. A classic example of a daemon is a system process that swaps processes to secondary storage automatically when it is necessary to lighten the load of main memory.
The NFS system is said to be robust. This is because NFS is based on remote procedure calls (RPC) which is a structural high-level approach to interprocess communication on distributed systems. An RPC allows the process on one system to call a procedure in a process on another system. The RPC transfers information strictly through the parameters in the call. The independent packets of information communicated between clients and servers on such an architecture are referred to as "datagrams", drawing on an analogy to telegrams. Communications are said to be "connection-less" because each packet must carry its full destination address in much the same way that each letter sent through the mail must carry its full destination address independent of every other letter. Because the packets contain the full destination address the server is not responsible for keeping up with client/server connections nor the state of each file sent on the network. Therefore, the failure of a client is transparent to the server. On the other hand, if a server fails the client simply retries its request which is processed upon return of server operation. Thus, the system is robust because of its apparent impunity to failure.
NFS implements file handles to identity a file. A file handle is a unique integer that is returned when a file is opened and is used to identify that file. In NFS version 2 the file handle size is 32 bytes. To read or write (part of) a file a client sends a request specifying the file, i.e., the file handle, the record position for a label referred to as the "offset" and the amount of data to be transferred referred to as the "length". Copying a large file is typically made up of a number of such write requests containing a fixed amount of contiguous data. Contiguous data means that the data resides in adjacent storage locations. Typically a client sends multiple write requests or packets to a server consisting of an amount of data that is significantly less than the maximum amount that can be processed by this server and committed to storage such as a direct access storage device (DASD). For example, an NFS version 2 client is allowed to send a maximum 8 k byte per write request but the server can process up to 64 k bytes at one time.
In order to adhere to the requirements of the connection less protocol, the client must receive an acknowledgement for each one of the multiple requests that indicates that the request has been serviced. Meeting such a protocol requires processor overhead. Thus, there is a tension between the need to adhere to the protocol expected by the client and therefore maintain the robustness of the system, and the desire to exploit the capability of the server to process more data than a client might request in a single write request. If the blocks of data in several write requests could be combined when committing the data to a direct access storage device (DASD), e.g. a hard disk, to decrease server central processor utilization and improve overall throughput while maintaining a robust system then this would clearly be an advancement in the art. Further it would be an advancement in the art to introduce such advantages without greatly increasing overhead at the server processor.