Posted by kudzu◆EaEmrSBBOE
なんか今までネタスレやプログラマの自虐的なスレッドばかり取り上げてきましたが、いつもそうやって鬱入ってるわけではありません。ちゃんと2chで調べ物したり、なんとなく眺めて勉強したりしてますよ。2chで勉強ってのがもうだめなわけですが。
で、今日は結構昔のものですが、少し専門的なネタを紹介したいと思います。
「FreeBSDはもう時代遅れになります。」スレより。
506 :504 :04/01/27 11:27
>>505
で、Lock ContentionがLinux並になるのマダー?
503の話だと、開発者のマンパワーが同じだとして4年ちょっとだよね。
じつはもっと進んでる!というなら(2.3の後半とか?)あと何年かかるか予想できますか?
510 :500 :04/01/29 01:17
>>506
> で、Lock ContentionがLinux並になるのマダー?
基本はspinlockマンセーなLinuxと、極力blocking lockを使おうとしている
FreeBSD5では方向性が全然違うんで、
「Lock ContentionがLinux並になる」ってのはあまり意味のない比較だということを
あらかじめ念を押しておく。
で、FreeBSDのロックの細粒度化については以下の文書を見るといい。
ttp://www.freebsd.org/doc/en_US.ISO8859-1/articles/5-roadmap/major-issues.html#SMPNG
残っている大物というと、やはりVMとVFSまわり。
とはいえ、これも今年中にはほとんどGiant freeなところまで持っていけると
俺は思っている。
はい。もはや地球語ではないですね。
大雑把に説明すると、あるリソースが一つあるとき、一方が使っている間はもう一方が使えないようにするための構造のお話です。
わかりやすく説明すると、
512 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 00:06
すまん
spinlock
やさしく説明してくれ。
513 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 00:48
>>512
小便しに行って便器が全て使用中だった場合に便器の後ろで
ウロウロするのがspinlock。大便しに行って、全ての個室が使用中で
別の便所に移動するのがblocking lock。
どちらを使うと得であるかは、待たされる時間がどの程度かによって異なる。
514 :名無しさん@お腹いっぱい。 :04/01/31 01:33
>>513
非常にワロタ。
516 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 13:39
>>513
すまん
想像力が働かず
より一層わからん。
517 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 13:56
Linux: ウンコは家でするのが基本
FreeBSD: ウロウロするのは「ダサい」
Solaris: 便所は十分用意してある
518 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 14:03
吹き出したよ。なんとかしてくれ
ということです。死ぬほどワロタ。
何故Spin Lockが何故有効かは、
519 名前: 500 [sage] 投稿日: 04/01/31 14:15
>>513
ワロタ。うまいな。
>>516
lockが競合したとき、lockを取れなかった側が
その場でbusy loopして待ち続けるのがspinlockで、
lockの取得を一旦あきらめて別のrunnableなスレッドに
コンテキストスイッチするのがblocking lock。
spinlockでは、競合が起こっている時間が
即CPU時間の浪費につながるので、
lockの競合はできるだけ避けなければならない。
一方blocking lockでは、runnableなスレッドが他にいる限り
そちらの実行を続けられるので、spinlockよりは競合を受け入れやすい。
(とは言え、コンテキストスイッチにはコストがかかるので
競合しないに越したことはないが……)
何年か前までは、spinlock主体のアーキテクチャは
「原始的」でありscalabilityがないと言われていたんだが、
Linuxは徹底的なlockの細粒度化やlockに頼らないデータ構造(RCU)の導入とかで
見事その定説を覆してみせたようだ。
ということです。RCUとかわかんないけど。
Spin lockはLinuxの2.6カーネルにも導入されたそうですが、シングルプロセッサでどう有効なのかよくわかんないです。カーネルスレッドがプリエンプタブルだから?割り込みが入るまでの時間はどうやって予測してんだろ?
という俺の疑問は置いといて、次の質問。
522 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 16:39
Solarisにあるアダプティブロックとは、
ある一定数スピンして、それでもロックされているなら
コンテキストスイッチ、という意味なんでしょうか?
523 名前: 500 [sage] 投稿日: 04/01/31 17:09
>>522
単純なblocking lockでは、競合が発生した場合
すぐにコンテキストスイッチの動作に移るんだが、
*対象のlockがすぐに解放される見込みがある場合*は
しばらくの間spinを試みた方がトータルコストを下げられる可能性がある。
(コンテキストスイッチ自体がコストの高い操作なので)
で、この「spinをした方が得かどうか」の判断材料として
「対象のlockを保持しているスレッドが、現在他のCPU上で実行中である」
かどうかを見るのがadaptive lock。
blocking lockの仕組みがちゃんとできていればadaptive lockへの改造は簡単。
実際FreeBSDにもかなり前からadaptive lockのコードが入っている。
(現在はデフォルトでoffになっているが…)
ttp://www.jp.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/kern_mutex.c#rev1.92
非常に勉強になります。けど半分くらいしかわかりません。誰かもっと簡単に説明してください。
525 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 17:34
つまりこういうことか。
単純なblocking lockでは、個室に先客がいるばあい、便意はとりあえず置いておいて
飯を食いにいったり煙草を吸いに行ったりするわけだが、*対象の個室がすぐに空く見込みがある
場合*は、しばらくの間ドアの前でもじもじしていた方がトータルでは楽になる可能性がある。
(気分を切りかえること自体がかなり無理なことなの)で、この「もじもじしていた方が得かどうか」
の判断材料として「対象の便器を占有している香具師が、現在ちゃんと起きて力んでいる」か
どうかを見るのがadaptive lock。
やばい。超わかりやすい。
526 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 20:32
そろそろ便器以外にしてくれw
少し品位が気になるぞwww
527 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/01/31 20:56
すげーわかりやすい。
いっそVMやスケジューラーやファイルシステムとかも
全部便器のアナロジーで解説したOSの本書いて欲しい。
534 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/02/01 02:52
自分下痢で最大リミットの時ドアを蹴り破るとか
先行者をケツも拭かせず追い出すとかの実装は
在りませんか?
552 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 04/02/02 16:11
>>534
ドアを蹴り破ったりするわけじゃないけど、
「優先度継承」って仕組みがそれに近いかな。
例えるなら、いつもはマターリと新聞を広げながら便器に座っているような人が
先客として入っているとき、下痢の人がドンドンとドアを叩くと
中の人ももの凄い勢いで踏ん張って早く用を済ませるようになる機能だな。
UVM(NetBSDのVM)の論文は読んだんですが、サパーリわかんなかったです。是非この調子でOSを全て便器で説明をお願いしたいところです。
おもしろかったらガッしてください→

この記事へのトラックバック