0

私が理解していることから、ディレクトリベースのシステムはよりサーバー中心の設計であり、スヌーピングはよりピアツーピア中心です。

ディレクトリをチェックした後に有効なデータを持っているプロセッサに到達できるため、ディレクトリベースでは読み取りミスのメッセージが少なくて済みます。

スヌーピングは、n-1 メッセージである他のすべてのプロセッサに問い合わせるだけです。

そのため、ディレクトリ ベースのシステムはより拡張性があります。

ここで私の質問は次のとおりです。中央ディレクトリが1つしかない場合、読み取りミスの後にあまりにも多くのプロセッサが要求しているときにボトルネックに直面しませんか?

4

1 に答える 1

1

あなたが求めているシナリオが次のようなものである場合: すべての (または N-1) プロセッサが同時に読み取りミスをした場合 (これは通常、読み取り共有メッセージを生成します)、はい、すべての N-1 プロセッサがメッセージを送信しますディレクトリに送信すると、すべてに応答が必要になります。このシナリオは、すべてのプロセッサが同じスピンロックで待機している場合にのみ、頻繁に発生する可能性があります。解決策は、コヒーレンス プロトコルを修正することではなく (ただし、それを行うためのオプションはたくさんあります)、より優れたアルゴリズムを使用することです。一般に、人々はキューベースのロック アルゴリズムを使用します (たとえば、有名なMellor-Crummey と Scott のロック アルゴリズム)。

スピンロックは、全員が同時に「まだそこにいますか?」と尋ねるのに似ています。何度も。キューベースのロックでは、全員が番号を取り、列に並びます。次に、リソースが利用可能になると、次の担当者がプライベート変数で直接通知してリソースを取得します。

明確にするために、(通常) 論理的には 1 つの中央ディレクトリがありますが、すべてが物理的に 1 か所にあるわけではありません。特定のメモリ位置のディレクトリ エントリは、通常、そのメモリをサポートする物理 DRAM を持つプロセッサ上に同じ場所に配置されます。

于 2013-02-28T05:43:16.540 に答える