freebsd-nq/sys/nfsclient
Matthew Dillon d331c5d43f Replace the global buffer hash table with per-vnode splay trees using a
methodology similar to the vm_map_entry splay and the VM splay that Alan
Cox is working on.  Extensive testing has appeared to have shown no
increase in overhead.

Disadvantages
    Dirties more cache lines during lookups.

    Not as fast as a hash table lookup (but still N log N and optimal
    when there is locality of reference).

Advantages
    vnode->v_dirtyblkhd is now perfectly sorted, making fsync/sync/filesystem
    syncer operate more efficiently.

    I get to rip out all the old hacks (some of which were mine) that tried
    to keep the v_dirtyblkhd tailq sorted.

    The per-vnode splay tree should be easier to lock / SMPng pushdown on
    vnodes will be easier.

    This commit along with another that Alan is working on for the VM page
    global hash table will allow me to implement ranged fsync(), optimize
    server-side nfs commit rpcs, and implement partial syncs by the
    filesystem syncer (aka filesystem syncer would detect that someone is
    trying to get the vnode lock, remembers its place, and skip to the
    next vnode).

Note that the buffer cache splay is somewhat more complex then other splays
due to special handling of background bitmap writes (multiple buffers with
the same lblkno in the same vnode), and B_INVAL discontinuities between the
old hash table and the existence of the buffer on the v_cleanblkhd list.

Suggested by: alc
2002-07-10 17:02:32 +00:00
..
bootp_subr.c Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
krpc_subr.c Simple p_ucred -> td_ucred changes to start using the per-thread ucred 2002-02-27 18:32:23 +00:00
krpc.h Cleanup and split of nfs client and server code. 2001-09-18 23:32:09 +00:00
nfs_bio.c Replace the global buffer hash table with per-vnode splay trees using a 2002-07-10 17:02:32 +00:00
nfs_lock.c Change the suser() API to take advantage of td_ucred as well as do a 2002-04-01 21:31:13 +00:00
nfs_lock.h o Modify nfslockdans() to accept a thread reference instead of a proc 2001-11-14 18:20:45 +00:00
nfs_nfsiod.c Revise the nfsiod auto tuning code. Now both the upper and lower limits 2002-01-15 20:57:21 +00:00
nfs_node.c Remove the nfs_{lock,unlock,islocked} functions and the associated 2002-04-27 22:10:16 +00:00
nfs_socket.c In namei(), we use a NULL thread for uio_td when doing a VOP_READLINK(). 2002-06-28 21:53:08 +00:00
nfs_subs.c Remove references to vm_zone.h and switch over to the new uma API. 2002-03-20 10:07:52 +00:00
nfs_vfsops.c More s/file system/filesystem/g 2002-05-16 21:28:32 +00:00
nfs_vnops.c In namei(), we use a NULL thread for uio_td when doing a VOP_READLINK(). 2002-06-28 21:53:08 +00:00
nfs.h In namei(), we use a NULL thread for uio_td when doing a VOP_READLINK(). 2002-06-28 21:53:08 +00:00
nfsargs.h Allow users to use the 'nolockd' or -L options with mount_nfs in order 2001-11-12 02:33:52 +00:00
nfsdiskless.h Fix warnings.. bootpc_init() and related. 2002-02-28 03:07:35 +00:00
nfsm_subs.h Avoid passing the variable `tl' to functions that just use it for 2001-12-18 01:22:09 +00:00
nfsmount.h o Make the credential used by socreate() an explicit argument to 2001-12-31 17:45:16 +00:00
nfsnode.h Remove the nfs_{lock,unlock,islocked} functions and the associated 2002-04-27 22:10:16 +00:00
nfsstats.h Cleanup and split of nfs client and server code. 2001-09-18 23:32:09 +00:00
nlminfo.h Cleanup and split of nfs client and server code. 2001-09-18 23:32:09 +00:00