Weird performances: -CURRENT vs 5.2.1

Marc Fonvieille blackend at
Thu Aug 19 00:26:23 PDT 2004

On Wed, Aug 18, 2004 at 05:05:13PM -0400, Mike Tancsa wrote:
> Hi,
>         As someone who is also going to start testing the waters with 
> RELENG_5 on some non critical production servers (e.g. one of n spam and av 
> scanning machines), I take it you mean,
>         FreeBSD 5.x has many debugging features turned on, in
>         both the kernel and userland.  These features attempt to detect
>         incorrect use of system primitives, and encourage loud failure
>         through extra sanity checking and fail stop semantics.  They
>         also substantially impact system performance.  If you want to
>         do performance measurement, benchmarking, and optimization,
>         you'll want to turn them off.  This includes various WITNESS-
>         related kernel options, INVARIANTS, malloc debugging flags
>         in userland, and various verbose features in the kernel.  Many
>         developers choose to disable these features on build machines
>         to maximize performance.
> Are there more details somewhere as to what exactly to turn off and tweak ?

It's not really documented.  To sum up, you have to remove these lines
from your kernel configuration file:

makeoptions     DEBUG=-g                # Build kernel with gdb(1) debug symbols

# Debugging for use in -current
options         KDB                     # Enable kernel debugger support.
options         DDB                     # Support DDB.
options         GDB                     # Support remote GDB.
options         INVARIANTS              # Enable calls of extra sanity checking
options         INVARIANT_SUPPORT       # Extra sanity checks of internal struct
ures, required by INVARIANTS
options         WITNESS                 # Enable checks to detect deadlocks and cycles
options         WITNESS_SKIPSPIN        # Don't run witness on spinlocks for spe

In fact INVARIANTS and WITNESS related lines are the more important to
maximize performance, the others lines do not really change things.
And then do a:

ln -s aj /etc/malloc.conf

This one is important too, by default malloc routines uses AJ flags (be
careful with the case) under -CURRENT, even if you don't have any
malloc.conf file, look at malloc(3) manual page for more details.


More information about the freebsd-current mailing list