Update Netperf page for a few years of work -- most tasks are now done.
This commit is contained in:
parent
04150949ba
commit
1692b9c519
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/www/; revision=34359
1 changed files with 44 additions and 30 deletions
|
@ -1,6 +1,6 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
|
||||
<!ENTITY base CDATA "../..">
|
||||
<!ENTITY date "$FreeBSD: www/en/projects/netperf/index.sgml,v 1.19 2006/04/23 19:43:02 rwatson Exp $">
|
||||
<!ENTITY date "$FreeBSD: www/en/projects/netperf/index.sgml,v 1.20 2006/08/19 21:20:43 hrs Exp $">
|
||||
<!ENTITY title "FreeBSD Network Performance Project (netperf)">
|
||||
<!ENTITY email 'mux'>
|
||||
<!ENTITY % navinclude.developers "INCLUDE">
|
||||
|
@ -53,11 +53,10 @@
|
|||
will work toward these goals:</p>
|
||||
|
||||
<ul>
|
||||
<li><p>Complete locking work to make sure all components of the stack
|
||||
are able to run without the Giant lock. While most of the network
|
||||
stack, especially mainstream protocols, runs without Giant, some
|
||||
components require Giant to be placed back over the stack if compiled
|
||||
into the kernel, reducing parallelism.</p></li>
|
||||
<li><p>The Netperf project has completed locking work for all components
|
||||
of the network stack; as of FreeBSD 7.0 we have removed non-MPSAFE
|
||||
protocol shims, and as of FreeBSD 8.0 we have removed non-MPSAFE
|
||||
device driver shims.</p></li>
|
||||
|
||||
<li><p>Optimize locking strategies to find better balances between
|
||||
locking granularity and locking overhead. In the first cut at locking
|
||||
|
@ -126,7 +125,8 @@
|
|||
increasing effective CPU utilization and hence throughput. For
|
||||
example, introducing additional netisr threads capable of running on
|
||||
more than one CPU at a time can increase input parallelism, subject
|
||||
to maintaining desirable packet ordering.</p></li>
|
||||
to maintaining desirable packet ordering (present in FreeBSD
|
||||
8.0).</p></li>
|
||||
</ul>
|
||||
|
||||
<a name="tasks"></a>
|
||||
|
@ -204,13 +204,12 @@
|
|||
<tr>
|
||||
<td> Employ queued dispatch across netisr dispatch API </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 20041124 </td>
|
||||
<td> &status.prototyped; </td>
|
||||
<td> Pull all of the mbufs in the netisr ifqueue out of the ifqueue
|
||||
into a thread-local mbuf queue to avoid repeated lock operations
|
||||
to access the queue. Also use lock-free operations to test for
|
||||
queue contents being present. This has been prototyped in the
|
||||
rwatson_netperf branch. </td>
|
||||
<td> 20090601 </td>
|
||||
<td> &status.done </td>
|
||||
<td> Pull all of the mbufs in the netisr queue into a thread-local
|
||||
mbuf queue to avoid repeated lock operations to access the queue.
|
||||
This work was completed as part of the netisr2 project, and will
|
||||
ship with 8.0-RELEASE. </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -247,8 +246,8 @@
|
|||
critical sections to synchronize access instead of a mutex. While
|
||||
malloc(9) is less frequently used in the network stack than uma(9),
|
||||
it is used for socket address data, so is on performance critical
|
||||
paths for datagram operations. This has been committed and will
|
||||
appear in 6.0-RELEASE. </td>
|
||||
paths for datagram operations. This has been committed and appeared
|
||||
6.0-RELEASE. </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -266,11 +265,11 @@
|
|||
cost of critical sections in the common case by avoiding expensive
|
||||
microcode operations on the CPU. By restoring this model, or a
|
||||
variation on it, critical sections can be made substantially
|
||||
cheaper to enter. In particular, this change will lower the cost
|
||||
cheaper to enter. In particular, this change lowers the cost
|
||||
of critical sections on UP such that it is approximately the same
|
||||
cost as a mutex, meaning that optimizations on SMP to use critical
|
||||
sections instead of mutexes will not harm UP performance. This
|
||||
change has now been committed, and will appear in 6.0-RELEASE. </td>
|
||||
change has now been committed, and appeared in 6.0-RELEASE. </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
|
@ -296,26 +295,41 @@
|
|||
<tr>
|
||||
<td> Add true inpcb reference count support </td>
|
||||
<td> &a.mohans;, &a.rwatson;, &a.peter; </td>
|
||||
<td> 20060412 </td>
|
||||
<td> &status.new; </td>
|
||||
<td> Currently, the in-bound TCP and UDP socket paths rely on the
|
||||
<td> 20081208 </td>
|
||||
<td> &status.done; </td>
|
||||
<td> Historically, the in-bound TCP and UDP socket paths relied on
|
||||
global pcbinfo info locks to prevent PCBs being delivered to from
|
||||
being garbage collected by another thread while in use. This set
|
||||
of changes introduces a true reference model for PCBs so that the
|
||||
global lock can be released during in-bound process.</td>
|
||||
global lock can be released during in-bound process, and appear
|
||||
in 8.0-RELEASE./td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Fine-grained locking for UNIX domain sockets </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 20060416 </td>
|
||||
<td> &status.prototyped; </td>
|
||||
<td> Currently, UNIX domain sockets in FreeBSD 5.x and 6.x use a
|
||||
single global subsystem lock. This is sufficient to allow it to
|
||||
run without Giant, but results in contention with large numbers
|
||||
of processors simultaneously operating on UNIX domain sockets.
|
||||
This task introduces per-protocol control block locks in order
|
||||
to reduce contention on a larger subsystem lock. </td>
|
||||
<td> 20070226 </td>
|
||||
<td> &status.done; </td>
|
||||
<td> UNIX domain sockets in FreeBSD 5.x and 6.x use a single global
|
||||
subsystem lock. This is sufficient to allow it to run without
|
||||
Giant, but results in contention with large numbers of processors
|
||||
simultaneously operating on UNIX domain sockets. This task
|
||||
introduced per-protocol control block locks in order to reduce
|
||||
contention on a larger subsystem lock, and the results appeared in
|
||||
7.0-RELEASE. </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Multiple netisr threads </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 20090601 </td>
|
||||
<td> &status.done; </td>
|
||||
<td> Historically, the BSD network stack has used a single network
|
||||
software interrupt context, for deferred network processing. With
|
||||
the introduction of multi-processing, this became a single
|
||||
software interrupt thread. In FreeBSD 8.0, multiple netisr
|
||||
threads are now supported, up to the number of CPUs present in the
|
||||
system.</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue