@ITにgotom氏によるLinuxカーネル2.5の現状について網羅された解説記事が掲載されている。最近の変化が読みやすく書かれている。
2757 story カーネル2.5、最新開発動向 42 ストーリー by kazekiri 2002年04月09日 16時22分賞味期限付き 部門より @ITにgotom氏による Linuxカーネル2.5の現状について網羅された解説記事が掲載 されている。最近の変化が読みやすく書かれている。
見えないdispatch delayが残りそう (スコア:3, 参考になる)
Preemptionについては本当にsourceや他のOSの実装を見たのか疑わしいところがあります。現状のLinux kernelではlock primitiveが貧弱です(特に、adaptive/blocking lockで十分なところにspin lockを使っている)。これはkernelのあちこちでinterrupt levelを引き上げることになります。結果として、割込そのものが遅れるために測定不可能なdispatch delayが生じる恐れがあります。
FreeBSDの場合、最も基本となるlockはblocking lock(多くは将来adaptiveに変更予定)です。spin lockはscheduler lockなど4種類しか用いていません。また、割込も、本質的にはspin lockにおけるlock attempt(1回のattempt毎に1回割込を許可)、pmap変更、clock割込以外では一切禁止しません。なおかつ、一部ではGiantが外れている(そのうちkernel memory allocatorから外れる、これは大きい)ため、すでに(点ではなく線に対して)preemptionが可能になっています。
補足 (スコア:1)
FreeBSDの場合、i386ではsysctlによりpreemption不可能であっても許可することが可能です。この場合、割込threadが実行可能でなければ通常通りrun queueにぶち込まれます。違いは、その後にmi_switch()を呼び出さない(通常は呼び出すので割込threadが直ちに実行される)というだけです。
補足の補足 (スコア:1)
s/不可能であっても許可する/不可能であっても割込を許可する/
Re:補足 (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:1)
OSの実装についての知識不十分なため、基本的なところで外した質問かも知れませんが、
簡単に言っちゃうと、記事でリアルタイム機能が実装されている(若しくは実装されつつある)ようなことが書かれているが、それは間違いである、ということでしょうか?
或いは、それっぽい機能は実装されているけど、実質的にはリアルタイムには全然なってない、てことでしょうか?
Re:見えないdispatch delayが残りそう (スコア:2, 参考になる)
なぜpreemptionを行うのか (スコア:2, 参考になる)
元記事をもう1ど読んで気になったのですが、そもそも「なぜkernelをpreemptableにするか」という問題意識が元記事からは読み取れません。これではpreemptionがrealtime向けにしかならないというような誤解を与える恐れがあります。
一般に、OSにおけるschedulingの問題は以下の2種類に分けられます。
前者の問題はいわゆるscheduling policyです。これは本来applicationによっていかようにも決められるべきものです(実際、SVR4/MPやSolarisではschedulerを自分で作ることが可能)。一方、後者ではdispatch delayが問題になります。その大きな原因としては(preemptionができないなどlockに依らないものも含めた)優先度逆転があります。解法としてはkernelをpreemptableにする、優先度継承を行うなどの方法が知られています。
まとめると、本来kernel preemptionなどで実現したいのは「ありとあらゆるscheduling policyを支える仕組み」です。preemptionを取り上げるなら、どんなscheduling policyにも応えることができる仕掛けの1つとして書いて欲しかったなぁ...
Re:なぜpreemptionを行うのか (スコア:1)
げっ!そんなことまでできるんだ。確かにタイミングがクリティカルな用途(音楽再生とか、データ収集とか)などでなくとも、そういう機能は欲しいですが、実際に実装するとなると飛んでもないことになるはずなので諦めてたんですが....既にできてたとは。Solaris恐るべし....。
#しかしそうなると、x86のサポートなくなったことがホントに痛いなぁ。
Re:見えないdispatch delayが残りそう (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:0)
5.0 が安定すれば、4 ないし 16 CPU くらいのいわゆるミッドレンジの
エンタープライズユースで十分スケールすると思うんだわさ。
というわけで、そろそろ Oracle きぼんぬ。
そうすれば、Linux の上、Solaris の下、くらいの市場に食い込めると思うんだがなぁ。
Re:見えないdispatch delayが残りそう (スコア:1)
>>エンタープライズユースで十分スケールすると思うんだわさ。
これを示す数字ってどっかに無いですか? カーネルが7.5秒でコンパイルできた [srad.jp]とかの類のいい加減なデータで も教えてくださるとありがたいです。
Re:見えないdispatch delayが残りそう (スコア:0)
「スケール」するのが重要なの。
Re:見えないdispatch delayが残りそう (スコア:1)
4CPUを越えるよーな市販品のマザーボードがほとんど市場に出回らない状況でそれを言われても、たいして説得力がないのだな。
# そういう状況なら、ふつーIntel Solarisだろうし
Re:見えないdispatch delayが残りそう (スコア:1)
i386ならそうかも知れませんが、sparc64とかで動くなんてことになるとどうでしょう? Linux kernelは動くはずですし、NetBSD/sparc64も有り(SMPはまだだけど)、FreeBSD/sparc64もとりあえずbootするようにはなってます。
ついでながら、architectureが増えるとmachine-dependentなところが少ないのは楽です。i386で直したものがsparc64でも使えますし。
# signalをqueueから引っこぬくところがなんでmachine-dependentなんだ? > Linux kernel
Re:見えないdispatch delayが残りそう (スコア:1)
ベンチマークとしての妥当性はほとんど無いにしても、32プロセッサ使うと7.5秒でカーネルをコンパイルできたというのは、「スケール」するという例になりませんか?
FreeBSD5.0(Re:見えないdispatch delayが残りそう) (スコア:1)
リリースノート [freebsd.org]も出てます。
そろそろ誰かたれこんだりしてるかな。
うちには残念ながらSMPとか試す余裕のあるマシンはありませんが
それ以外でもいろいろと楽しみにしてたり。
それはそうとJ2DKはどうなってるんだろう…。
linuxエミュレーションのJDKの新しいパッチは出てるみたいだけど
Re:見えないdispatch delayが残りそう (スコア:0)
良いOSだとは思うけど、今のままじゃマニアOS路線から抜け出せるとは思えん。
商用で成功するには嫌でもユーザーに媚びんと。
それにBSDIにしてもWindRiverにしても後ろ盾が弱すぎるわな。ケツ割るのも早いし。
実際のところ、Linuxを抜くなんて現状では夢のまた夢でしょ。
Re:そんなに大事? (スコア:1)
Re:そんなに大事? (スコア:1, 興味深い)
LinuxはLinuxのやり方で頑張ってる、FreeBSDはFreeBSDのやり方で頑張ってる。それでいいと思う。お互い意識し過ぎずそっとしておけばよいことです。
私はメインLinuxでFreeBSDもたまに使ってます。適材適所で使えればそれで結構。一番嫌なのは伝統だとか裏付けの無い風説などで無条件にFreeBSDがLinuxより優れてると主張するFreeBSD派が私の周りには多い事。ビジネスシーンでメリットを主張したいのなら裏付けを持った上でしっかりアピールして欲しいものです。
そう、アピールがたらんのよ。FreeBSDは。
Re:そんなに大事? (スコア:1)
良いこと言いますな~(笑)。
そう!そうなんです!
>私はメインLinuxでFreeBSDもたまに使ってます。適材適所で使えればそれで結構。
比率が逆だけど、僕も両刀です。
それぞれ良さがある(Linuxはディストリ次第っつー面もあるけど)んで、みんな両方使ってみればいいのになぁ…。
Re:そんなに大事? (スコア:0)
これだけ普及したんだからもう少し自信を持てばいいのにね。
Linuxはさすがにそろそろ、相対的にしか自分の位置や価値を
確認できないという状況は脱しつつあると思うんだが。
Re:見えないdispatch delayが残りそう (スコア:1)
いくらLinuxが普及したとはいえ、コンシューマ向けマシンにプリインストールされているOSを数の上で上回るのは難しい。
MacOSXをBSDとして使っている人はその中のごく一部だろうということで、意味のある比較だとは思いませんが。
うじゃうじゃ
頭悪そう… (スコア:0)
WEBサーバとしてはLinuxよりxBSDの方がシェアが大きいと思っていたのですが。
Re:頭悪そう… (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:0)
予想としては安定するのに3年かかってその間にLinuxに抜かされてるに128カノッサ。
Re:見えないdispatch delayが残りそう (スコア:0)
n-CURRENT が n-STABLE となってからだいたい半年くらい
(リリース二回、つまり n.2-RELEASE)で安定してますね。
Linux 2.6.xでのリリースエンジニアリングは2.4.xみないに
ならないことを期待。
ま、ソースの見えるOS同士、切磋琢磨していったらいいと思います。
Re:見えないdispatch delayが残りそう (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:0)
IBMなんかはLinuxの専従(パッチつくったり、バグフィックスしたり性能評価したりする人)が100人以上いるし、国産F/H/Nでも数十人規模でいるし、(もちろん商用
Re:見えないdispatch delayが残りそう (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:0)
多分見ていないでしょうね。solarisは7の時点でspin/adaptive/block lockを持っていましたし。
またプロセスのCPU配分についても
また、複数のプロセッサを持つシステムでは、プロセスがCPU間で不定に割り当てられてしまう(プロセスがCPU間を動き回る
Re:見えないdispatch delayが残りそう (スコア:0)
Re:見えないdispatch delayが残りそう (スコア:0)
つまり割り込みが可能なspinと不可能なspinがあるのは別に特殊な訳ではありません。
spinが問題になるのは、adaptive/block lockに比べ、システム全体のプロセッサ時間を無駄にしてしまう可能性があるということです。
またlockの優先度の逆転を防ぐために優先度の継承を行う実装を取ることが多く、
Re:見えないdispatch delayが残りそう (スコア:1)
可能性があるというのは否定できないのですが、今のlinux2.5で実際にlock contentionを発生している例を示していただけないでしょうか? (多くのcontentionはlock primitiveの選択を間違えているというよりも、lockのかけ方が不適切であることによって発生していると思われます)
adaptive/block lockの方もスケジューラを呼び出してコンテキスト切り替えをするオーバヘッドがありますので、十分に短い区間であればspinしていたほうが有利な可能性もあります。
Re:見えないdispatch delayが残りそう (スコア:0)
私はlinuxの人ではないのでlinuxの実装について言うのは控えさせていただきます。
上の投稿で言いたかったのは一つにはspinだからといってpreemptionされないとは限らないということ。
もう一つはtabateeさんのおっしゃるとおり、lockのかけ方が不適切な実装もあるわけで、
その場合spinはadaptive/blockに比べ無駄時間が多いということです。
もちろん即応性については一般にspinはadaptive/blockより良いので、当たり前のことですが使い分けが重要と言いたかったわけです。
例えばマルチプロセッサ
Re:見えないdispatch delayが残りそう (スコア:1)
>>lockのかけ方が不適切な実装もあるわけで、 その場合spinはadaptive/blockに比べ無駄時間が多いということです。
確かにそうですが、lockのかけ方が不適切な場合には安易にlockの種類を変えるよりもlockのかけ方を直すのが正攻法だと思います。
すくなくともlinuxは今までこの方針である程度の改善ができていて、また、しばらくは同じように改善し続けることができると私は考えています。
ちなみに、32プロセッサ使ってカーネルを7.5秒でコンパイルできた話 [lwn.net]の最後の方のプロファイルをみても以前まであったlock contentionはほとんど消えているように見えます。
Re:見えないdispatch delayが残りそう (スコア:0)
>確かにそうですが、lockのかけ方が不適切な場合には安易にlockの種類を変えるよりもlockのかけ方を直すのが正攻法だと思います。
まったく同意です。
私もそもそも使い方が不適切なものはどうやっても駄目だと思います。
>すくなくともlinuxは今までこの方針で
賞味期限... (スコア:2, 参考になる)
『読みやすく書かれている』とは言えないが、BK採用以降のChangeLogの読み難さから考えればとても良く整理されている。
PowerPCって (スコア:1)
間違える人多いですよね。
話は違うけど、プリエンプティブルカーネルと言われてOS-9を思い出した。懐かしい。
Re:OS-9 (スコア:1)
>プリエンプティブルカーネルと言われてOS-9を思い出した。
確かOS-9はカーネルレベルではプリエンプティブでは無いはずです. ですからシステムモードでIO待ち等が発生すると, それが終了するまでは他の処理がブロッキングされます. これを防ぐため, デバイスドライバ等のコーディングでは割り込み処理ではフラグを立てるだけにしておいて, ユーザモードの処理でそのフラグを使って判断を行うような記述が推奨されていました.
この構造を逆手に使うと, システムモードでユーザモードの要求を完全にブロックしておいてハードリアルタイムの処理を行うなんてこともできました.