19 Oct, 2005

2 commits


24 Sep, 2005

20 commits

  • Each transport implementation can now set unique bind, connect,
    reestablishment, and idle timeout values. These are variables,
    allowing the values to be modified dynamically. This permits
    exponential backoff of any of these values, for instance.

    As an example, we implement exponential backoff for the connection
    reestablishment timeout.

    Test-plan:
    Destructive testing (unplugging the network temporarily). Connectathon
    with UDP and TCP.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: Move some macros that are specific to the Van Jacobson
    implementation into xprt.c. Get rid of the cong_wait field in
    rpc_xprt, which is no longer used. Get rid of xprt_clear_backlog.

    Test-plan:
    Compile with CONFIG_NFS enabled.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • The final place where congestion control state is adjusted is in
    xprt_release, where each request is finally released. Add a callout
    there to allow transports to perform additional processing when a
    request is about to be released.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for significant
    regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • A new interface that allows transports to adjust their congestion window
    using the Van Jacobson implementation in xprt.c is provided.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for
    significant regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Allow transports to hook the retransmit timer interrupt. Some transports
    calculate their congestion window here so that a retransmit timeout has
    immediate effect on the congestion window.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for significant
    regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • The next method we abstract is the one that releases a transport,
    allowing another task to have access to the transport.

    Again, one generic version of this is provided for transports that
    don't need the RPC client to perform congestion control, and one
    version is for transports that can use the original Van Jacobson
    implementation in xprt.c.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for
    significant regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • The next several patches introduce an API that allows transports to
    choose whether the RPC client provides congestion control or whether
    the transport itself provides it.

    The first method we abstract is the one that serializes access to the
    RPC transport to prevent the bytes from different requests from mingling
    together. This method provides proper request serialization and the
    opportunity to prevent new requests from being started because the
    transport is congested.

    The normal situation is for the transport to handle congestion control
    itself. Although NFS over UDP was first, it has been recognized after
    years of experience that having the transport provide congestion control
    is much better than doing it in the RPC client. Thus TCP, and probably
    every future transport implementation, will use the default method,
    xprt_lock_write, provided in xprt.c, which does not provide any kind
    of congestion control. UDP can continue using the xprt.c-provided
    Van Jacobson congestion avoidance implementation.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for significant
    regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Prepare the way to remove the "xprt->nocong" variable by adding a callout
    to the RPC client transport switch API to handle setting RPC retransmit
    timeouts.

    Add a pair of generic helper functions that provide the ability to set a
    simple fixed timeout, or to set a timeout based on the state of a round-
    trip estimator.

    Test-plan:
    Use WAN simulation to cause sporadic bursty packet loss. Look for significant
    regression in performance or client stability.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Now we can fix up the last few places that use the "xprt->stream"
    variable, and get rid of it from the rpc_xprt structure.

    Test-plan:
    Destructive testing (unplugging the network temporarily). Connectathon
    with UDP and TCP.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Split the socket write space callback function into a TCP version and UDP
    version, eliminating one dependence on the "xprt->stream" variable.

    Keep the common pieces of this path in xprt.c so other transports can use
    it too.

    Test-plan:
    Write-intensive workload on a single mount point.

    Version: Thu, 11 Aug 2005 16:07:51 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: change some comments to reflect the realities of the new RPC
    transport switch mechanism. Get rid of unused xprt_receive() prototype.

    Also, organize function prototypes in xprt.h by usage and scope.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:07:21 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: remove only reference to xprt->pending from the socket transport
    implementation. This makes a cleaner interface for other transport
    implementations as well.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:06:52 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: get rid of a name reference to sockets in the generic parts of the
    RPC client by renaming the sockstate field in the rpc_xprt structure.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:05:53 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: Replace the xprt_lock with something more aptly named. This lock
    single-threads the XID and request slot reservation process.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:05:26 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: replace a name reference to sockets in the generic parts of the RPC
    client by renaming sock_lock in the rpc_xprt structure.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:05:00 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Introduce block header comments and a function naming convention to the
    socket transport implementation. Provide a debug setting for transports
    that is separate from RPCDBG_XPRT. Eliminate xprt_default_timeout().

    Provide block comments for exposed interfaces in xprt.c, and eliminate
    the useless obvious comments.

    Convert printk's to dprintk's.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled.

    Version: Thu, 11 Aug 2005 16:04:04 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Move the bulk of client-side socket-specific code into a separate source
    file, net/sunrpc/xprtsock.c.

    Test-plan:
    Millions of fsx operations. Performance characterization such as "sio" or
    "iozone". Destructive testing (unplugging the network temporarily, server
    reboots). Connectathon with v2, v3, and v4.

    Version: Thu, 11 Aug 2005 16:03:38 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Clean-up: Move some code that is common to both RPC client- and server-side
    socket transports into its own source file, net/sunrpc/socklib.c.

    Test-plan:
    Compile kernel with CONFIG_NFS enabled. Millions of fsx operations over
    UDP, client and server. Connectathon over UDP.

    Version: Thu, 11 Aug 2005 16:03:09 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Implement a best practice: don't use exponential backoff when computing
    retransmit timeout values on TCP connections, but simply retransmit
    at regular intervals.

    This also fixes a bug introduced when xprt_reset_majortimeo() was added.

    Test-plan:
    Enable RPC debugging and watch timeout behavior on a NFS/TCP mount.

    Version: Thu, 11 Aug 2005 16:02:19 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • Fix up xprt_connect_status: the soft timeout logic was clobbering tk_status,
    so TCP connect errors were not properly reported on soft mounts.

    Test-plan:
    Destructive testing (unplugging the network temporarily). Connectathon
    with UDP and TCP.

    Version: Thu, 11 Aug 2005 16:01:28 -0400

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

08 Jul, 2005

1 commit

  • In __xprt_lock_write() we check to see if `task' is NULL, but in other places
    we just go and dereference it.

    `task' shouldn't be NULL anyway, so remove this test.

    This defect was found automatically by Coverity Prevent, a static analysis
    tool.

    Signed-off-by: Zaur Kambarov
    Acked-by: Trond Myklebust
    Cc: Neil Brown
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMBAROV, ZAUR
     

25 Jun, 2005

1 commit


23 Jun, 2005

5 commits


17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds