freebsd-nq/sys
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
..
alpha Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
amd64 Include all of isa/ipl.s into exception.s as there is now nothing left in 2002-07-10 02:24:44 +00:00
arm Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
boot Add support for passing metadata. 2002-07-10 12:13:16 +00:00
cam Correct spelling of 'supplied'. 2002-06-19 20:44:48 +00:00
coda More s/file system/filesystem/g 2002-05-16 21:28:32 +00:00
compat Move the switch statement labels for the explicit 64-bit 2002-07-09 19:25:43 +00:00
conf Add setjmp (needed for DDB). 2002-07-10 12:26:17 +00:00
contrib Resolve conflicts arising from the ACPI CA 20020611 import. 2002-07-09 17:54:02 +00:00
crypto Fixed AES encryption algorithm bug 2002-05-24 07:26:17 +00:00
ddb Part 1 of KSE-III 2002-06-29 17:26:22 +00:00
dev Incorporate changes made to the NetBSD version of this driver. 2002-07-10 10:24:23 +00:00
fs - Change all LK_SHARE locks to LK_EXCLUSIVE. Shared locks aren't quite safe 2002-07-09 19:43:39 +00:00
geom Don't use the static thread.. it is going away. 2002-06-29 07:47:20 +00:00
gnu Use hashdestroy() now that it exists. 2002-06-30 03:01:44 +00:00
i4b Remote pci.h/NPCI usage from i4b code. 2002-06-13 06:04:28 +00:00
i386 Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
ia64 Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
isa Clock frequencies reported by sysctl should be unsigned values. Discovered 2002-06-22 16:30:18 +00:00
isofs/cd9660 Quick fix for non-unique inode numbers for hard links. We use the 2002-05-22 08:50:18 +00:00
kern Replace the global buffer hash table with per-vnode splay trees using a 2002-07-10 17:02:32 +00:00
libkern For some reason this didn't get added in my previous commit. 2002-05-29 21:58:12 +00:00
modules Resolve conflicts arising from the ACPI CA 20020611 import. 2002-07-09 17:54:02 +00:00
net Remove 0 initializers for global/static variables, so they end up in 2002-07-07 22:42:57 +00:00
netatalk Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
netatm - Remove UM_* user land memory macros since they are no longer used. 2002-06-24 22:31:17 +00:00
netgraph NUL terminate the ACNAME passed to userland. 2002-06-22 21:00:53 +00:00
netinet Change one variable to make it easier to switch between ipfw and ipfw2 2002-07-09 06:53:38 +00:00
netinet6 Notify functions can destroy the pcb, so they have to return an 2002-06-14 08:35:21 +00:00
netipx Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
netkey - fixed the order of searching SA table for packets. 2002-07-10 16:39:38 +00:00
netnatm Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
netncp Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
netns Fix bug which has been there since rev 1.1 where && was used instead of &. 2002-06-09 03:57:34 +00:00
netsmb Back out my lats commit of locking down a socket, it conflicts with hsu's work. 2002-05-31 11:52:35 +00:00
nfs
nfsclient Replace the global buffer hash table with per-vnode splay trees using a 2002-07-10 17:02:32 +00:00
nfsserver Replace the global buffer hash table with per-vnode splay trees using a 2002-07-10 17:02:32 +00:00
pc98 s/procrunnable/kserunnable/ in a comment 2002-07-08 01:52:55 +00:00
pccard Lots of people have had to hack around the fixed address for cardbus 2002-06-27 19:56:22 +00:00
pci Fix if_timer logic to make sure that there is always a timeout 2002-06-30 22:16:22 +00:00
posix4 Part 1 of KSE-III 2002-06-29 17:26:22 +00:00
powerpc Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
rpc
security/lomac Get rid of warnings, there's no need to do preprocessor concatination of 2002-06-01 18:45:33 +00:00
sparc64 Remove label_t and physadr, which seem to have never been used in 2002-07-10 15:47:59 +00:00
sys Replace the global buffer hash table with per-vnode splay trees using a 2002-07-10 17:02:32 +00:00
tools - Use 'options DEBUG_VFS_LOCKS' instead of the DEBUG_ALL_VFS_LOCKS 2002-07-07 06:39:36 +00:00
ufs Fixed some printf format errors (4 new ones reported by gcc and 5 nearby 2002-07-08 12:42:29 +00:00
vm o Lock accesses to the page queues in vm_object_terminate(). 2002-07-09 18:02:03 +00:00
Makefile Milestone #1 in cross-arch make releases. 2002-04-26 17:55:27 +00:00