Re: SMP / Multi Thread
河野真治 @ 琉球大学情報工学です。
In article <bgqnb3$12d$1@newsserv.ics.es.osaka-u.ac.jp>, SAITOH akinori <saitoh@ist.osaka-u.ac.jp> writes
> デッドロックはしなくなりますが、ロックしている時間が必要
> 最低限よりも長くなってしまいますね。
kernel 内部でロックが長く待たされる状況って実は「ない」んじ
ゃないでしょうか? (giant lockみたいなのはひどいと思うけど
(動かすためには理解できます)) Linux は、いまいち、そのあたり
見通し良く作っているようには見えなかった。こまめにlock/unlock
を繰り返しているコードがたくさん入っている感じですね。
そりゃだめだろと読んでいるときに思った記憶があります。
> 数サイクルのspinwaitでロックが成功するような資源しか
> ないのならそれでかまわないでしょうが、たとえばメモリブロック
> などのように得られなければblock/sleepするような資源が
> 混じっているとパフォーマンスがメタメタになるのでは?
そりゃそうなんだけど、kernel 内でlockで待つ必要はないですよ
ね。lock の対象がswap outされていたりするなら避けようがない
かも知れないけど。
そもそもパフォーマンスを要求するようなアプリケーションはメモ
リを頻繁に取得解放なんてしちゃだめだよね。いや、もしかして、
現実は、そういうことを意識してないアプリケーションをなんとか
速く動かすのがOSの役割ってことなのか?! X Window System とか
WWW Browser、WWW Server なんて、その典型だものなぁ。
> なお、教科書的に言うと、こうなっています。
(a)
> ・ロックする順序を守れば、ひとつずつ時間をおいてロックして
> いってもデッドロックしません。
(b)
> ・atomicな手続きで複数の資源がロックできるなら、必要な資源を
> 一気にえるようにすることでデッドロックを回避できます。
> この場合は資源の順番は気にしなくて良い。
(c)
> ・資源R1が得られなくてブロックする時、ロック済みの他の資源を
> 一旦開放して、最初から資源ロックをretryするならば、
> デッドロックは起こりません。この場合も資源の順序は気にしな
> くてよし。
(大変良くできました(桜))
ってことは、OS全体の構成を見て、
アクセスされる資源の組みと、swapされないlockの対象
を有限個用意して、それを atomic にlockするってのが効率良さそ
うな気がします。これは、割りと、micro kernel 的な感じになり
ますよね。おそらく、「アクセスされる資源の組み」は、OS内部の
serverに対応するから。なので、究極には micro kernel の方がSMP
ではパフォーマンスが出るってことになるはずなんだが...
(しかし、そんなにうまくはいかんのだろうな)
(c) はライブロックしそう...
(昔は、こういう議論をしていると mohta 氏が解説してくれたもんだが...)
---
Shinji KONO @ Information Engineering, University of the Ryukyus,
PRESTO, Japan Science and Technology Corporation
河野真治 @ 琉球大学工学部情報工学科,
科学技術振興事業団さきがけ研究21(機能と構成)
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735