1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-19 10:53:58 +00:00
Mirror of the FreeBSD src repository https://git.FreeBSD.org/src.git .
Go to file
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
bin Update usage for the addition of -n in rev 1.35 of mv.c. 2002-07-09 17:45:13 +00:00
contrib Make our i386 hacks in a less vendor file disturbing manner. 2002-07-10 07:48:45 +00:00
crypto Rewrite to use the buffer API instead of roll-your-own messaging. 2002-07-05 15:27:26 +00:00
etc Rename 'usio' to 'ucom'. 2002-07-10 16:07:33 +00:00
games Fix whitespace botch in previous commit. 2002-07-09 06:47:29 +00:00
gnu Make our i386 hacks in a less vendor file disturbing manner. 2002-07-10 07:48:45 +00:00
include Don't define wchar_t if we are a C++ compiler. 2002-07-09 05:13:30 +00:00
kerberos5 Heimdal Texinfo manual. 2002-07-05 05:47:13 +00:00
kerberosIV This code is no longer WARNS level 2 OK. 2002-05-15 06:32:29 +00:00
lib Fix some comments. 2002-07-10 16:35:02 +00:00
libexec Add ability to only beep when mail arrives. 2002-07-09 02:16:49 +00:00
release New release note: kbdmap(1)/vidfont(1) C rewrite. 2002-07-06 19:42:39 +00:00
sbin Replace the 'at least the amount of physical memory + 64K' with a better 2002-07-09 17:27:08 +00:00
secure ssh-keysign(8) belongs in /usr/libexec, not in /usr/bin, and needs to be 2002-07-05 08:39:09 +00:00
share Fix a typo. 2002-07-10 09:06:42 +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 Update another mention of <CR><CR> I missed the first time around (rev 1.2) 2002-07-04 05:16:19 +00:00
usr.bin Correct a comment: Typing in the root password at the "Key:" prompt 2002-07-10 04:05:33 +00:00
usr.sbin Remove some missing words. 2002-07-10 03:39:52 +00:00
COPYRIGHT
MAINTAINERS Express my interest about being notified for fdc(4) and sppp(4) changes. 2002-07-10 14:51:48 +00:00
Makefile correct syntax in last commit 2002-06-24 20:13:09 +00:00
Makefile.inc1 libufs does not need built before most things, after all. 2002-07-01 17:51:43 +00:00
Makefile.upgrade
README Spell "FreeBSD" correctly. 2002-03-26 12:35:49 +00:00
UPDATING Approved by: imp@freebsd.org 2002-07-03 04:23:38 +00:00

This is the top level of the FreeBSD source directory.  This file
was last revised on:
$FreeBSD$

For copyright information, please see the file COPYRIGHT in this
directory (additional copyright information also exists for some
sources in this tree - please see the specific source directories for
more information).

The Makefile in this directory supports a number of targets for
building components (or all) of the FreeBSD source tree, the most
commonly used one being ``world'', which rebuilds and installs
everything in the FreeBSD system from the source tree except the
kernel, the kernel-modules and the contents of /etc.  The
``buildkernel'' and ``installkernel'' targets build and install
the kernel and the modules (see below).  Please see the top of
the Makefile in this directory for more information on the
standard build targets and compile-time flags.

Building a kernel is a somewhat more involved process, documentation
for which can be found at:
   http://www.FreeBSD.org/handbook/kernelconfig.html
And in the config(8) man page.
Note: If you want to build and install the kernel with the
``buildkernel'' and ``installkernel'' targets, you might need to build
world before.  More information is available in the handbook.

The sample kernel configuration files reside in the sys/<arch>/conf
sub-directory (assuming that you've installed the kernel sources), the
file named GENERIC being the one used to build your initial installation
kernel.  The file NOTES contains entries and documentation for all possible
devices, not just those commonly used.  It is the successor of the ancient
LINT file, but in contrast to LINT, it is not buildable as a kernel but a
pure reference and documentation file.


Source Roadmap:
---------------
bin		System/user commands.

contrib		Packages contributed by 3rd parties.

crypto		Cryptography stuff (see crypto/README).

etc		Template files for /etc.

games		Amusements.

gnu		Various commands and libraries under the GNU Public License.
		Please see gnu/COPYING* for more information.

include		System include files.

kerberos5	Kerberos5 (Heimdal) package.

kerberosIV	KerberosIV (eBones) package.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		Cryptographic libraries and commands.

share		Shared resources.

sys		Kernel sources.

tools		Utilities for regression testing and miscellaneous tasks.

usr.bin		User commands.

usr.sbin	System administration commands.


For information on synchronizing your source tree with one or more of
the FreeBSD Project's development branches, please see:

  http://www.FreeBSD.org/handbook/synching.html