doc/ja/smp/index.sgml
2002-03-06 01:58:46 +00:00

1207 lines
29 KiB
Text

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" [
<!ENTITY base CDATA "..">
<!ENTITY date "$FreeBSD: www/ja/smp/index.sgml,v 1.6 2002/01/25 06:37:04 kuriyama Exp $">
<!ENTITY title "FreeBSD SMP Project">
<!ENTITY email 'freebsd-smp'>
<!ENTITY % includes SYSTEM "../includes.sgml"> %includes;
<!-- Status levels -->
<!ENTITY status.done "<font color=green>Done</font>">
<!ENTITY status.wip "<font color=blue>In progress</font>">
<!ENTITY status.stalled "<font color=purple>Stalled</font>">
<!ENTITY status.new "<font color=red>Not Started</font>">
<!ENTITY status.resolved "<font color=green>Resolved</font>">
<!ENTITY status.unresolved "<font color=red>Unresolved</font>">
<!-- Contributors -->
<!ENTITY alfred "Alfred Perlstein">
<!ENTITY bmilekic "Bosko Milekic">
<!ENTITY cp "Chuck Paterson">
<!ENTITY dfr "Doug Rabson">
<!ENTITY dillon "Matt Dillon">
<!ENTITY gallatin "Andrew Gallatin">
<!ENTITY green "Brian Feldman">
<!ENTITY grog "Greg Lehey">
<!ENTITY jake "Jake Burkholder">
<!ENTITY jasone "Jason Evans">
<!ENTITY jhb "John Baldwin">
<!ENTITY jlemon "Jonathan Lemon">
<!ENTITY markm "Mark Murray">
<!ENTITY peter "Peter Wemm">
<!ENTITY tanimura "Seigo Tanimura">
]>
<!-- The FreeBSD Japanese Documentation Project -->
<!-- Original revision: 1.14 -->
<html>
&header;
<h2>目次</h2>
<ul>
<li><a href="#goal">Project Goal</a></li>
<li><a href="#plan">Project Plan</a></li>
<li><a href="#resources">Resources and Links</a></li>
<li><a href="#status">Status</a></li>
<li><a href="#issues">Known Issues</a></li>
<li><a href="#news">News</a></li>
</ul>
<a name="goal"></a>
<h2>プロジェクトの目標</h2>
<p>FreeBSD SMP プロジェクト (しばしば SMPng (次世代 SMP) と
呼ばれます) は FreeBSD 5.0 カーネル (2002年11月を予定)
向けの fine-grained な SMP サポートを実装することに集中
しています。
FreeBSD の歴史のため、これは丸い穴に四角いくさびを打ち込むような
作業であり、途中経過はあまり美しいものとはいえません。;
私たちはカーネルを一から書き直そうとはしていませんし、
今のカーネルにある問題点の全てを修正しようとしている
わけでもありません。
実際、私たちは FreeBSD 5.0 がリリースされるときに、
構造上の問題点の痕跡が、様々な形でそれとわかるように残しておく
つもりです。
これは理論的なプロジェクトというよりは、実際的なものであり、
この一年間カーネルがうまく働き、安定して動作するようにしておく
必要があります。
なので、時間的制約からも私たちはいつ何をしなければならないのか
について現実的でなければなりません。</p>
<a name="plan"></a>
<h2>プロジェクトの計画</h2>
<p>このウェブページには FreeBSD における SMP サポートの改良
に関する情報が掲載されています。
一般に、このプロジェクトは BSD/OS 5.0 開発版カーネルで
使われているものを用い、コードベースの違いから
そのまま使うことができないものに関しては再実装するように
しています。</p>
<p>他のフリーソフトウェアプロジェクトと同様に、詳細なスケジュール
を立てることはできません。
私たちはこのプロジェクトの最初の数ヵ月で、うまく動作しつつ
大幅な性能改善と安定性を得ることを期待しています。
そして、それらは -current ができるかぎりちゃんと働き続ける
ようにして行われなければなりません。</p>
<a name="resources"></a>
<h2>情報源とリンク</h2>
<ul>
<li><p>
<a href="http://people.FreeBSD.org/~jasone/smp/smp_synch_rules.html">
SMP kernel synchronization rules.</a></p></li>
<li><p>Most SMP-related discussion takes place on the
<a href="mailto:freebsd-smp@FreeBSD.org">freebsd-smp</a>
メーリングリスト。
<a href="../handbook/index.html">FreeBSD ハンドブック</a>
<a href="../handbook/eresources.html#ERESOURCES-MAIL">
インターネット上のリソース</a>
にメーリングリストに関する詳しい情報が載っています。</p></li>
<li><p>Steve Passe は将来的にこのページに統合されるであろう
追加情報を含む
<a href="http://people.FreeBSD.org/~fsmp/SMP/SMP.html">SMP
プロジェクトページ</a>
を管理しています。</p></li>
<li><p>&dillon; は彼が SMP プロジェクトで何をしているのか
についての
<a href="http://apollo.backplane.com/FreeBSDSmp/">
ウェブページ</a>
を管理しています。</p></li>
</ul>
<a name="status"></a>
<h2>ステータス</h2>
<p>この一般タスクリストは完全ではありません。</p>
<table border=3>
<tr>
<th> タスク </th>
<th> 担当者 </th>
<th> 最終更新 </th>
<th> ステータス </th>
</tr>
<tr>
<td> Convert the giant lock from spinning to blocking, add the
scheduler lock, add per-CPU idle processes. </td>
<td> &dillon; </td>
<td> 25 June 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Port the BSD/OS locking primitives (i386). </td>
<td> &jake; </td>
<td> 3 July 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement heavy-weight interrupt threads (i386). </td>
<td> &grog; </td>
<td> 3 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (i386 UP). </td>
<td> &grog; </td>
<td> 3 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Demonstrated reasonable stability (self-hosted buildworld)
(i386 UP). </td>
<td> -smp developers </td>
<td> 12 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Port the BSD/OS locking primitives (alpha). </td>
<td> &dfr; </td>
<td> 24 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Stub out (disable) spl()s. </td>
<td> &grog; </td>
<td> 30 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Port the BSD/OS ktr code. </td>
<td> &grog;, &jhb; </td>
<td> 30 August 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (i386 SMP). </td>
<td> &jhb; </td>
<td> 1 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Demonstrated reasonable stability (self-hosted buildworld)
(i386 SMP). </td>
<td> -smp developers </td>
<td> 6 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Demonstrated reasonable stability (self-hosted buildworld)
(alpha). </td>
<td> -smp developers </td>
<td> 6 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make malloc and friends thread-safe. </td>
<td> &jasone; </td>
<td> 10 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement msleep(), make tsleep() an msleep() wrapper. </td>
<td> &jake; </td>
<td> 11 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make fxp driver thread-safe. </td>
<td> &cp; </td>
<td> 17 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make mbuf's thread-safe. </td>
<td> &bmilekic; </td>
<td> 29 September 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Lock manager re-work. </td>
<td> &jasone; </td>
<td> 3 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement heavy-weight interrupt threads (alpha). </td>
<td> &jhb;, &dfr; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rewrite the low level interrupt code (alpha). </td>
<td> &dfr;, &jhb; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Process accounting. </td>
<td> Tor Egge, &jhb; </td>
<td> 5 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make ethernet drivers thread-safe. </td>
<td> Bill Paul </td>
<td> 15 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the mutex headers mostly machine-independent. </td>
<td> &jhb; </td>
<td> 20 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Rename SMP_DEBUG to MUTEX_DEBUG. </td>
<td> &jhb; </td>
<td> 20 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Give each soft interrupt its own thread. </td>
<td> &cp; </td>
<td> 25 October 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make sf_bufs (sendfile(2)) thread-safe. </td>
<td> &bmilekic; </td>
<td> 5 November 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the witness code work correctly. </td>
<td> &jhb; </td>
<td> 18 November 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Split the ktr-specific code out of db_interface.c. </td>
<td> &jhb; </td>
<td> 15 December 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert the sio driver to using a spin mutex. </td>
<td> &jhb; </td>
<td> 18 December 2000 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement condition variables. </td>
<td> &jake;, &jasone; </td>
<td> 15 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a flag to mtx_init() (MTX_RECURSE) that denotes
whether a mutex is allowed to recurse. </td>
<td> &bmilekic; </td>
<td> 19 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make the zone allocator thread-safe. </td>
<td> Dag-Erling Smorgrav </td>
<td> 21 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert simplelocks to mutexes. </td>
<td> &jasone; </td>
<td> 24 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make kernel preemptive with respect to interrupts. </td>
<td> &jake; </td>
<td> 31 January 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Cleanup of mutex API. </td>
<td> &bmilekic; </td>
<td> 8 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Remove COM_LOCK. </td>
<td> &markm; </td>
<td> 11 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Merge various scheduling classes into one run queue.
Modify scheduler to support preemptable kernel. </td>
<td> &jake; </td>
<td> 11 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make priority propagation work correctly. </td>
<td> &jake; </td>
<td> 11 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make most of the interrupt thread code MI and shared
between hardware and software interrupts. </td>
<td> &jhb; </td>
<td> 18 February 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement sx (shared/exclusive) locks. </td>
<td> &jasone; </td>
<td> 5 March 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Generalize/improve witness to handle more complex locking
primitives (mtx, sx). </td>
<td> &jhb; </td>
<td> 28 March 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert the allproc and proctree locks from lockmgr locks
to sx locks. </td>
<td> &jhb; </td>
<td> 28 March 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make mbuf system use condition variables instead of
msleep()/wakeup(). </td>
<td> &bmilekic; </td>
<td> 2 April 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Remove &lt;sys/mutex.h&gt; includes from other kernel
headers such as &lt;vm/vm_zone.h&gt;, &lt;sys/resourcevar.h&gt;,
&lt;sys/ucred.h&gt;, and &lt;sys/mbuf.h&gt;. </td>
<td> &markm; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Cleanup the various mp_machdep.c's, unify various SMP
API's such as IPI delivery, etc. </td>
<td> &jhb; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make most of the forward_* and forwarded_* functions MI. </td>
<td> &jhb; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Complete the MD support for SMP on the Alpha platform.</td>
<td> &gallatin;, &dfr;, &jhb; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Convert select() to use condition variables. </td>
<td> &tanimura; </td>
<td> 15 May 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a "giant" lock around the VM subsystem. </td>
<td> &alfred; </td>
<td> 13 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Introduce a modified slab allocator for the mbuf subsystem. </td>
<td> &bmilekic; </td>
<td> 21 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a witness_assert() function to handle lock assertions. </td>
<td> &jhb; </td>
<td> 27 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Extend sx locks to support try lock operations. </td>
<td> &jhb; </td>
<td> 27 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Document KTR. </td>
<td> &jhb; </td>
<td> 28 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make fork_return, fork_exit, ast, and userret MI. </td>
<td> &jhb; </td>
<td> 29 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make sched_lock's savecrit a per-process property saved
and restored in mi_switch and initialized in fork_exit. </td>
<td> &jhb; </td>
<td> 30 June 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make ast() loop. </td>
<td> &jhb; </td>
<td> 10 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add upgrade/downgrade sx lock operations. </td>
<td> Alexander Kabaev, &jasone; </td>
<td> 13 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Implement semaphores. </td>
<td> &jasone; </td>
<td> 14 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add support for upgrade/downgrades in witness. </td>
<td> &jhb; </td>
<td> 23 August 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Remove the MP safe syscall flag from the syscall table
and add explicit mtx_lock/unlock's of Giant to all
syscalls. </td>
<td> &dillon; </td>
<td> 7 September 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make most of cpu_wait() and cpu_exit() MI. </td>
<td> &peter; </td>
<td> 9 September 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Split NFS into client and server. </td>
<td> &peter; </td>
<td> 18 Oct 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Lock taskqueues. </td>
<td> Andrew Reiter, &jhb; </td>
<td> 25 October 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Add a per-thread ucred reference. </td>
<td> &jhb; </td>
<td> 25 October 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make most of the per-CPU stuff MI. </td>
<td> &jhb; </td>
<td> 11 December 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Make critical section saved state per-thread instead of per-lock
so that interlocking spin locks work properly. </td>
<td> &jhb; </td>
<td> 17 December 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Replace the APIC-specific imen_mtx with a MI-named icu_lock to
protect interrupt controllers and associated data within the kernel
for both i386 and alpha. </td>
<td> &jhb; </td>
<td> 20 December 2001 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Use the per-thread critical section nesting level in the mutex
and interrupt thread code to automatically determine when to not
preempt. This makes the MTX_NOSWITCH, SWI_SWITCH, and
SWI_NOSWITCH flags obslete as the kernel will be able to figure
out the proper behavior on its own. </td>
<td> &jhb; </td>
<td> 5 January 2002 </td>
<td> &status.done; </td>
</tr>
<tr>
<td> Lock struct filedesc and struct file. </td>
<td> &tanimura;, &alfred; </td>
<td> 12 January 2002 </td>
<td> &status.done; </td>
</tr>
<!-- WIP -->
<tr>
<td> Lock struct proc. </td>
<td> &jhb; </td>
<td> 20 February 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Lock struct pgrp, struct session, and struct sigio. </td>
<td> &tanimura; </td>
<td> 13 June 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make KTRACE write into tracefiles asynchronously. </td>
<td> &jhb; </td>
<td> 6 September 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make the kernel fully preemptive. </td>
<td> &jhb; </td>
<td> 7 September 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Convert vm_map locks to sx locks. </td>
<td> &green; </td>
<td> 18 October 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Lock down the tty subsystem. </td>
<td> Dick Garner, Jeremy Scofield </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Fix clock locking to be the same on all platforms. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Make sleep mutexes spin if the current lock holder is
executing on another CPU. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Add support for the IA32 pause instruction to spin loops in
locks. </td>
<td> &jhb; </td>
<td> 16 November 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Optimize UP support by changing spin locks to only perform
critical section enter and exits. </td>
<td> &jhb; </td>
<td> 20 December 2001 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Implement lazy interrupt thread switching (context
stealing) on i386. </td>
<td> &bmilekic; </td>
<td> 4 January 2002 </td>
<td> &status.wip; </td>
</tr>
<tr>
<td> Fix synchronization of TLB flushes and invlpg() on x86 SMP. </td>
<td> &peter; </td>
<td> 4 January 2002 </td>
<td> &status.wip; </td>
</tr>
<!-- Stalled -->
<tr>
<td> Create mechanism in cdevsw structure to protect
thread-unsafe drivers. </td>
<td> &jhb; </td>
<td> 15 May 2001 </td>
<td> &status.stalled; </td>
</tr>
<tr>
<td> Make printf() safe to call in almost any situation to avoid
deadlocks. </td>
<td> &cp; </td>
<td> 15 May 2001 </td>
<td> &status.stalled; </td>
</tr>
<tr>
<td> Implement trap handler for cmpxchgl on 80386 to support
generic userland atomic operations. </td>
<td> &jake; </td>
<td> 15 May 2001 </td>
<td> &status.stalled; </td>
</tr>
<!-- Not Started -->
<tr>
<td> Add locking to NFS. </td>
<td> &nbsp; </td>
<td> 15 May 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Use per-CPU buffers for ktr to reduce synchronization. </td>
<td> &nbsp; </td>
<td> 5 September 2000 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Remove priority argument from tsleep(), msleep(),
cv_*wait*(). </td>
<td> &nbsp; </td>
<td> 12 January 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Reimplement kqueue using condition variables. </td>
<td> &jlemon; </td>
<td> 15 March 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Conditionalize atomic ops in the SMP code that are used
for debugging statistics. </td>
<td> &peter; </td>
<td> 15 March 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Add a new witness check for exiting processes to verify that
an exiting process holds no locks. </td>
<td> &jhb; </td>
<td> 13 June 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Make cpu_core MI. </td>
<td> &nbsp; </td>
<td> 13 June 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Lock struct pargs. </td>
<td> &nbsp; </td>
<td> 20 June 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Specify priorities for condition variables, semaphores, and
sx locks. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Fix SIGXPU and other #if 0'd things in mi_switch(). </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Axe schedpu() in favor of event driven priority updates as
much as possible. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Fix PHOLD() so that it blocks to guarantee PS_INMEM. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Make grow_stack() MI. Possibly even a macro or inline. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Fix *hold (e.g. crhold) to return reference to object. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Fix various procfs_machdep.c to use PHOLD, not sched_lock. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Convert eventhandlers to sx locks. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Add witness checking for lockmgr locks. </td>
<td> &nbsp; </td>
<td> 7 September 2001 </td>
<td> &status.new; </td>
</tr>
<tr>
<td> Add ICU spin locks on ia64 and sparc64. </td>
<td> &nbsp; </td>
<td> 4 January 2002 </td>
<td> &status.new; </td>
</tr>
<!--
<tr>
<td> </td>
<td> </td>
<td> D M 2002 </td>
<td> &status.new; </td>
</tr>
-->
</table>
<p>This table lists the todo subtasks for multithreading the network
stack.</p>
<table border=3>
<tr>
<th> Task </th>
<th> Responsible </th>
<th> Last updated </th>
<th> Status </th>
</tr>
<tr>
<td> Protect network interface queues. </td>
<td> &jlemon; </td>
<td> 24 November 2000 </td>
<td> &status.done; </td>
</tr>
<!-- WIP -->
<!-- Not Started -->
<tr>
<td> Lock struct ifnet. </td>
<td> &nbsp; </td>
<td> 19 January 2001 </td>
<td> &status.new; </td>
</tr>
</table>
<a name="issues"></a>
<h2>Known Issues</h2>
<table border=3>
<tr>
<th> Issue </th>
<th> Last updated </th>
<th> Status </th>
</tr>
<tr>
<td> Idle processor time is not charged to the idle processes. </td>
<td> 20 September 2000 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> microuptime creeps backwards. </td>
<td> 4 October 2000 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> microuptime() went backwards </td>
<td> 4 October 2000 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> Process accounting is not accurate (the more CPUs, the
closer to correct it is). </td>
<td> 5 October 2000 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> M_DEVBUF is probably the wrong memory pool for interrupt
stuff and we should think about creating a new malloc pool for
that stuff. </td>
<td> 9 February 2001 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> PC card eject panics due to a race condition in the
interrupt thread code. </td>
<td> 15 March 2001 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> SMP x86 boxes are seeing NCPU * 100 clk interrupts and
NCPU * 128 rtc interrupts. </td>
<td> 15 May 2001 </td>
<td> &status.resolved; </td>
</tr>
<tr>
<td> Witness will infinitely recurse when it acquires Giant after
sleeping with a sleepable lock. </td>
<td> 27 June 2001 </td>
<td> &status.resolved; </td>
</tr>
<!-- unresolved -->
<tr>
<td> Serial gdb does not work if boot_ddb and boot_gdb options
are specified. </td>
<td> 5 September 2000 </td>
<td> &status.unresolved; </td>
</tr>
<tr>
<td> Serial gdb does not work at 115200 baud. </td>
<td> 5 September 2000 </td>
<td> &status.unresolved; </td>
</tr>
<tr>
<td> Profiling is broken. </td>
<td> 20 February 2001 </td>
<td> &status.unresolved; </td>
</tr>
<!--
<tr>
<td> </td>
<td> D M 2002 </td>
<td> &status.unresolved; </td>
</tr>
-->
</table>
<a name="news"></a>
<h2>ニュース</h2>
<p>このページの残りは新しいものから順に並んでいます。</p>
<!--
<b> D M 2002</b>
<ul>
<li> <p> </p> </li>
</ul>
-->
<b>15 May 2001</b>
<ul>
<li>
<p>&grog; has made his <a href =
"http://www.lemis.com/~grog/SMPng/USENIX/">USENIX paper</a> available,
which he will present in Boston at the end of June.</p>
</li>
</ul>
<b>22 March 2001</b>
<ul>
<li>
<p>A <a href =
"http://docs.freebsd.org/cgi/getmsg.cgi?fetch=41302+0+archive/2001/freebsd-smp/20010325.freebsd-smp">
status report</a> was sent to the -smp mailing list.</p>
</li>
</ul>
<b>5 March 2001</b>
<ul>
<li>
<p>A <a href =
"http://docs.freebsd.org/cgi/getmsg.cgi?fetch=0+0+archive/2001/freebsd-smp/20010311.freebsd-smp">
status report</a> was sent to the -smp mailing list.</p>
</li>
</ul>
<b>24 January 2001</b>
<ul>
<li>
<p>A <a href =
"http://docs.freebsd.org/cgi/getmsg.cgi?fetch=38125+0+archive/2001/freebsd-smp/20010128.freebsd-smp">
status report</a> was sent to the -smp mailing list.</p>
</li>
</ul>
<b>12 January 2001</b>
<ul>
<li>
<p>A <a href =
"http://www.FreeBSD.org/cgi/getmsg.cgi?fetch=45111+48223+/usr/local/www/db/text/2001/freebsd-smp/20010114.freebsd-smp">
status report</a> was sent to the -smp mailing list.</p>
</li>
</ul>
<b>11 October 2000</b>
<ul>
<li>
<p>&jhb; and &cp; came up with a preliminary list of
<a href="http://people.freebsd.org/~jasone/smp/smp_synch_rules.html">rules
</a> that should be followed when working on kernel
synchronization.</p>
</li>
</ul>
<b>8 September 2000</b>
<ul>
<li>
<p>Here's a copy of an <a
href="http://people.freebsd.org/~jasone/smp/smp_article">article</a>
sent to <a href="http://www.bsdtoday.com/">BSDtoday</a> and linked at
<a href="http://daily.daemonnews.org/">Daemon News</a>.</p>
</li>
</ul>
<b>6 September 2000</b>
<ul>
<li>
<p>The SMP code has been committed. All further work is being
done in cvs rather than with patches.</p>
</li>
<li>
<p>An updated <a
href="http://people.freebsd.org/~jasone/smp/smpng_patch_9.7">patch</a>
is available for download. This patch is proably what will
actually get committed.</p>
</li>
</ul>
<b>5 September 2000</b>
<ul>
<li>
<p>An updated <a
href="http://people.freebsd.org/~jasone/smp/smpng_patch_9.1">patch</a>
is available for download. This patch makes rtc a fast
interrupt, uses locked instructions for mutexes in MP kernels,
and corrects mtx_*() linkage within modules.</p>
</li>
</ul>
<b>1 September 2000</b>
<ul>
<li>
<p>The code is working for the most part now on i386 (UP and MP).
Some additional coding is still necessary for the alpha,
which is being done now.</p>
</li>
</ul>
<b>30 August 2000</b>
<ul>
<li>
<p>Updated patches for i386 and alpha are available <a href =
"http://people.freebsd.org/~jasone/smp/smpng_patch8.6">here</a>.</p>
</li>
</ul>
<b>12 August 2000</b>
<ul>
<li>
<p>Updated patches for i386 are available <a href =
"http://www.freebsd.org/~jhb/patches/smpng.patch6">here</a>.
Process accounting still doesn't work correctly, but a number
of other improvements have been made.</p>
</li>
</ul>
<b>3 August 2000</b>
<ul>
<li>
<p>Patches with functional heavy-weight threads for the i386
platform are available <a href =
"http://people.freebsd.org/~grog/patches4.gz">here</a>.
There are a couple of minor issues with this patch set.
Specifically, process accounting doesn't work correctly.</p>
</li>
</ul>
<b>6 July 2000</b>
<ul>
<li>
<p>Sheldon Hearn has prepared a mutex(9) man page based on the
BSD/OS one, which is available <a href =
"http://people.freebsd.org/~jake/mutex.9">here</a>.</p>
</li>
</ul>
<b>5 July 2000</b>
<ul>
<li>
<p>&jake; put an updated patch <a href =
"http://people.freebsd.org/~jake/smpng.diff">here</a>.</p>
</li>
</ul>
<b>3 July 2000</b>
<ul>
<li>
<p>&jake; has the BSD/OS lock code working now, and has
incorporated the pertinent portions of &dillon;'s patches
(idle processes, some of the schedlock changes, etc.).
His patch set is available <a href =
"http://people.freebsd.org/~jake/smpng2.tar">here</a>.</p>
</li>
</ul>
<b>26 June 2000</b>
<ul>
<li>
<p>&cp; has provided the PostScript versions of his
presentation slides for the
<a href="smp_meeting_slides_1.ps">first day</a> and
<a href="smp_meeting_slides_2.ps">second day</a> of the
SMP meeting.</p>
</li>
</ul>
<b>25 June 2000</b>
<ul>
<li>
<p>Here's a copy of the
<a href="smp_meeting_summary.txt">SMP meeting summary</a>
that was posted to the -smp mailing list.</p>
</li>
</ul>
<b>19 June 2000</b>
<ul>
<li>
<p>Here's a copy of the
<a href="smp_project_announcement.txt">SMP project announcement</a>
that was posted to the -current mailing list.</p>
</li>
</ul>
&footer;
</body>
</html>