Go to file
David Greenman c3229e05a3 Improved connection establishment performance by doing local port lookups via
a hashed port list. In the new scheme, in_pcblookup() goes away and is
replaced by a new routine, in_pcblookup_local() for doing the local port
check. Note that this implementation is space inefficient in that the PCB
struct is now too large to fit into 128 bytes. I might deal with this in the
future by using the new zone allocator, but I wanted these changes to be
extensively tested in their current form first.

Also:
1) Fixed off-by-one errors in the port lookup loops in in_pcbbind().
2) Got rid of some unneeded rehashing. Adding a new routine, in_pcbinshash()
   to do the initialial hash insertion.
3) Renamed in_pcblookuphash() to in_pcblookup_hash() for easier readability.
4) Added a new routine, in_pcbremlists() to remove the PCB from the various
   hash lists.
5) Added/deleted comments where appropriate.
6) Removed unnecessary splnet() locking. In general, the PCB functions should
   be called at splnet()...there are unfortunately a few exceptions, however.
7) Reorganized a few structs for better cache line behavior.
8) Killed my TCP_ACK_HACK kludge. It may come back in a different form in
   the future, however.

These changes have been tested on wcarchive for more than a month. In tests
done here, connection establishment overhead is reduced by more than 50
times, thus getting rid of one of the major networking scalability problems.

Still to do: make tcp_fastimo/tcp_slowtimo scale well for systems with a
large number of connections. tcp_fastimo is easy; tcp_slowtimo is difficult.

WARNING: Anything that knows about inpcb and tcpcb structs will have to be
         recompiled; at the very least, this includes netstat(1).
1998-01-27 09:15:13 +00:00
bin Cast a size_t to a long to avoid a gcc warning. 1998-01-25 08:59:08 +00:00
contrib Merge CYCLIC branch changes 1998-01-26 04:50:17 +00:00
crypto MFC: sprintf paranoia 1998-01-22 00:04:57 +00:00
etc Remove ``start='' used when testing :-( 1998-01-26 02:26:29 +00:00
games Fixed long lines in install rule. Fixed other bogons while I was here: 1998-01-16 09:43:47 +00:00
gnu comment that pvcs_to_rcs is left out since it needs perl5 1998-01-26 04:33:03 +00:00
include Suggested by: bde 1998-01-20 09:09:24 +00:00
kerberos5
kerberosIV
lib PR: 5573 1998-01-27 07:01:09 +00:00
libexec Merged just enough files from Lite2 in lfs_cleanerd to convert from 1998-01-20 14:41:53 +00:00
lkm LKM-support for converting all file-system options to new-style options. 1998-01-24 02:21:53 +00:00
release Temporary work-around for a ports building problem I really don't 1998-01-27 01:06:49 +00:00
sbin SEE ALSO swapinfo(8). 1998-01-25 17:28:52 +00:00
secure
share Generate symlinks to the "sys" and <machine> directories and put 1998-01-26 20:36:38 +00:00
sys Improved connection establishment performance by doing local port lookups via 1998-01-27 09:15:13 +00:00
tools Don't install the tcl implementation headers. The tcl distribution 1998-01-17 15:52:32 +00:00
usr.bin Add two new options: 1998-01-25 19:26:05 +00:00
usr.sbin A bit of the dpt userland utilities that got left out. 1998-01-26 06:26:41 +00:00
COPYRIGHT
Makefile Test for ${MACHINE} == "alpha" and include the bootstrap makefile instead 1998-01-11 04:51:02 +00:00
Makefile.alpha
README

README

This is the top level of the FreeBSD source directory.  This file
was last revised on: $Id: README,v 1.10 1997/02/23 09:18:39 peter Exp $

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 and the contents of /etc.  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 with config(8) 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.

The sample kernel configuration files reside in the sys/i386/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 LINT contains entries for all possible devices, not
just those commonly used, and is meant more as a general reference
than an actual kernel configuration file (a kernel built from it
wouldn't even run).


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

contrib		Packages contributed by 3rd parties.

eBones		Kerberos package - NOT FOR EXPORT!

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.

lib		System libraries.

libexec		System daemons.

lkm		Loadable Kernel Modules.

release		Release building Makefile & associated tools.

sbin		System commands.

secure		DES and DES-related utilities - NOT FOR EXPORT!

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