OPNsense - FreeBSD source
Find a file
Adrian Chadd 516f67965a Break the RX processing up into smaller chunks of 128 frames each.
Right now processing a full 512 frame queue takes quite a while (measured
on the order of milliseconds.) Because of this, the TX processing ends up
sometimes preempting the taskqueue:

* userland sends a frame
* it goes in through net80211 and out to ath_start()
* ath_start() will end up either direct dispatching or software queuing a
  frame.

If TX had to wait for RX to finish, it would add quite a few ms of
additional latency to the packet transmission.  This in the past has
caused issues with TCP throughput.

Now, as part of my attempt to bring sanity to the TX/RX paths, the first
step is to make the RX processing happen in smaller 'parts'. That way
when TX is pushed into the ath taskqueue, there won't be so much latency
in the way of things.

The bigger scale change (which will come much later) is to actually
process the frames in the ath_intr taskqueue but process _frames_ in
the ath driver taskqueue.  That would reduce the latency between
processing and requeuing new descriptors. But that'll come later.

The actual work:

* Add ATH_RX_MAX at 128 (static for now);
* break out of the processing loop if npkts reaches ATH_RX_MAX;
* if we processed ATH_RX_MAX or more frames during the processing loop,
  immediately reschedule another RX taskqueue run.  This will handle
  the further frames in the taskqueue.

This should have very minimal impact on the general throughput case,
unless the scheduler is being very very strange or the ath taskqueue
ends up spending a lot of time on non-RX operations (such as TX
completion.)
2012-10-14 20:31:38 +00:00
bin mdoc: don't nest displays. The markup here isn't adding anything anyway. 2012-10-14 13:59:17 +00:00
cddl Make sure that each va_start has one and only one matching va_end, 2012-09-28 07:51:30 +00:00
contrib - Remove GNU sort and the WITH_GNU_SORT knob 2012-10-13 18:40:39 +00:00
crypto openssl: change SHLIB_VERSION_NUMBER to reflect the reality 2012-09-11 06:10:49 +00:00
etc Make a command for pkg_info changeable like pkg_version in 2012-10-13 14:45:42 +00:00
games Correct the tip about finding all the directories on the system 2012-10-02 00:30:15 +00:00
gnu - Remove GNU sort and the WITH_GNU_SORT knob 2012-10-13 18:40:39 +00:00
include rpc: convert all uid and gid variables to u_int. 2012-10-04 04:15:18 +00:00
kerberos5 Add support for bmake. This includes: 2012-10-06 20:01:05 +00:00
lib mdoc: avoid nested displays. 2012-10-14 14:45:54 +00:00
libexec atrun: Do not assume that MAXLOGNAME <= 100. 2012-09-26 20:47:39 +00:00
release Exclude potential circular symlink when creating src tarball. 2012-10-11 18:41:32 +00:00
rescue unbreak build: rescue now needs -ljail if MK_ZFS is on 2012-09-20 08:50:39 +00:00
sbin Remove trailing whitespace. 2012-10-14 07:22:56 +00:00
secure Upgrade OpenSSH to 6.1p1. 2012-09-03 16:51:41 +00:00
share Bump .Dd 2012-10-14 13:45:13 +00:00
sys Break the RX processing up into smaller chunks of 128 frames each. 2012-10-14 20:31:38 +00:00
tools - Remove GNU sort and the WITH_GNU_SORT knob 2012-10-13 18:40:39 +00:00
usr.bin - Remove GNU sort and the WITH_GNU_SORT knob 2012-10-13 18:40:39 +00:00
usr.sbin Remove cvs/cvsup reference. 2012-10-14 10:12:32 +00:00
COPYRIGHT Happy 2012 to FreeBSD users in Samoa. 2011-12-31 04:38:04 +00:00
LOCKS Update LOCKS syntax. 2008-06-05 19:47:58 +00:00
MAINTAINERS Remove my pre-commit review request for mergemaster 2012-10-08 10:34:49 +00:00
Makefile Add support for bmake. This includes: 2012-10-06 20:01:05 +00:00
Makefile.inc1 Fix the showconfig target. bmake sends debug output to stderr. 2012-10-07 17:48:38 +00:00
ObsoleteFiles.inc Do not install incomplete unwind.h from clang. This header file was meant 2012-10-05 00:35:13 +00:00
README Add the cddl/ directory. 2010-11-14 11:32:56 +00:00
UPDATING Import a FreeBSD port of the FUSE Linux module. 2012-10-13 23:54:26 +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 ``world''
target should only be used in cases where the source tree has not
changed from the currently running version.  See:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
for more information, including setting make(1) variables.

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/doc/en_US.ISO8859-1/books/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.

cddl		Various commands and libraries under the Common Development
		and Distribution License.

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.

lib		System libraries.

libexec		System daemons.

release		Release building Makefile & associated tools.

rescue		Build system for statically linked /rescue utilities.

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/doc/en_US.ISO8859-1/books/handbook/synching.html