NetBSDにおけるthread機構の方向転換か? 15
ストーリー by mhatta
なかなかおもしろい 部門より
なかなかおもしろい 部門より
TonboDama 曰く、
NetBSDのthread機構はSA(scheduler activation)というものを実装しM:Nの形にする方針で進んできました(2003.7に行なわれた日本NetBSDユーザーグループのBoFでも紹介されています)。
現状では複数のthreadが同時に動く事はできるが、同一プロセスのthreadは同一CPUでしか実行できないという状態(実装)でした。
ここに来て、開発版に新しいthread機構(newlock2)が統合されました。 説明によると、(超ざっくりですが)とりあえず複数のCPUで動く1:1形を入れるよ という事のようです。
-currentにマージした時のメールはこちら。
ことの顛末に詳しい方やthreadの実装に興味のある方、NetBSD一般ユーザの方の感想を教えて下さい。
一方他の*BSDでは? (スコア:5, 参考になる)
BSD/OSはFreeBSDにカーネルレベルスレッドを実装するときに参考にされたので多分同じでしょう。
DragonFly BSDはLWKT [dragonflybsd.org]を読む限りだとM:Nモデルのようですね。
NetBSDではこの記事で1:1がサポートされたらしいのでM:Nと1:1ですね。
OpenBSDは情報を見つけられなかったのですが、1:Nだと思います。
訂正: DragonFly BSDは1:N only (スコア:2)
...FreeBSDでM:Nスレッドが使えるようになったのも5.3Rからで、5.0R〜5.2Rはずっと1:1だったのでそういう流れで実装していくんでしょうかね。
余談ですが、FreeBSDでのスレッド実装であるKSEのマニュアルにはこんなことが書いてあります。
参考までに。
| ユーザスレッディング
| + 軽量
| + ユーザ制御スケジューリング
| - システムコールのラッピング必須
| - マルチ CPU の有効活用不可
|
| カーネルスレッディング
| - 重量
| - カーネル制御スケジューリング
| + システムコールのラッピング不要
| + マルチ CPU の有効活用可能
この道はいつか来た道 (スコア:3, すばらしい洞察)
# SolarisはMT周りには一日の長があると思う。
Re:この道はいつか来た道 (スコア:2, 参考になる)
> SolarisはMT周りには一日の長があると思う。
同感なのだ。
Re:この道はいつか来た道 (スコア:1)
># SolarisはMT周りには一日の長があると思う。
Solaris8~Solaris9の間の期間って
LD_LIBRARY_PATHで両方のスレッドライブラリを使い分けれたけど
NetBSDではどうなのかな?
# 同カーネルで両方動いてくれたのでベンチマークで
# 性能向上示しやすくて助かったものです
Re:この道はいつか来た道 (スコア:1)
M:Nはもうきれいサッパリ。
懐しいBoFのログにあるように、libcのmajor version上げない程度には後方互換性に気を遣ってきたNetBSDですが、static linkには無頓着、てことですかね?? 教えてsodaさん!!
# Board electionに参加できないくらいNetBSDから離れてしまったけど敢えてID
■知りたいことは何でも聞け (スコア:0)
(sodaさんに)(sodaさんに)(後ろの人に)
Re:■知りたいことは何でも聞け (スコア:1)
(sodaさんに)> (後ろの人に)
いやまったくその通りですな。
事情をよくご存知ない人のために野暮な解説をすると、後ろの人ってのは
NetBSD の core グループの偉い人のことだと思われます。
Re:この道はいつか来た道 (スコア:0)
SAの失敗 (スコア:2, 興味深い)
SPARCではまともに動いたためしがない、とかも聞いてます。レジスタウィンドウの扱いが難しいんですかね。
一応擁護しておきますと、i386とかでは(SMP構成でもマルチスレッドな1プロセスに対し1CPUしか与えられないという制限さえ我慢すれば)普通に動いてはいました。
あと、newlock2は、新しいカーネル内資源排他機構であって、スレッドとは直接関係しません。SAの部分をnewlock2に移行するのがめんどう、とかそんな理由らしい。
Re:SAの失敗 (スコア:2, 興味深い)
Re:SAの失敗 (スコア:0)
昔ちょっとテストしたところでは、環境変数PTHREAD_CONCURRENCYにCPU数をセットしておけば、1プロセス内のスレッドに複数CPU割り当てられて動いていたように記憶しています。(i386でですが。)
PTHREAD_CONCURRENCYをセットしてないと1CPUしか割り当てられないようになってたので、そう思い込んでいた人も多かったのかもしれません。
一方 (スコア:1, おもしろおかしい)
Re:一方 (スコア:0)
(ノ゚ο゚)ノ Oh・・・!! (スコア:0, 荒らし)