From 4ffa86a7020ab1de2a0e2d88f70a6e55805a1113 Mon Sep 17 00:00:00 2001
From: Ryusuke SUZUKI FreeBSD SMP プロジェクト (しばしば SMPng (次世代 SMP)
+ FreeBSD Symmetric MultiProcessing (SMP) プロジェクト (しばしば SMPng (次世代 SMP)
と呼ばれます) は FreeBSD カーネル向けの fine-grained な
SMP サポートを実装することに集中しています。
これは、2003 年 1 月の 5.0-RELEASE においてデビューしました。
@@ -83,21 +83,22 @@
現在進行中のタスクに関しては、エントリを最後にアップデートした日付を表します。
停止したタスクについては、タスクが停止したことを宣言した日、
新しいタスクについては、タスクが一覧に追加された日を意味します。 個々のデバイスドライバのロックの状況については、
the busdma and
SMPng driver conversion webpage において公開されています。 ネットワークスタックのロックの状況については、Robert Watson の
+ netperf
+ ウェブページ、および FreeBSD.org の Netperf
+ ウェブページ で見ることができます。 タスクはステータス、日付の順に並んでいます。 SMP に関連した議論は
freebsd-smp
メーリングリストにおいて行われています。
@@ -113,6 +114,46 @@
プロジェクトページ
を管理しています。 &a.rwatson; は、SMP に関連した
+ Netperf project
+ のネットワークパフォーマンスに関するウェブページを管理しています。
+ さらに、彼は 変更点のログやその他の情報を含む個人のウェブページ
+ を持っています。 以下は、カーネル同期およびスレッドプリミティブについてのマニュアルページです。 また、古い SPL マニュアルページ
+ には、以前の SMP 同期モデルの情報が反映されています。
+ Hiten Pandya による
+ SMP kernel synchronization rules。 &a.dillon; は彼が SMP プロジェクトで何をしているのかについての
ウェブページ
@@ -122,22 +163,22 @@
&a.jhb; による
"Locking in the Multithreaded FreeBSD Kernel" USENIX paper。
- プロジェクトの目標
- 情報源とリンク
-
+
+
- &a.hsu; による - "Reasoning about SMP in FreeBSD" BSDCon'03 paper。 -
-&a.jeff; による - - "ULE: A Modern Scheduler for FreeBSD" BSDCon'03 paper。 -
-&a.hsu; による + + "Reasoning about SMP in FreeBSD" BSDCon'03 paper。 +
+&a.jeff; による + + "ULE: A Modern Scheduler for FreeBSD" BSDCon'03 paper。 +
+以下はまだ未完成のハイレベルのカーネルサブシステムと、現在、 SMP アーキテクチャと安定性について作業している活動的なスタッフの一覧です。
-サブシステム | ステータス | 最終更新 | @@ -207,14 +248,14 @@File descriptors | &status.done; | 5 February 2003 | -&a.alfred;, &a.tanimura; | +&a.alfred;, &a.tanimura; &a.rwatson; |
---|---|---|---|---|---|---|---|
TTY subsystem | -&status.new; | -31 May 2004 | -+ | &status.wip; | +24 July 2004 | +&a.phk; | |
Socket structures and system calls | -&status.wip; | -4 October 2003 | -&a.tanimura;, &a.hsu;, &a.sam; &a.rwatson; | +&status.done; | +25 November 2004 | +&a.sam;, &a.rwatson; | |
KQueue | -&status.wip; | -23 April 2004 | +&status.done; | +24 November 2004 | &a.jmg;, &a.green; | IPv4, IPv6 | &status.wip; | 23 April 2004 | -&a.hsu;, &a.jennifer;, &a.sam;, &a.rwatson; | +&a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson;, &a.gnn; |
netatalk | &status.wip; | -23 April 2004 | +24 November 2004 | &a.rwatson; | Network stack infrastructure | &status.wip; | 4 October 2003 | -&a.hsu;, &a.sam; &a.rwatson; &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org>, &a.brooks;, + | &a.hsu;, &a.sam;, &a.rwatson;, &a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org>, &a.brooks;, &a.rik; |
NFS Client, Server | -&status.wip; | +NFS Client | +&status.new; | 23 April 2004 | -&a.rwatson;, Rick Macklem (rick at snowhite.cis.uoguelph.ca) | ++ | |
NFS Server | +&status.wip; | +24 November 2004 | +&a.rwatson; |
この一般タスクリストは完全ではありません。
-タスク | 担当者 | 最終更新 | @@ -1174,11 +1222,49 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Remove Giant from jail(2). | -&a.arr; &a.rwatson; | +&a.arr;, &a.rwatson; | 23 April 2004 | &status.done; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Add subsystem locking to NFSv2, NFSv3 server, permitting upcalls + and other network-related elements to run Giant-free. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Make the kernel fully preemptive. | +&a.jhb; | +24 November 2004 | +&status.done; | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock pipe implementation: sigio/fown-related evil | +&a.alfred; | +24 November 2004 | +&status.done; | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock down the SysV IPC code. | +&a.alfred; | +24 November 2004 | +&status.done; | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock contention measurement tool to measure heat of various + locks, including Giant, and permit more directed performance and + locking strategy optimization. | +&a.rwatson; | +24 November 2004 | +&status.done; | +|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
&status.wip; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Make the kernel fully preemptive. | -&a.jhb; | -7 September 2001 | -&status.wip; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock down the tty subsystem. | -Dick Garner, Jeremy Scofield, &a.tmm; | -2 April 2002 | +Dick Garner, Jeremy Scofield, &a.tmm;, &a.phk; | +24 July 2004 | &status.wip; | &status.wip; | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock pipe implementation: sigio/fown-related evil | -&a.alfred; | -27 February 2002 | -&status.wip; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Make use of process locking and process reference counting to protect debugging interfaces (and procfs). | @@ -1244,8 +1316,8 @@Remove the MP safe syscall flag from the syscall table and add explicit mtx_lock/unlock's of Giant to all syscalls. | -&a.dillon;, &a.mux; | -28 February 2002 | +&a.dillon;, &a.mux;, &a.rwatson; | +24 July 2004 | &status.wip; | &status.wip; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock down the SysV IPC code. | -&a.alfred; | -13 August 2002 | -&status.wip; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Review locking strategy and correctness of VFS operations and fix up various failure modes associated with enabling @@ -1354,13 +1419,6 @@ | &status.wip; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Add locking to NFS. | -&a.rwatson; | -23 April 2004 | -&status.wip; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Reimplement kqueue using condition variables. | -&a.jlemon; | +15 March 2001 | &status.new; | &status.new; | -||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lock contention measurement tool to measure heat of various - locks, including Giant, and permit more directed performance and - locking strategy optimization. | -- | 25 February 2002 | -&status.new; | -|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Push the grabbing of Giant into Linux i386 ABI system calls. | @@ -1544,8 +1593,8 @@ |
タスク | 担当者 | 最終更新 | @@ -1568,15 +1617,15 @@||||||
---|---|---|---|---|---|---|---|---|
Lock up TCP. | -&a.jennifer;, &a.hsu; | -10 June 2002 | +&a.jennifer;, &a.hsu;, &a.sam;, &a.rwatson; | +24 November 2004 | &status.done; | |||
Lock up UDP. | -&a.jennifer;, &a.hsu; | -10 June 2002 | +&a.jennifer;, &a.hsu;, &a.rwatson; | +24 November 2004 | &status.done; | |||
Lock up raw IP. | -&a.sam; | -4 October 2003 | +&a.sam;, &a.rwatson; | +24 July 2004 | &status.done; | &status.done; | +||
netatalk DDP PCB locking. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Permit IP forwarding path to run Giant-free. | +&a.sam; | +1 December 2003 | +&status.done; | +|||||
Lock &unix; domain protocols, fifofs. | +&a.sam;, &a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Giant lock over NFS server to protect against so_upcall() w/o Giant | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Lock interface cloning meta-data. | +&a.brooks; | +24 July 2004 | +&status.done; | +|||||
Apply combination of socket and socket buffer locks, label caching + to MAC labels on sockets so that they can be used safely without + Giant. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Make routing socket message dispatch use a netisr to avoid + re-entering the socket code from the routing code, resolving lock + order issues. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Introduce accept locking to protect accept incomplete and + complete queues on listen sockets. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Break out socket buffer wakeup, socket buffer append, socket + state change, socket buffer reserve, flush, etc, calls into + _locked() and unlocked versions, and avoid conditional locking. + | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Lock down AARP, AppleTalk Address Resoluton Protocol. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Fix pull/push cache data synchronization issues in sosend(), + soreceive(), allowing them to run Giant-free. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Protect socket global counters/limits and generation number + with a mutex. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Lock down unit allocation meta-data in interface related + netgraph modules. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Lock down socket buffer OOB fields across TCP/IP, IPX. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Add MSG_NBIO so that fifofs can avoid frobbing SO_NBIO in + a manner that risks races. | +&a.truckman; | +24 July 2004 | +&status.done; | +|||||
Protect all use of so_count with socket lock. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Move socket buffer related state from so_state to sb_state so + it can be properly locked by the socket buffer mutex. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Introduce a temporary global lock to lock the if_label field + used by the MAC Framework. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Push VFS-specific behavior out of fdrop_locked() and acquire + Giant in the fo_close per-object methods rather than + fdrop_locked(), so that pipes and sockets can run fo_close() + Giant-free. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Push Giant acquisition into fo_stat() file descriptor stat + operation, rather than acquiring it in fstat(), so that fstat() + on sockets and pipes can run Giant-free. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Don't hold socket locks over entry to protocol switch methods, + allowing protocol methods to acquire socket locks after protocol + locks in the lock order. | +&a.rwatson; | +24 July 2004 | +&status.done; | +|||||
Port inpcb mutex locking, assertions from IPv4 to IPv6 | +&a.rwatson; | +8 August 2004 | +&status.done; | +|||||
Add IFF_NEEDSGIANT to allow if_start to run with Giant for + specific interfaces. Defer if_start to task queue. | +&a.rwatson; | +8 August 2004 | +&status.done; | +|||||
Push down Giant in stat(), fo_stat() to allow Giant-free stat + of pipes, sockets. | +&a.rwatson; | +8 August 2004 | +&status.done; | +|||||
Add TCP lock assertions. | +&a.rwatson; | +24 November 2004 | +&status.done; | +|||||
Lock socket layer. | +&a.sam;, &a.rwatson; | +24 November 2004 | +&status.done; | +|||||
Review TCP timer code. | +&a.rwatson; | +24 November 2004 | +&status.done; | +|||||
Analyze and reduce cost of entropy gathering in network critical + paths. | +&a.rwatson;, &a.markm; | +24 November 2004 | +&status.done; | +|||||
Allow code to declare NET_NEEDS_GIANT(), forcing Giant over the + network stack if that code is compiled into the kernel. | +&a.rwatson; | +28 August 2004 | +&status.done; | +|||||
Disable Giant over the network stack in the default + configuration. | +&a.rwatson; | +28 August 2004 | +&status.done; | +|||||
Move to using file descriptor reference counts instead of + socket reference counts for socket system calls, avoiding extra + reference couht operations. | +&a.rwatson; | +24 October 2004 | +&status.done; | +|||||
Lock IPv6. | &a.sam;, &a.rwatson;, &a.ume;, &a.mlaier; | -23 April 2004 | -&status.wip; | -|||||
Permit IP forwarding path to run Giant-free. | -&a.sam; | -10 October 2003 | -&status.wip; | -|||||
Lock interface cloning meta-data. | -&a.brooks; | -9 March 2004 | -&status.wip; | -|||||
Lock &unix; domain protocols, fifofs. | -&a.hsu;, &a.sam, &a.rwatson; | -23 April 2004 | -&status.wip; | -|||||
Lock socket layer. | -&a.tanimura;, &a.sam, &a.rwatson; | -23 April 2004 | -&status.wip; | -|||||
Giant lock over NFS server to protect against so_upcall() w/o Giant | -&a.rwatson; | -23 April 2004 | +8 August 2004 | &status.wip; | &status.wip; | -|||
Apply combination of socket and socket buffer locks, label caching - to MAC labels on sockets so that they can be used safely without - Giant. | -&a.rwatson; | -23 April 2004 | -&status.wip | -|||||
Lock struct ifnet. | -&a.mlaier;, &a.luigi; Maurycy Pawlowski-Wieronski <maurycy@fouk.org> | +&a.mlaier;, &a.luigi;, Maurycy Pawlowski-Wieronski <maurycy@fouk.org> | 23 April 2004 | &status.wip; | ||||
Lock IPv4 and IPv6 interface address lists. | -&a.mlaier; | -23 April 2004 | +Lock IPv4, IPv6, atalk interface address lists. | +&a.mlaier;, &a.rwatson; | +8 August 2004 | &status.wip; | ||
netatalk DDP PCB locking. | +IGMP locking. | &a.rwatson; | 23 April 2004 | &status.wip; | ||||
IGMP locking. | +Additional KTR tracing for UMA, callouts, interrupts, and + network path events. | &a.rwatson; | -23 April 2004 | +8 august 2004 | &status.wip; | &status.new; | -||
Review TCP timer code. | -- | 9 March 2004 | -&status.new; | -|||||
IP ID locking. | &a.rwatson; | @@ -1911,8 +2155,8 @@
問題点 | 最終更新 | テータス | @@ -2000,13 +2244,6 @@&status.unresolved; |
---|---|---|---|
jail_sysvipc_allowed is checked in an unsafe manner in - the SYSV IPC syscalls. | -5 March 2002 | -&status.unresolved; | -