ugh.book

(singke) #1

286 NFS



  • Example #1: NFS is stateless, but many programs designed for
    Unix systems require record locking in order to guarantee database
    consistency.
    NFS Hack Solution #1: Sun invented a network lock protocol and a
    lock daemon, lockd. This network locking system has all of the state
    and associated problems with state that NFS was designed to avoid.
    Why the hack doesn’t work: Locks can be lost if the server
    crashes. As a result, an elaborate restart procedure after the crash is
    necessary to recover state. Of course, the original reason for making
    NFS stateless in the first place was to avoid the need for such restart
    procedures. Instead of hiding this complexity in the lockd program,
    where it is rarely tested and can only benefit locks, it could have
    been put into the main protocol, thoroughly debugged, and made
    available to all programs.

  • Example #2: NFS is based on UDP; if a client request isn’t
    answered, the client resends the request until it gets an answer. If the
    server is doing something time-consuming for one client, all of the
    other clients who want file service will continue to hammer away at
    the server with duplicate and triplicate NFS requests, rather than
    patiently putting them into a queue and waiting for the reply.
    NFS Hack Solution #2: When the NFS client doesn’t get a response
    from the server, it backs off and pauses for a few milliseconds before
    it asks a second time. If it doesn't get a second answer, it backs off
    for twice as long. Then four times as long, and so on.
    Why the hack doesn’t work: The problem is that this strategy has
    to be tuned for each individual NFS server, each network. More
    often than not, tuning isn’t done. Delays accumulate. Performance
    lags, then drags. Eventually, the sysadmin complains and the com-
    pany buys a faster LAN or leased line or network concentrator,
    thinking that throwing money at the problem will make it go away.

  • Example #3: If you delete a file in Unix that is still open, the file’s
    name is removed from its directory, but the disk blocks associated
    with the file are not deleted until the file is closed. This gross hack
    allows programs to create temporary files that can’t be accessed by
    other programs. (This is the second way that Unix uses to create
    temporary files; the other technique is to use the mktmp() function
    and create a temporary file in the /tmp directory that has the process
    ID in the filename. Deciding which method is the grosser of the two

Free download pdf