Push more of the SMPng page into the past tense. Update some descriptions
and tasks.
This commit is contained in:
parent
df5bbf2dd1
commit
983c96c6a0
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/www/; revision=29653
1 changed files with 63 additions and 58 deletions
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//FreeBSD//DTD HTML 4.01 Transitional-Based Extension//EN" [
|
||||
<!ENTITY base CDATA "..">
|
||||
<!ENTITY date "$FreeBSD: www/en/smp/index.sgml,v 1.173 2006/11/28 17:32:29 rwatson Exp $">
|
||||
<!ENTITY title "FreeBSD SMP Project">
|
||||
<!ENTITY date "$FreeBSD: www/en/smp/index.sgml,v 1.174 2006/11/29 10:25:03 joel Exp $">
|
||||
<!ENTITY title "FreeBSD SMPng Project">
|
||||
<!ENTITY email 'freebsd-smp'>
|
||||
<!ENTITY % navinclude.developers "INCLUDE">
|
||||
|
||||
|
|
@ -39,26 +39,27 @@
|
|||
<a name="goal"></a>
|
||||
<h2>Project Goal</h2>
|
||||
|
||||
<p>The FreeBSD Symmetric MultiProcessing (SMP) project, often referred to
|
||||
as SMPng (SMP next generation), is focused on introducing parallelism
|
||||
<p>The FreeBSD Next Generation Symmetric Multi-Processing Project,
|
||||
generally referred to as SMPng, is focused on introducing parallelism
|
||||
into the FreeBSD kernel.
|
||||
While earlier versions of FreeBSD (3.x, 4.x) supported parallelism in
|
||||
user processes, the kernel was limited to executing on a single
|
||||
processor at a time, using what is referred to as a "Giant lock" around
|
||||
the kernel.
|
||||
For many interesting workloads, this results in a substantial speed-up,
|
||||
as significant computation occurs in user processes, especially for
|
||||
applications such as rendering and compilation.
|
||||
While earlier versions of FreeBSD (3.x, 4.x) supported parallel
|
||||
execution of user processes, the kernel was limited to running on a
|
||||
single processor at a time, using what is referred to as a "Giant lock"
|
||||
around the kernel.
|
||||
For many interesting workloads, Giant-locked kernels give substantial
|
||||
speed-up, as significant computation occurs in user
|
||||
processes--especially for applications such as rendering and
|
||||
compilation.
|
||||
However, for kernel-intensive applications, such as intensive network
|
||||
or file system I/O, contention on the kernel lock results in little
|
||||
speed-up.
|
||||
The end goal of the SMPng Project is to decompose the Giant lock into a
|
||||
number of smaller locks, resulting in reduced contention (and improved
|
||||
SMP performance).
|
||||
However, important steps along the way include redesigning significant
|
||||
portions of the FreeBSD kernel architecture around the notion of
|
||||
ubiquitous parallelism: that at any moment, many processors might enter
|
||||
the kernel at the same time.
|
||||
or file system I/O, contention on the kernel lock results in little or
|
||||
no speed-up.
|
||||
The goal of the SMPng Project has been to decompose the Giant lock into
|
||||
a number of smaller locks, resulting in reduced contention (and
|
||||
improved SMP performance).
|
||||
However, important steps along the way have included red
|
||||
signing significant portions of the FreeBSD kernel architecture around
|
||||
the notion of ubiquitous parallelism: that at any moment, many
|
||||
processors might enter the kernel at the same time.
|
||||
This includes the introduction of more mature threading and
|
||||
synchronization primitives, interrupt threads, cache-aware allocation
|
||||
and scheduling, and topology-aware scheduling. </p>
|
||||
|
|
@ -86,7 +87,7 @@
|
|||
|
||||
<p>SMPng debuted in FreeBSD 5.0-RELEASE in January of 2003, and involved
|
||||
over five years of continuous development by a large number of members
|
||||
of the FreeBSD development team, as well as many external contributors.
|
||||
of the FreeBSD development team as well as many external contributors.
|
||||
Since 5.0, the implementation has substantially matured; in the 5.0
|
||||
release, the basic architectural changes required to support SMPng were
|
||||
complete, including new kernel memory allocators, synchronization
|
||||
|
|
@ -99,24 +100,24 @@
|
|||
system, including large parts of Virtual Memory (VM), the Virtual File
|
||||
System (VFS), UNIX File System (UFS), most parts of the network stack,
|
||||
including IPv4, IPV6, FAST_IPSEC, UNIX domain sockets, and NetGraph,
|
||||
and also from additional inter-process communication primitives.
|
||||
and also from inter-process communication primitives.
|
||||
The SMP-aware kernel slab allocator is now used almost universally, and
|
||||
the focus has changed from "make it work", to "optimize it!".
|
||||
the focus has changed from "make it work", to "optimize it".
|
||||
Simultaneous work on KSE 1:1 and M:N threading has also allowed
|
||||
applications to take advantage of new kernel parallelism.
|
||||
The FreeBSD 5.3 kernel introduced Giant-free network stack execution
|
||||
for most relevant code paths, and the FreeBSD 6.x kernel introduces
|
||||
for most relevant code paths, and the FreeBSD 6.0 kernel introduced
|
||||
MPSAFE VFS, as well as wide-spread performance optimization.</p>
|
||||
|
||||
<p>Continuing work on SMPng includes work sweeping up the "loose ends"
|
||||
that remain under Giant, such as parts of NFS, less widely used file
|
||||
systems such as NTFS, and less commonly used network stack components,
|
||||
such as SLIP.
|
||||
Another important focus is performance measurement and optimization,
|
||||
which build on and refine the SMPng architecture: the introduction of
|
||||
features such as the kernel trace facility (KTR), hardware performance
|
||||
monitor counters (hwpmc), lock profiling, and improved memory
|
||||
monitoring play important roles in this process.
|
||||
<p>Continuing work on SMPng in the 6.x branch has included work sweeping
|
||||
up the "loose ends" that remain under Giant, such as parts of NFS, and
|
||||
less commonly used network stack components.</p>
|
||||
|
||||
<p>Throughout SMPng, an important focus is performance measurement and
|
||||
optimization, which build on and refine the SMPng architecture: the
|
||||
introduction of features such as the kernel trace facility (KTR),
|
||||
hardware performance monitor counters (hwpmc), lock profiling, and
|
||||
improved memory monitoring play important roles in this process.
|
||||
Other important debugging and testing facilities include WITNESS, a
|
||||
run-time kernel lock order verifier, and wide-spread use of lock
|
||||
assertions and run-time invariants testing.</p>
|
||||
|
|
@ -125,8 +126,11 @@
|
|||
<h2>Project Plan</h2>
|
||||
|
||||
<p>This web page contains information relating to the SMPng effort;
|
||||
because of the large amount of work and rapid pace of development,
|
||||
it can fall a bit behind reality.</p>
|
||||
because of the immense scope of the work and rapid pace of development,
|
||||
it captures only a subset of what has been done. As the base SMPng
|
||||
Project, moving towards fine-grained locking, is complete, this
|
||||
information is largely historical, and does not attempt to capture
|
||||
more recent work on locking and multi-processor performance.</p>
|
||||
|
||||
<p>The task list below is not intended to be complete, but does
|
||||
represent a set of relevant and/or important components of the
|
||||
|
|
@ -149,7 +153,7 @@
|
|||
|
||||
<p>Locking down of individual device drivers is tracked at
|
||||
<a href="http://www.FreeBSD.org/projects/busdma/">the busdma and
|
||||
SMPng driver conversion webpage</a>.</p>
|
||||
SMPng driver conversion web page</a>.</p>
|
||||
|
||||
<p>Network stack locking information is available at &a.rwatson;'s
|
||||
<a href="http://www.watson.org/~robert/freebsd/netperf/">netperf web
|
||||
|
|
@ -400,8 +404,8 @@
|
|||
<tr>
|
||||
<td> NFS Server </td>
|
||||
<td> &status.wip; </td>
|
||||
<td> 24 November 2004 </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 24 February 2007 </td>
|
||||
<td> &a.rwatson;, &a.jeff; </td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
|
@ -1702,8 +1706,8 @@
|
|||
split "in interrupt context" and "in interrupt thread"
|
||||
code so as to acknowledge interrupts faster. This will permit
|
||||
lower latency in interrupt handling. </td>
|
||||
<td> &a.peter;, &a.scottl; </td>
|
||||
<td> 1 July 2005 </td>
|
||||
<td> &a.piso; </td>
|
||||
<td> 24 February 2007 </td>
|
||||
<td> &status.wip; </td>
|
||||
</tr>
|
||||
|
||||
|
|
@ -2244,6 +2248,20 @@
|
|||
<td> &status.done; </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Lock down netnatm. </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> April 2006 </td>
|
||||
<td> &status.done; </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Default to direct dispatch from ithreads </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 28 November 2006 </td>
|
||||
<td> &status.done; </td>
|
||||
</tr>
|
||||
|
||||
<!-- WIP -->
|
||||
|
||||
<tr>
|
||||
|
|
@ -2318,22 +2336,16 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Lock down netnatm. </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> 01 July 2005 </td>
|
||||
<td> &status.wip; </td>
|
||||
|
||||
<tr>
|
||||
<td> Research and select options for inbound network stack parallelism. Direct dispatch is one option currently being considered. </td>
|
||||
<td> &a.rwatson; </td>
|
||||
<td> Locking for polling(4). </td>
|
||||
<td> &a.pjd;, &a.glebius; </td>
|
||||
<td> 19 October 2005 </td>
|
||||
<td> &status.wip; </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> Locking for polling(4). </td>
|
||||
<td> &a.pjd;, &a.glebius; </td>
|
||||
<td> 19 October 2005 </td>
|
||||
<td> BPF locking needs some cleanup, there are some race conditions there relating to interface removal. </td>
|
||||
<td> &a.csjp; </td>
|
||||
<td> 2 June 2006 </td>
|
||||
<td> &status.wip; </td>
|
||||
</tr>
|
||||
|
||||
|
|
@ -2403,13 +2415,6 @@
|
|||
<td> &status.new; </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> BPF locking needs some cleanup, there are some race conditions there relating to interface removal. </td>
|
||||
<td> </td>
|
||||
<td> 19 October 2005 </td>
|
||||
<td> &status.new; </td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> When interfaces are torn down, there are a number of races (not all associated with SMPng) that need to be thought about. </td>
|
||||
<td> </td>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue