変わった
マッカー
渡邊鼎の!言いたい放談!
 

83 750のお話-1 bus-snoop

以前、マルチCPUについての604と750の関係について書こうとしたときがありましたが、私の考えていたことは、既に実現されているようだったので、間違ってるかなと思い、書くのを止めていたんですが、とりあえず、その辺の話を少し書い出して、皆さんの知識に少しは役に立つかもしれないと思い、書く次第です。

例によって、君もしくは、君の仲間がとらえられ、あるいは殺されても、当局は一切関知しないから、そのつもりで。幸運を祈る。

じゃーなくて、既に知っている人は、この文を読んで、私を殺したくなったり、自分のパソコンのキーボードやマウスに八つ当たりしても、当局は一切関知しないからそのつもりで、幸運を祈る。


まず、キャッシュなしのCPUがプログラムを実行しているときで、しかも、そのCPU以外に、主記憶を書きかえられるバスマスターがいた場合、どういうことが起きるか考えてみましょう。これはCPU以外のハードによるDMAでも、マルチCPUでも同じ。各バスマスターが使用している、メモリーのアドレスが、各々違うところを、勝手に使用している場合は、あまり問題がない。このようなとき、バスの使用権を調停する機構がCPUなどにそれぞれ付いていて、ハード的に決定し、競合が起きないようになっている。

で、問題になるのは、同じアドレスを、別のバスマスターが、読み書きしている場合です。こういう要求は、お互いのバスマスターが、通信しあいながら、協調作業している場合に必要になります。たとえば、あるアドレスのメモリを、作業依頼や、作業終了を知らせるための旗(フラグ)として使用する場合などでは、別のCPUが同じメモリを同時に読み書きしたいと、ぶつかる場合があります。そのメモリを読んで、内容をちょっと変えて、又書き戻したり、全部0にしたり、単に読むだけだったり、いろいろありますが、問題が次のようなとき起こります。

CPU1が、あるメモリを読んできて、そのデータbit0に1をセットして、メモリーに書き戻します。CPU2が、同じとこを見て、同じように、見て、結果によってはビットをセットしたりクリアしたりして、又メモリに書き戻したとすましょう。CPUが読んできて、まだ書く前に、CPU2がそのメモリを読んで、ビットセットし、その間に、CPU1がメモリに書き込んで、次にCPU2がメモリに書き込む、という順になったとします。すると、CPU1が書いた値は、CPU2によって、上書きされてしまい、無くなってしまいますね。

ま、こんな事も起きるようになるわけです。この辺は、Bit test & Set命令がちゃんとあり、これを使えば、読んでから書くまでの間は、バスアクセスが分離されないように、ハード的に工夫してあったりすれば、問題が起きなくなります。

ま、この辺は、遅くても良ければ、ソフトで通信し合って、逃げられるわけですが・・・

で、CPUにデータキャッシュがある場合ですが、普通、キャッシュ内に既に読みたいメモリアドレスの内容が読み込まれていれば、キャッシュがヒットしており、外部メモリにアクセスしないわけですが、これが2つのCPUで同じようなことが起きた場合は、どうなるでしょうか。両方とも、自分のキャッシュ内にあるとキャッシュコントローラーが判断するので、外部に見に行きません。すると、2つのCPU間で、フラグのやり取り=通信が出来ないですね。これが問題になるので、バスを盗み見するハードウェア機構が付いています。これが、bus-snoop機構です。この機構はCPUの動作と同期して並列に動き、勝手にバスの内容とキャッシュのtagを比較していて、キャッシュ内に入っている、データの、元のアドレスに対する、書き込みアクセスが、外部で実行されたかどうかを監視しているわけです。

アクセスがあった場合、多分、この制御回路は、外部の書き込み時のデータを、内部のキャッシュのデータとして書き込むわけでしょう。すると、いつも、別のバスマスターからの書込に対しても、全てのbus-snoop機構をもっている、マルチCPUのキャッシュは、いつも、同じになる(コヒーレントである)ということになるわけです。

でSMP(対称型マルチプロセッサー)の世界では、この技術が必須であるわけです。

 

で、世の中の文献で、750がマルチプロセッサーに対応していないと書いてあったんで、私は、604Eはbus-snoop機構を持っていて、750はないものだと、勝手に想像したわけです。

が、マニュアルを見ると、あるようなんですね。MEI Protocol ってーやつで。これで、60Xバスと2ndキャッシュをbus-snoopすると書いてあります。

で、さらに見ていると、出てきました。Coherency Precautions in MultiProcessor Systems ってーやつが。

The MPC750's three-state coherency protocol permits no data sharing between the MPC750 and other caches. All burst reads initiated by the MPC750 are performed as read with intent to modify. Burst snoops are interpreted as read with intent to modify or read with no intent to cache. This effectively @laces all caches in the system into a three-state coherency scheme. Four-State caches may share data amongst themselves but not with the MPC750.

ちょっと、うまく訳せないけど、要するに、750の3-stateキャッシュ制御では、だめで、4-stateなら、うまくいくけど、750には付いてない。ということですね。

750による、burstリードは、修正することを意図したREADとしてしか、認識されないから。

なんか、わからんけど、何しろ4stateにしなかったための、仕様のバグのように感じるけど・・・・・

どこかの誰かが、言ってたけど、ソフトで逃げられ無くはないと。・・・・

結局、2ndキャッシュを入れたため、bus-snoop制御回路が、604のままでやっちゃったんで、だめだったということなんでしょうか。

以下次号


[Home] [Linkし放題] [Fleamarket]