(57)【特許請求の範囲】
【請求項１】
それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、前記プロセッサと前記主メモリとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部と、を備えると共に、
前記コヒーレンシ制御部は、前記キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリと、当該ディレクトリ内のアドレス情報を掃き出す際にこのアドレス情報に対応する前記キャッシュメモリ内のデータの無効化を前記プロセッサに要求するスワップ制御部と、を備え、
前記プロセッサは、前記スワップ制御部から無効化を要求されたアドレス情報に対応する前記キャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知を前記スワップ制御部に対して行う無効化判定部を備え、
前記無効化判定部は、予め設定された基準と比較して、あるいは、他のデータと比較して、無効化を要求された前記アドレス情報に対応する前記キャッシュメモリに格納された前記データの使用頻度が高い場合に、前記データを無効化しないと判定すると共に、前記データを無効化しない通知を前記スワップ制御部に送信し、
前記スワップ制御部は、前記プロセッサから前記データを無効化しない通知を受けた場合に、前記ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応する前記キャッシュメモリ内のデータの無効化要求を前記プロセッサに対して行う、
ことを特徴とするマルチプロセッサシステム。
【請求項２】
前記無効化判定部は、前記スワップ制御部から無効化を要求された前記キャッシュメモリに格納されたデータの無効化を、当該データの前記プロセッサにおける使用状況に基づいて判定する、
ことを特徴とする請求項１記載のマルチプロセッサシステム。
【請求項３】
前記無効化判定部は、前記スワップ制御部からの無効化要求の内容に応じて、前記キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、
ことを特徴とする請求項１又は２記載のマルチプロセッサシステム。
【請求項４】
前記無効化判定部は、前記スワップ制御部からの無効化要求が強制的な無効化要求である場合に、前記キャッシュメモリに格納されたデータを無効化すると判定する、
ことを特徴とする請求項３記載のマルチプロセッサシステム。
【請求項５】
前記スワップ制御部は、同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するよう前記プロセッサに対する要求を行う、
ことを特徴とする請求項３又は４記載のマルチプロセッサシステム。
【請求項６】
前記スワップ制御部は、前記カウントした無効化要求回数が予め設定された閾値を超えた場合に強制的に無効化するよう前記プロセッサに対する要求を行う、
ことを特徴とする請求項５記載のマルチプロセッサシステム。
【請求項７】
前記閾値は、設定変更可能な値である、
ことを特徴とする請求項６記載のマルチプロセッサシステム。
【請求項８】
キャッシュメモリを備えたプロセッサであって、
キャッシュメモリを備えた他のプロセッサと共有する主メモリと複数のプロセッサとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部から、前記キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報の掃き出しの際に当該アドレス情報に対応するデータの無効化の要求を受け付けて、当該アドレス情報に対応する前記キャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知を前記コヒーレンシ制御部に対して行う無効化判定部を備え、
前記無効化判定部は、予め設定された基準と比較して、あるいは、他のデータと比較して、無効化を要求された前記アドレス情報に対応する前記キャッシュメモリに格納された前記データの使用頻度が高い場合に、前記データを無効化しないと判定すると共に、前記データを無効化しない通知を前記コヒーレンシ制御部に送信し、さらに、前記データを無効化しない通知を受け付けた前記コヒーレンシ制御部にて前記ディレクトリ内から掃き出すアドレス情報が変更され、前記コヒーレンシ制御部から送信された、変更された前記アドレス情報に対応する前記キャッシュメモリ内のデータの無効化の要求を受け付ける、
ことを特徴とするプロセッサ。
【請求項９】
前記無効化判定部は、前記スワップ制御部から無効化を要求された前記キャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、
ことを特徴とする請求項８記載のプロセッサ。
【請求項１０】
前記無効化判定部は、前記スワップ制御部からの無効化要求の内容に応じて、前記キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、
ことを特徴とする請求項８又は９記載のプロセッサ。
【請求項１１】
キャッシュメモリを備えたプロセッサに、
キャッシュメモリを備えた他のプロセッサと共有する主メモリと複数のプロセッサとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部から、前記キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報の掃き出しの際に当該アドレス情報に対応するデータの無効化の要求を受け付けて、当該アドレス情報に対応する前記キャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知を前記コヒーレンシ制御部に対して行う無効化判定部、を実現させるためのプログラムであって、
前記無効化判定部は、予め設定された基準と比較して、あるいは、他のデータと比較して、無効化を要求された前記アドレス情報に対応する前記キャッシュメモリに格納された前記データの使用頻度が高い場合に、前記データを無効化しないと判定すると共に、前記データを無効化しない通知を前記コヒーレンシ制御部に送信し、さらに、前記データを無効化しない通知を受け付けた前記コヒーレンシ制御部にて前記ディレクトリ内から掃き出すアドレス情報が変更され、前記コヒーレンシ制御部から送信された、変更された前記アドレス情報に対応する前記キャッシュメモリ内のデータの無効化の要求を受け付ける、
プログラム。
【請求項１２】
前記無効化判定部は、前記スワップ制御部から無効化を要求された前記キャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、
ことを特徴とする請求項１１記載のプログラム。
【請求項１３】
前記無効化判定部は、前記スワップ制御部からの無効化要求の内容に応じて、前記キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、
ことを特徴とする請求項１１又は１２記載のプログラム。
【請求項１４】
それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、前記プロセッサと前記主メモリとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部と、を備えたマルチプロセッサシステムによるスワップ方法であって、
前記キャッシュメモリに格納されたデータのアドレス情報を管理する前記コヒーレンシ制御部に装備されたディレクトリ内のアドレス情報を掃き出す際に当該アドレス情報に対応する前記キャッシュメモリ内のデータの無効化を前記プロセッサに要求する無効化要求工程と、前記無効化要求工程にて無効化を要求されたアドレス情報に対応する前記キャッシュメモリに格納されたデータを無効化するか否か判定して当該判定結果に応じた通知を前記コヒーレンシ制御部に対して行う無効化判定工程と、
を有し、
前記無効化判定工程は、予め設定された基準と比較して、あるいは、他のデータと比較して、無効化を要求された前記アドレス情報に対応する前記キャッシュメモリに格納された前記データの使用頻度が高い場合に、前記データを無効化しないと判定すると共に、前記データを無効化しない通知を前記コヒーレンシ制御部に送信し、
前記無効化要求工程は、前記無効化判定工程にて前記コヒーレンシ制御部が前記プロセッサから前記データを無効化しない通知を受けた場合に、前記ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応する前記キャッシュメモリ内のデータの無効化要求を前記プロセッサに対して行う、
ことを特徴とするスワップ方法。
【請求項１５】
前記無効化判定工程は、前記スワップ制御部から無効化を要求された前記キャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、
ことを特徴とする請求項１４記載のスワップ方法。
【請求項１６】
前記無効化判定工程は、前記スワップ制御部からの無効化要求の内容に応じて、前記キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、
ことを特徴とする請求項１４又は１５記載のスワップ方法。
【請求項１７】
前記無効化判定工程は、前記スワップ制御部からの無効化要求が強制的な無効化要求である場合に、前記キャッシュメモリに格納されたデータを無効化すると判定する、
ことを特徴とする請求項１６記載のスワップ方法。
【請求項１８】
前記プロセッサへの同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するよう前記プロセッサに対する要求を行う強制無効化要求工程を有する、
ことを特徴とする請求項１４，１５，１６又は１７記載のスワップ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムにかかり、特に、共有メモリ型のマルチプロセッサシステムに関する。
【背景技術】
【０００２】
共有メモリ型マルチプロセッサシステムは、それぞれキャッシュメモリを有する複数個のプロセッサを備えている。そして、各プロセッサ間のコヒーレンシを保障するためのコヒーレンシ制御回路を備えている。さらに、このコヒーレンシ制御回路は、各プロセッサのキャッシュメモリに格納されたデータのアドレス情報を管理する機能、つまり、各プロセッサのキャッシュ保有状態を保持するディレクトリやコピーキャッシュ等を備えている。
【０００３】
そして、上記ディレクトリやコピーキャッシュは、複数ウェイのセットアソシアティブ方式やフルアソシアティブ方式といった、１つの命令に対して複数のスワップ候補が存在する構造である。ここで、スワップとは、セットアソシアティブ方式やフルアソシアティブ方式を採用するディレクトリあるいはコピーキャッシュにおいて生じる処理である。例えば、ディレクトリ、コピーキャッシュに対して新たなアドレス情報を登録する必要が生じたが、これを格納する領域がディレクトリ、コピーキャッシュに存在しない場合に、ディレクトリ、コピーキャッシュに既に登録されているアドレス情報のいずれかを排除し、新たなアドレス情報を登録するための空き領域を生成する。この既に登録されている情報を排除する処理をスワップと呼ぶ。
【０００４】
そして、複数ウェイのセットアソシアティブ方式や、フルアソシアティブ方式等のディレクトリ、コピーキャッシュでは、スワップ対象とするアドレス情報の数は複数個あることになるが、この複数個の中からどのアドレス情報をスワップ対象とするかを選択する手段としては、ランダム方式やラウンドロビン方式、ＬＲＵ方式などがある。なお、複数のスワップ候補が存在する構造とは、ｎウェイセットアソシアティブ方式ではｎが複数である構造を指し、フルアソシアティブ方式では複数のキャッシュラインを管理できる構造であることを示す。そして、スワップ時には、ディレクトリからスワップしたアドレスのデータを保有していたプロセッサについても、コヒーレンシを保つために、そのデータを無効化する必要が生じる。
【０００５】
ここで、具体例として、ｎウェイセットアソシアティブ方式のディレクトリで、ディレクトリの同一エントリのｎレベル全てに空きがなくなった状態を考える。このときに、そのエントリで管理されるべきアドレスを持った命令がプロセッサから発行され、そのアドレスがディレクトリに管理されていなかった場合には、そのアドレスをディレクトリに登録するために、ディレクトリの同一エントリからスワップするレベルを選択してスワップを行う必要がある。このスワップ時に、コヒーレンシ制御回路では、選択したレベルで管理していたアドレスのデータをキャッシュメモリ内に持つプロセッサに対して、キャッシュ無効化命令を発行する。そして、プロセッサのキャッシュメモリのデータを無効化することによってコヒーレンシを保つ。
【０００６】
【特許文献１】特開平７−２８１９５７号公報
【特許文献２】特開２００６−３３０９４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、プロセッサが無効化したアドレスのデータを使っていた場合は、キャッシュの無効化によって必要なデータがキャッシュメモリから失われたことになる。従って、その後、プロセッサがそのアドレスのデータを使う際にキャッシュメモリにアクセスすると、キャッシュミスが発生する。すると、プロセッサはデータを主メモリに取りに行って再びキャッシュメモリに格納しなければならず、プロセッサ処理が遅くなる場合が生じる。その結果、上述したスワップによるキャッシュミスは、システム性能の向上のためには、減らす必要がある。
【０００８】
ここで、スワップ時のレベル選択方法には、ランダムアクセス法や、ラウンドロビン法、ＬＲＵ（Ｌｅａｓ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）法などがある。ところが、コヒーレンシ制御回路では、スワップ時におけるプロセッサのデータの使用状況はわからない。つまり、スワップレベルの選択はプロセッサのデータの使用状況とは無関係に行われている。このため、どの選択方法を使用しても、スワップによるキャッシュミスの発生は避けられない。例えば、ＬＲＵ法は最も更新されなかったレベルを選択する方式で、ヒット率を高める方法として使用されている。そして、ＬＲＵ法を使用したコヒーレンシ制御回路の制御においては、プロセッサがメモリにアクセスした時にディレクトリを更新し、スワップは最も長い間更新されなかったディレクトリのレベルを選択する。しかし、プロセッサがメモリのデータをキャッシュメモリに格納した後、そのデータをプロセッサ内で使用する期間はアドレスによって異なるため、メモリへのアクセス順序とプロセッサでのデータの使用状況とが一致するとは限らない。このため、ＬＲＵ法に従ってコヒーレンシ制御部内のディレクトリ等で最も長い間更新されなかったレベルをスワップ対象に選択しても、プロセッサではデータを使用している場合があるため、プロセッサではスワップ直後にキャッシュミスが発生することがある。
【０００９】
ここで、特許文献１では、プロセッサ内のキャッシュメモリに対して、プロセッサが発行するアクセス履歴情報の更新を抑止する命令に従ってＬＲＵの更新を行わないことで、使用中のキャッシュメモリの追い出しを抑止することを実現している。ところが、コヒーレンシ制御回路のスワップによるキャッシュ無効化命令への対処法は触れられていない。
【００１０】
また、特許文献２では、スワップによるキャッシュ掃き出し命令に関して、レベル選択を工夫することで掃き出し命令数を減らすことを実現している。但し、プロセッサのデータの使用状況は分からないため、プロセッサが使用中のデータに対しても掃き出し命令は発行される可能性がある。その結果、上述同様に、スワップ処理によってプロセッサにてキャッシュミスが発生する場合が生じ、当該プロセッサに処理遅延が生じる、という問題があった。
【００１１】
このため、本発明の目的は、上述した課題である、ディレクトリのスワップに起因したプロセッサのキャッシュミスを抑制し、処理遅延を軽減する、ことにある。
【課題を解決するための手段】
【００１２】
そこで、本発明の一形態であるマルチプロセッサシステムは、
それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、プロセッサと主メモリとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部と、を備えると共に、
コヒーレンシ制御部は、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリと、当該ディレクトリ内のアドレス情報を掃き出す際にこのアドレス情報に対応するキャッシュメモリ内のデータの無効化をプロセッサに要求するスワップ制御部と、を備え、
プロセッサは、スワップ制御部から無効化を要求されたアドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知をスワップ制御部に対して行う無効化判定部を備えた、
という構成を採る。
【発明の効果】
【００１３】
本発明は、以上のように構成されるため、これによると、プロセッサにてスワップに起因したキャッシュミスの発生を抑制することができ、処理遅延を軽減することができる。
【発明を実施するための最良の形態】
【００１４】
本発明は、共有メモリ型のマルチプロセッサシステムにおいて、コヒーレンシ制御回路内にディレクトリを持ち、スワップが発生し得るシステムにおいて適用可能な構成となっている。
【００１５】
そして、本発明では、コヒーレンシ制御回路が、スワップするアドレスのデータを保持しているプロセッサに当該アドレスのデータをキャッシュメモリから無効化するように命令を発行したとき、プロセッサがそのアドレスのキャッシュメモリ内のデータの無効化を拒否してリトライ信号を返信することを可能としている。そして、リトライを受けたコヒーレンシ制御回路は、ディレクトリやコピーキャッシュの別のアドレスをスワップ対象として選択しなおして、そのアドレスをキャッシングしているプロセッサに対してキャッシュ無効化命令を再び発行することを可能としている。
【００１６】
例えば、本発明の一形態であるマルチプロセッサシステムは、
それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、プロセッサと主メモリとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部と、を備えると共に、
コヒーレンシ制御部は、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリと、当該ディレクトリ内のアドレス情報を掃き出す際にこのアドレス情報に対応するキャッシュメモリ内のデータの無効化をプロセッサに要求するスワップ制御部と、を備え、
プロセッサは、スワップ制御部から無効化を要求されたアドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知をスワップ制御部に対して行う無効化判定部を備えた、
という構成を採る。
【００１７】
上記発明によると、まず、コヒーレンシ制御部は、ディレクトリ内のアドレス情報をスワップする（掃き出す）際に、当該スワップするアドレス情報に対応するキャッシュメモリ内のデータの無効化要求を、プロセッサに対して行う。これを受けたプロセッサは、無効化要求を受けたアドレス情報に対応するキャッシュメモリ内のデータの無効化を行うか否かを判定する。そして、判定結果に応じて、無効化を行う、あるいは、無効化を行わずに、その判定結果に応じた通知をスワップ制御部に対して行う。従って、プロセッサは、必ずしもキャッシュメモリ内のデータの無効化を行う必要は無く、無効化によって後にキャッシュミスが生じることを抑制することができる。また、無効化を行ったか否かをスワップ制御部に通知するため、スワップ対象のアドレス情報を変更するなどの対応を取ることができる。従って、コヒーレンシ制御部による処理の停滞を抑制でき、その結果、プロセッサによる処理遅延を軽減することができる。
【００１８】
また、上記マルチプロセッサシステムでは、上述無効化判定部は、スワップ制御部から無効化を要求されたキャッシュメモリに格納されたデータの無効化を、当該データのプロセッサにおける使用状況に基づいて判定する、という構成を採る。例えば、無効化判定部は、予め設定された基準と比較して、あるいは、他のデータと比較して、使用頻度が高いデータを無効化しないと判定する、という構成を採る。
【００１９】
これにより、プロセッサは、無効化を要求されたデータであっても、現在使用していたり、あるいは、使用頻度が高いデータは、無効化しないと判定する。従って、後に処理される可能性が高いデータを無効化することを抑制でき、キャッシュミスが生じることを有効に抑制することができる。その結果、プロセッサによる処理遅延をより軽減することができる。
【００２０】
また、上記マルチプロセッサシステムでは、上述した無効化判定部は、スワップ制御部からの無効化要求の内容に応じて、キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、という構成を採る。例えば、無効化判定部は、スワップ制御部からの無効化要求が強制的な無効化要求である場合に、キャッシュメモリに格納されたデータを無効化すると判定する、という構成を採る。
【００２１】
これにより、スワップ制御部から強制的な無効化を要求された場合など、無効化要求の内容に応じて、無効化判定部がデータを無効化すると判定する。その結果、スワップ対象となったアドレス情報に対応するキャッシュメモリ内のデータを確実に無効化でき、コヒーレンシ制御部における処理の停滞を抑制できる。その結果、プロセッサの処理遅延を抑制できる。
【００２２】
また、上記マルチプロセッサシステムでは、上述したスワップ制御部は、プロセッサから無効化を行っていない通知を受けた場合に、ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応するキャッシュメモリ内のデータの無効化要求をプロセッサに対して行う、という構成を採る。
【００２３】
これにより、プロセッサから無効化を行わない旨の通知を受けたスワップ制御部は、ディレクトリ内のスワップ対象となるアドレス情報を変更する。そして、この変更したアドレス情報に対するキャッシュメモリ内のデータの無効化を、再度プロセッサに要求する。その結果、プロセッサが無効化を行わないと判定した同一のデータに対する無効化要求を再発行することを抑制でき、コヒーレンシ制御部による処理の停滞を抑制できる。その結果、プロセッサによる処理遅延を軽減することができる。
【００２４】
また、上記マルチプロセッサシステムでは、上述したスワップ制御部は、同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するようプロセッサに対する要求を行う、という構成を採る。例えば、スワップ制御部は、カウントした無効化要求回数が予め設定された閾値を超えた場合に強制的に無効化するようプロセッサに対する要求を行う、という構成を採る。なお、上記閾値は、設定変更可能な値である。
【００２５】
これにより、プロセッサによって所定回数無効化が行われなかったデータに対して、強制的な無効化要求を行う。すると、プロセッサの無効化判定部は、強制的に無効化要求されたデータを、当該データの処理状況に関わらず無効化すると判定し、無効化する。その結果、コヒーレンシ制御部における処理の停滞を抑制でき、プロセッサの処理遅延を抑制できる。
【００２６】
また、本発明の他の形態であるキャッシュメモリを備えたプロセッサは、キャッシュメモリを備えた他のプロセッサと共有する主メモリと複数のプロセッサとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部から、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報の掃き出しの際に当該アドレス情報に対応するデータの無効化の要求を受け付けて、当該アドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知をスワップ制御部に対して行う無効化判定部を備えた、という構成を採る。
【００２７】
そして、上記プロセッサでは、上述した無効化判定部は、スワップ制御部から無効化を要求されたキャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、という構成を採る。また、上記無効化判定部は、スワップ制御部からの無効化要求の内容に応じて、キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、という構成を採る。
【００２８】
また、本発明の他の形態であるプログラムは、キャッシュメモリを備えたプロセッサに、キャッシュメモリを備えた他のプロセッサと共有する主メモリと複数のプロセッサとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部から、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報の掃き出しの際に当該アドレス情報に対応するデータの無効化の要求を受け付けて、当該アドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定して、この判定結果に応じた通知をスワップ制御部に対して行う無効化判定部、を実現させる、という構成を採る。
【００２９】
そして、上記プログラムでは、上述した無効化判定部は、スワップ制御部から無効化を要求されたキャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、という構成を採る。また、上記無効化判定部は、スワップ制御部からの無効化要求の内容に応じて、キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、という構成を採る。
【００３０】
また、本発明の他の形態であるコヒーレンシ制御装置は、それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、の間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御装置であって、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリと、当該ディレクトリ内のアドレス情報を掃き出す際にこのアドレス情報に対応する主メモリに格納されたデータの無効化をプロセッサに要求するスワップ制御部と、を備え、スワップ制御部は、プロセッサから無効化を要求したデータの無効化を行っていない通知を受けた場合に、ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応するキャッシュメモリ内のデータの無効化要求をプロセッサに対して行う、という構成を採る。そして、上記スワップ制御部は、同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するようプロセッサに対する要求を行う、という構成を採る。
【００３１】
また、本発明の他の形態であるプログラムは、それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、の間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御装置に、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報を掃き出す際に当該アドレス情報に対応する主メモリに格納されたデータの無効化をプロセッサに要求するスワップ制御部を実現させると共に、スワップ制御部は、プロセッサから無効化を要求したデータの無効化を行っていない通知を受けた場合に、ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応するキャッシュメモリ内のデータの無効化要求をプロセッサに対して行う、という構成を採る。そして、上記スワップ制御部は、同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するようプロセッサに対する要求を行う、という構成を採る。
【００３２】
また、本発明の他の形態であるスワップ方法は、それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、プロセッサと主メモリとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部と、を備えたマルチプロセッサシステムによるスワップ方法であって、キャッシュメモリに格納されたデータのアドレス情報を管理するコヒーレンシ制御部に装備されたディレクトリ内のアドレス情報を掃き出す際に当該アドレス情報に対応するキャッシュメモリ内のデータの無効化をプロセッサに要求する無効化要求工程と、スワップ制御部から無効化を要求されたアドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定して当該判定結果に応じた通知をスワップ制御部に対して行う無効化判定工程と、を有する、という構成を採る。
【００３３】
そして、上記無効化判定工程は、スワップ制御部から無効化を要求されたキャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、という構成を採る。また、上記無効化判定工程は、スワップ制御部からの無効化要求の内容に応じて、キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、という構成を採る。また、上記無効化判定工程は、スワップ制御部からの無効化要求が強制的な無効化要求である場合に、キャッシュメモリに格納されたデータを無効化すると判定する、という構成を採る。
【００３４】
さらに、上記スワップ方法では、無効化判定工程にてプロセッサから無効化を行っていない通知を受けた場合に、ディレクトリ内から掃き出すアドレス情報を変更し、当該変更したアドレス情報に対応するキャッシュメモリ内のデータの無効化要求をプロセッサに対して行う再無効化要求工程を有する、という構成を採る。また、上記スワップ方法では、プロセッサへの同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するようプロセッサに対する要求を行う強制無効化要求工程を有する、という構成を採る。
【００３５】
また、本発明の他の形態は、キャッシュメモリを備えたプロセッサによるキャッシュ無効化方法であって、キャッシュメモリを備えた他のプロセッサと共有する主メモリと複数のプロセッサとの間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部から、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報の掃き出しの際に当該アドレス情報に対応するデータの無効化の要求を受け付けて、当該アドレス情報に対応するキャッシュメモリに格納されたデータを無効化するか否か判定する無効化判定工程と、この判定結果に応じた通知をスワップ制御部に対して行う無効化判定通知工程と、を有する、という構成を採る。
【００３６】
また、上記キャッシュ無効化方法では、上述した無効化判定工程は、スワップ制御部から無効化を要求されたキャッシュメモリに格納されたデータの無効化を、当該データの使用状況に基づいて判定する、という構成を採る。また、上記無効化判定工程は、スワップ制御部からの無効化要求の内容に応じて、キャッシュメモリに格納されたデータの無効化を行うか否かを判定する、という構成を採る。
【００３７】
また、本発明の他の形態は、それぞれキャッシュメモリを備えた複数のプロセッサと、当該複数のプロセッサで共有する主メモリと、の間のキャッシュコヒーレンシを保障するよう制御するコヒーレンシ制御部によるスワップ方法であって、キャッシュメモリに格納されたデータのアドレス情報を管理するディレクトリ内のアドレス情報を掃き出す際に当該アドレス情報に対応するデータの無効化をキャッシュメモリに要求する無効化要求工程と、プロセッサから無効化を要求したデータの無効化を行っていない通知を受けた場合にディレクトリ内から掃き出すアドレス情報を変更して当該変更したアドレス情報に対応するキャッシュメモリ内のデータの無効化要求をプロセッサに対して行う無効化変更要求工程と、を有する、という構成を採る。
【００３８】
そして、上記スワップ方法では、同一データに対する無効化要求の回数をカウントし、当該回数に応じて強制的に無効化するようプロセッサに対する要求を行う強制無効化要求工程、を有する、という構成を採る。
【００３９】
上述した構成のプロセッサ、コヒーレンシ制御装置、プログラム、方法の発明であっても、上記マルチプロセッサシステムと同様に作用するため、上述した本発明の目的を達成することができる。
【００４０】
＜実施形態１＞
本発明の第１の実施形態を、図１乃至図１０を参照して説明する。図１は、マルチプロセッサシステムの構成を示すブロック図である。図２は、スワップ制御部の構成を示すブロック図である。図３は、管理テーブルのデータ構造を示す図である。図４は、ディレクトリのデータ構造を示す図である。図５は、プロセッサの構成を示すブロック図である。図６乃至図１０は、マルチプロセッサシステムの動作を示すフローチャートである。
【００４１】
［概要］
本実施形態では、コヒーレンシ制御回路にｎウェイセットアソシアティブ方式のディレクトリを搭載したシステムを一例に挙げて説明する。そして、本システムでは、コヒーレンシ制御回路（図１の符号５１，５２）が、スワップ処理に応じて、プロセッサ（図１の符号２１，２２，２３，２４）に対する命令として、リトライすることが可能なキャッシュ無効化命令を発する構成を採る。これに応じて、プロセッサは、コヒーレンシ制御回路から受け取ったキャッシュ無効化命令を受けて、キャッシュメモリ（図１の符号３１，３３，３５，３７）のデータの無効化を行うか行わないかを判定する無効化判定機能（図１の３２，３４，３６，３８）を備えている。この無効化判定機能は、キャッシュメモリのデータを保持し続けたい場合にはリトライを、無効化が可能な場合にはデータや通常のリプライを、コヒーレンシ制御回路に送出する制御を行う。また、コヒーレンシ制御回路は、スワップ制御部（図１の符号６２，６４）の中にリトライ管理部（図２の符号１３１）を備えている。そして、コヒーレンシ制御回路は、プロセッサへのキャッシュ無効化命令のリプライ結果がリトライの場合は、別のレベルをスワップ対象としてディレクトリから選択して、プロセッサにキャッシュ無効化命令を再度発行する機能を持つ。
【００４２】
以上の機能により、プロセッサは、コヒーレンシ制御回路からキャッシュ無効化命令を受信しても、データの使用を継続したい場合にはキャッシュメモリのデータの無効化を拒否することができるため、キャッシュミスの低減につながる。
【００４３】
［構成］
図１に示すように、本実施形態におけるマルチプロセッサシステムは、コヒーレンシ制御回路５１，５２が相互に接続された（符号８１）、２つのセル１１，１２から構成されている。例えば、一方のセル１１は、キャッシュメモリ３１，３３を各々有するプロセッサ２１，２２と、プロセッサ２１，２２，２３，２４で共有可能なメモリ７１（主メモリ）と、プロセッサ２１，２２やメモリ７１と相互接続４１，４２，４３されプロセッサ間のコヒーレンシを保証するための制御を行うコヒーレンシ制御回路５１と、を備えている。また、他方のセル１２も同様に、キャッシュメモリ３５，３７を各々有するプロセッサ２３，２４と、プロセッサ２１，２２，２３，２４で共有可能なメモリ７２と、プロセッサ２３，２４やメモリ７２と相互接続４４，４５，４６されプロセッサ間のコヒーレンシを保証するための制御を行うコヒーレンシ制御回路５２と、を備えている。以下、主に一方のセル１１の構成について説明する。なお、他方のセル１２もほぼ同一構造である。
【００４４】
上記コヒーレンシ制御回路５１（コヒーレンシ制御装置、コヒーレンシ制御部）は、プロセッサ２１，２２，２３，２４がそれぞれ有するキャッシュメモリ３１，３３，３５，３７のうち、メモリ７１に関するキャッシング情報を、キャッシュラインサイズのアドレス毎に保持するディレクトリ６１と、当該ディレクトリ６１のスワップ処理を行うためのスワップ制御部６２と、を有する。そして、コヒーレンシ制御回路５１は、他方のセル１２のコヒーレンシ制御回路５２と相互接続８１することで、他方のセル１２のプロセッサ２３，２４とメモリ７２へのアクセスが可能である。
【００４５】
また、各コヒーレンシ制御回路５１，５２に設けられたディレクトリ６１，６３は、複数レベルからなるセットアソシアティブ方式を使用しているため、コヒーレンシ制御回路５１，５２は、ディレクトリ６１またはディレクトリ６３に空きがない場合は、スワップ処理（掃き出し処理）を行う必要がある。例えば、スワップ処理では、ディレクトリ６１またはディレクトリ６３からスワップするレベルを選択してスワップし、スワップしたレベルには新規登録を行う。そして、このスワップ処理の際には、コヒーレンシを保障するために、プロセッサ２１，２２，２３，２４のキャッシュメモリ３１，３３，３５，３７にあるスワップ対象と同一アドレスのデータの無効化を行う。なお、コヒーレンシ制御回路５１，５２の構成については、後述する。
【００４６】
また、本実施形態におけるプロセッサ２１，２２，２３，２４は、コヒーレンシ制御回路５１，５２からの無効化命令（無効化要求）に応じて無効化を行うか否かを判定し、無効化を実行あるいは実行せず、判定結果に応じた通知を返送する無効化判定機能３２，３４，３６，３８を備えている。ここで、プロセッサ２１の詳細な構成を図５に示す。この図に示すように、本実施形態におけるプロセッサ２１は、所定のプログラムが組み込まれることで実現される、上記無効化判定機能３２を実現するための構成である、無効化命令受付部８１と、無効化判定部８２と、無効化処理部８３と、リプライ部８４と、を備えている。
【００４７】
上記無効化命令受付部８１は、上述したコヒーレンシ制御回路５１，５２からキャッシュ無効化命令を受信する。そして、無効化判定部８２は、無効化を命令されたアドレスに対応するキャッシュメモリ３１内のデータの無効化を行うか否か、判定する。このとき、そのデータのプロセッサ２１における使用状況に基づいて、キャッシュメモリ３１から対象データを無効化するか、無効化しないか、判定する。例えば、ＬＲＵ法を用いて、対象データを現在使用している場合や、予め設定された基準と比較して、あるいは、他のデータと比較して、使用頻度が高いデータを、無効化しないと判定する。但し、無効化判定部８２は、無効化要求の内容に応じて、無効化を拒否せずに無効化を実行するよう判定も行う。例えば、コヒーレンシ制御回路５１からの無効化命令が、リトライ不可能な無効化を強制する無効化命令である場合には、必ず無効化を行うよう判定する。そして、無効化を行うと判定した場合には、無効化処理部８３に通知し、無効化を行わない場合には、リプライ部８４に通知する。
【００４８】
そして、上記無効化処理部８３は、無効化を行うと判定したアドレスのキャッシュメモリ内のデータを無効化し、リプライ部８４に通知する。また、リプライ部８４は、無効化判定部８２による判定結果に応じた通知を、コヒーレンシ制御回路５１のスワップ制御部６２に行う。例えば、無効化を実行した場合には、その旨のリプライを行い、無効化を行わなかった場合には、リトライ信号を送信する。
【００４９】
次に、コヒーレンシ制御回路５１の構成について、さらに詳述する。図２は、スワップ制御部６２の詳細な構成を示すブロック図である。この図に示すように、スワップ制御部６２は、所定のプログラムが組み込まれることによって実現される、スワップ管理部１２１と、スワップ生成部１４１と、リトライ管理部１３１と、閾値調整部１０１と、を備えている。
【００５０】
上記スワップ管理部１２１は、ディレクトリ６１のスワップ対象として選択したレベルの情報を受け取ってから、該当するプロセッサ２１，２２，２３，２４に発行したキャッシュ無効化命令のリプライを受け取るまでの間、その情報を保持して管理する機能を有する。そして、受け取ったスワップレベル情報についてはスワップ生成部１４１にも送出する。また、スワップ管理部１２１は、キャッシュ無効化命令のリプライ結果とそのアドレスをリトライ管理部１３１に送出したり、リプライ結果がリトライの場合には、キャッシュ無効化命令の元となったスワップレベル情報からディレクトリ登録命令を作成し、ディレクトリ６１に登録の指示を行う機能を追加する。このディレクトリ登録命令により、次のスワップレベルが選択される。
【００５１】
上記スワップ生成部１４１は、スワップ管理部１２１から受け取ったスワップレベル情報を元に、プロセッサ２１，２２，２３，２４へのキャッシュ無効化命令を作成して送出する機能である。このスワップ生成部１４１では、生成する命令に関し、通常はリトライ可能なキャッシュ無効化命令を生成する。但し、リトライ管理部１３１からリトライ不可命令を発行するように指示された場合は、リトライ不可能なキャッシュ無効化命令に変更する機能が追加される。
【００５２】
上記リトライ管理部１３１は、キャッシュ無効化命令がリトライされた場合に、そのセットアドレスにおいてリトライがあった回数をカウントするための管理テーブル１３２を持つ。そして、リトライ回数と閾値制御部１０１の値を比較して、リトライ不可能なキャッシュ無効化命令を発行する必要があるか否かを判定する。このとき、リトライ回数が閾値に到達した場合は、スワップ生成部１４１にリトライ不可能なキャッシュ無効化命令を生成するよう指示を行う機能を持つ。
【００５３】
上記閾値制御部１０１は、リトライ可能なキャッシュ無効化命令を発行出来る回数の閾値を決定する。これは、同じセットアドレスのキャッシュ無効化命令がリトライから開放されない状態に陥ることを防いだり、リトライの増大によりシステム上で処理する命令数が膨大になることを防ぐためである。なお、閾値制御部１０１では、閾値の設定変更を可能にしており、システムの構成に沿った閾値を設定することができる。
【００５４】
ここで、図３に、管理テーブル１３２の構成の一例を示す。管理テーブル１３２は、管理テーブル１３２のエントリが有効であるか否かを示すバリッド１３３と、ディレクトリ６１，６３のセットアドレス１３４と、そのセットアドレス１３４においてキャッシュ無効化命令のリトライが発生した回数を示すリトライカウンタ１３５と、で構成される。そして、キャッシュ無効化命令のリトライが最初に発生したときに、バリッド１３３とセットアドレス１３４を登録する。バリッド１３３が有効なセットアドレス１３４でリトライが発生した場合は、そのリトライカウンタ１３５をカウントアップする。また、バリッド１３３とリトライカウンタ１３５は、キャッシュ無効化命令が成功するとリセットする。
【００５５】
また、図４は、ディレクトリ６１，６３の構成の一例を示している。この図に示すように、ディレクトリ６１，６３は、メモリ７１，７２のプロセッサキャッシュラインサイズごとの情報を保持するｎレベルのセットアソシアティブ方式をとる。セットアドレス２０２は、アドレスの一部のビットをディレクトリのエントリとして用いるが、そのエントリに相当するビットをセットアドレス２０２と呼び、セットアドレス２０２でディレクトリ６１，６３の索引や更新を行う。セットアドレス２０２を除くアドレスは、キーアドレス２０１としてディレクトリ６１，６３に保持する。ステータス情報２０３は当該アドレスのキャッシング状況を示す。空いているレベルとは、このステータス情報２０３がどのプロセッサからもキャッシングされていない値を示している場合を指す。エージェント情報２０４はキャッシングしているプロセッサの位置情報を示す。
【００５６】
［動作］
次に、上記構成のマルチプロセッサシステムにおけるスワップ時の動作を、図６乃至図１０のフローチャートを参照して説明する。なお、図６は、コヒーレンシ制御回路５１のディレクトリの制御に関する動作を示しており、図７乃至図９は、コヒーレンシ制御回路中のスワップ制御部の動作を示している。また、図１０はプロセッサの動作を示している。
【００５７】
まず、図６は、プロセッサ２１がディレクトリ６１の登録および更新を伴う命令を発行し、その命令をコヒーレンシ制御回路５１で受信してディレクトリ６１に登録および更新するまでの動作を示している。また、図６は、スワップ制御部６２がディレクトリ６１への登録命令を発行してから、ディレクトリ６１に登録するまでのコヒーレンシ制御回路５１のディレクトリ周辺の動作を示している。
【００５８】
はじめに、プロセッサが発行した命令を受信したときの動作を説明する。コヒーレンシ制御回路５１は、プロセッサ２１が発行した命令を接続線４１から受信すると、その命令のアドレス中のセットアドレス２０２でディレクトリ６１を索引する（ステップＳ０１）。そして、セットアドレス２０２が示すディレクトリ６１の全レベルの内容を読みだし、読みだした全レベルのキーアドレス２０１の中から命令のキーアドレスと一致するレベルがあるかを調べる（ステップＳ０２）。読みだしたキーアドレス２０１の中に命令のキーアドレスと一致するレベルが存在した場合は、一致したレベルのディレクトリ６１のステータス情報２０３とエージェント情報２０４を更新して（ステップＳ０３）、処理を終了する。
【００５９】
一方、キーアドレス２０１の一致するレベルがない場合は（ステップＳ０２でＮＯ）、読みだした全レベルのステータス情報２０３を調べて空きレベルを探す（ステップＳ０４）。そして、空きレベルが存在する場合は（ステップＳ０４でＹＥＳ）、選択したディレクトリ６１の空きレベルに、キーアドレス２０１、ステータス情報２０３、エージェント情報２０４を登録する（ステップＳ０５）。このとき、命令がプロセッサ発行であるか、スワップ制御部６２の発行であるかを確認し（ステップＳ０７）、プロセッサ発行の場合は（ステップＳ０７でＹＥＳ）、ディレクトリ処理を終了する。
【００６０】
また、上記ステップＳ０４で、ディレクトリに空きレベルが無い場合には（ステップＳ０４でＮＯ）、全レベルが使用中の場合でスワップが必要になるため、読み出した全レベルの情報を調べてスワップするレベルを選択する（ステップＳ０６）。そして、選択したレベルのデータであるキーアドレス２０１とステータス情報２０３、エージェント情報２０４および索引に使用したセットアドレス２０２を、スワップ制御部６２に送出する（ステップＳ０８）。その後、スワップによって空いたディレクトリ６１のレベルには、索引に使用した命令のキーアドレス２０１、ステータス情報２０３、エージェント情報２０４を登録して（ステップＳ１０）、ディレクトリ６１の索引および登録処理を終了する。なお、スワップレベルの選択については、例えばＬＲＵ法を使用する。また、その後は、図７に進む。
【００６１】
ここで、スワップ制御部６２からディレクトリ登録命令を受信した場合の動作についてさらに説明する。図６の動作フローにおいて、スワップ中のアドレスはディレクトリ６１には存在しないので、ステップＳ０２では必ずアドレス一致しないことと、ステップＳ０８ではプロセッサ発行命令ではないことを除けば、プロセッサ発行時の動作フローと同じであるため、ステップＳ０７以降について説明する。ステップＳ０７の確認の結果、スワップ制御部６２が発行した命令である場合は（ステップＳ０７でＮＯ）、既にスワップ制御部６２の管理テーブル１３２に登録済みであることを示すため、スワップ制御部６２に管理テーブル１３２の解除指示を送信して（ステップＳ０９）、ディレクトリ６１の索引および登録処理を終了する。なお、上述したように、ステップＳ０８でスワップレベル情報をスワップ制御部６２に送った場合は、図７の動作に進み、ステップＳ０９により管理テーブル１３２の解除指示を送った場合は図９の動作に進む。
【００６２】
続いて、図７のフローチャートを参照して説明する。図７は、例として、スワップ制御部６２でスワップレベル情報を受け取ってから、プロセッサにキャッシュ無効化命令を発行するまでのスワップ制御部６２の動作を示している。スワップ制御部６２では、コヒーレンシ制御回路５１のディレクトリ制御により受け取ったスワップレベル情報をスワップ管理部１２１に登録し（ステップＳ２１）、その情報をスワップ生成部１４１に送信する。また、スワップ管理部１２１は、そのスワップレベル情報のセットアドレス２０２をリトライ管理部１３１に送出し、管理テーブル１３２のバリッド１３３が有効なエントリのセットアドレス１３４を調べて、スワップレベル情報のセットアドレス２０２が登録されているかを確認する（ステップＳ２２）。この管理テーブル１３２に登録済みであるということは、同一セットアドレスのプロセッサへのキャッシュ無効化命令のリトライが先に発生していたことを示している。ステップＳ２２で管理テーブル１３２にスワップレベル情報が登録されていない場合は、１回目のスワップを意味するので、スワップ生成部１４１では、キーアドレス２０１とセットアドレス２０２からアドレスを生成する。そして、ステータス情報２０３とエージェント情報２０４からキャッシングしているプロセッサを探して、そのプロセッサ例えばプロセッサ２２に送出するリトライ可能なキャッシュ無効化命令を生成する（ステップＳ２５）。生成した命令は接続線４２を通してプロセッサ２２に発行し（ステップＳ２６、無効化要求工程）、キャッシュ無効化命令発行処理を終了する。なお、後述するように、一旦、無効化要求を出した後にプロセッサからリトライが返送された場合には、図６のステップＳ０６で選択された異なるスワップレベルの無効化要求命令を、プロセッサに発行することが可能となる（再無効化要求工程）。
【００６３】
ここで、ステップＳ２２で管理テーブル１３２にセットアドレス１３４が登録されていた場合は、そのエントリにあるリトライカウンタ１３５と閾値調整部１０１の閾値を比較する（ステップＳ２３）。なお、閾値は構成や使用形態により設定が可変である。つまり、構成等に応じて、メーカー等が設定変更することが可能である。そして、リトライカウンタ１３５が閾値に到達していない場合は、管理テーブル１３２に未登録の場合と同様に、スワップ生成部１４１で、ステータス情報をみて、リトライ可能なキャッシュ無効化命令を生成して（ステップＳ２５）、接続線４２を通って対象のプロセッサに発行し（ステップＳ２６）、キャッシュ無効化命令発行処理を終了する。一方、ステップＳ２３でリトライカウンタ１３５が閾値に達していた場合は、リトライ管理部１３１からスワップ生成部１４１にリトライ不可能な命令を生成するように指示を送り、スワップ生成部１４１では、キーアドレス２０１とセットアドレス２０２からアドレスを生成して、ステータス情報２０３とエージェント情報２０４からキャッシングしているプロセッサを探す。そして、そのプロセッサ例えばプロセッサ２３に送出するリトライ不可能なキャッシュ無効化命令を生成し（ステップＳ２４）、生成した命令をプロセッサ２３に発行して（ステップＳ２６、強制無効化要求工程）、キャッシュ無効化命令発行処理を終了する。
【００６４】
スワップ制御部６２からプロセッサ２３にキャッシュ無効化命令を発行する場合は、コヒーレンシ制御回路５１とプロセッサ２３は異なるセル１１，１２に属するため、プロセッサ２３への発行はセル間相互接続８１を通ってコヒーレンシ制御回路５２を経由して接続線４４から発行する。なお、スワップ制御部６２は、ステップＳ２６のキャッシュ無効化命令の発行処理を終了するとリプライ待ちに入り、図８の動作に進む。また、キャッシュ無効化命令を受け取ったプロセッサは、図１０の動作を行う。
【００６５】
次に、図８のフローチャートを参照して、キャッシュ無効化命令に対するリプライをプロセッサ２２から受けとった後、スワップ処理を終了するまでのスワップ制御部６２の動作を説明する。まず、スワップ制御部６２は、キャッシュ無効化命令のリプライをプロセッサから接続線４２を経由して受信する（ステップＳ３１）。ここで、プロセッサ２３が送信したリプライをスワップ制御部６２で受信する場合は、接続線４４を通ってコヒーレンシ制御回路５２を経由して、セル間相互接続８１からコヒーレンシ制御部５１に到着する。
【００６６】
そして、スワップ制御部６２でプロセッサ２２からのリプライを受け取ると、プロセッサ２２がキャッシュ無効化命令を実行したのか、リトライしたのかを確認する（ステップＳ３２）。キャッシュ無効化命令を実行していた場合は（ステップＳ３２でＮＯ）、スワップ処理を完了出来ることを意味するので、そのセットアドレスが管理テーブル１３２に登録されているかを確認する（ステップＳ３３）。このとき、未登録の場合は（ステップＳ３３でＮＯ）、スワップ管理部１２１で保持していた該当スワップ情報を解除して（ステップＳ４０）、スワップ処理が終了する。ステップＳ３３で管理テーブル１３２に登録されていた場合は（ステップＳ３３でＹＥＳ）、管理テーブル１３２の対象セットアドレス１３４が格納されたエントリのバリッド１３３とリトライカウンタ１３５をリセットして登録を解除し（ステップＳ３４）、スワップ管理部１２１で保持していた該当スワップ情報を解除して（ステップＳ４０）、一連のスワップ処理を終了する。
【００６７】
また、ステップＳ３２で、プロセッサ２２からのリプライがリトライだった場合は（ステップＳ３２でＹＥＳ）、そのセットアドレスが管理テーブル１３２に登録されているかを確認する（ステップＳ３５）。そして、未登録の場合は（ステップＳ３５でＮＯ）、管理テーブル１３２からバリッド１３３が無いエントリを探して、そのエントリにバリッド１３３とセットアドレス１３４を登録（ステップＳ３７）する。一方、登録済みの場合は（ステップＳ３５でＹＥＳ）、管理テーブル１３２の対象セットアドレス１３４と同一エントリにあるリトライカウンタ１３５の値をカウントアップする（ステップＳ３６）。
【００６８】
そして、管理テーブル１３２への登録またはカウントアップを終えると、スワップ管理部１２１に保持していた対象スワップ情報をディレクトリ６１に書き戻すために、スワップ情報をディレクトリ登録命令として作成して、コヒーレンシ制御回路５１に送出し（ステップＳ３８）、スワップ管理部１２１で保持していた該当スワップ情報を解除して（ステップＳ３９）、リトライ処理を終了する。なお、ステップＳ３９の終了後、ディレクトリ登録命令を受け取ったコヒーレンシ制御回路５１のディレクトリ制御では、上述した図６の動作を行う。
【００６９】
続いて、図９を参照して、コヒーレンシ制御回路５１のディレクトリ制御により管理テーブル１３２解除指示を受け取ったときのスワップ制御部６２の動作を説明する。スワップ制御部６２のリトライ管理部では、コヒーレンシ制御回路５１から管理テーブル１３２の解除指示を受け取ると、受け取った解除指示のセットアドレスを管理テーブル１３２から探し、そのセットアドレス１３４が格納されたエントリのバリッド１３３とリトライカウンタ１３５をリセットして登録を解除し（ステップＳ５１）、一連のスワップ処理を終了する。
【００７０】
次に、図１０を参照して、コヒーレンシ制御回路５１からキャッシュ無効化命令を受信したプロセッサ２２の動作を説明する。プロセッサ２２は、コヒーレンシ制御回路５１からキャッシュ無効化命令を受信すると（ステップＳ６１）、キャッシュメモリ３３にキャッシュ無効化対象のアドレスが含まれているかを調べる（ステップＳ６２）。アドレス不一致の場合は（ステップＳ６２でＮＯ）、処理が完了したことを示すリプライをコヒーレンシ制御回路５１に送信して（ステップＳ６７）、命令処理を終了する。
【００７１】
一方、アドレスが一致した場合は（ステップＳ６２でＹＥＳ）、無効化判定機能３４で、受信したキャッシュ無効化命令がリトライ可能な命令か否かを確認する（ステップＳ６３、無効化判定工程）。そして、リトライが不可能な命令の場合は（ステップＳ６３でＮＯ）、対象アドレスのキャッシュ無効化を実行する（ステップＳ６６）。このとき、メモリ７１に書き戻しが必要な場合は、メモリ７１への書き込み命令を並行して実施し、キャッシュ無効化命令処理が完了したことを示すリプライをコヒーレンシ制御回路５１に送信して（ステップＳ６７）、処理を終了する。
【００７２】
また、ステップＳ６３で、キャッシュ無効化命令がリトライ可能な場合は（ステップＳ６３でＹＥＳ）、キャッシュメモリ３３内における対象アドレスのデータの使用優先度を確認する（ステップＳ６４）。このとき、優先度が低い場合は（ステップＳ６４でＮＯ）、キャッシュの無効化を実行する（ステップＳ６６）。このとき、必要に応じてメモリ７１書き戻しを実施し、処理が完了したことを示すリプライをコヒーレンシ制御回路５１に送信して（ステップＳ６７）、処理を終了する。一方、ステップＳ６４で、使用優先度が高い場合は（ステップＳ６４でＹＥＳ）、キャッシュ無効化制御を行わずにリトライを表すリプライを、コヒーレンシ制御回路５１に送信する（ステップＳ６５，Ｓ６７）。そして、処理を終了する。
【００７３】
ここで、上記ステップＳ６４におけるキャッシュメモリ３３の使用優先度の判定には、ＬＲＵ法等を使用する。なお、ステップＳ６７によってリプライを受け取ったコヒーレンシ制御回路５１は、上述した図８の動作を行う。
【００７４】
以上説明したように、スワップ処理の全体動作としては、まず、コヒーレンシ制御回路がプロセッサからの命令を受け付けると、図６の動作を実行する。そして、スワップを行う場合は、コヒーレンシ制御回路が続いて図７の動作を行い、スワップ対象のデータの無効化をプロセッサに要求する。そして、プロセッサが図１０の動作を行い、無効化要求に応じて無効化を行う、あるいは、無効化を行わずに、リプライを送信する。そして、プロセッサからのリプライを受けて、コヒーレンシ制御回路は、図８の動作を行う。なお、コヒーレンシ制御回路は、リトライ時には、図８の後に図６に戻って、上述した図７，図１０の順に動作を繰り返す。なお、最終的には、図８でリトライ無しの動作、もしくは、図６でディレクトリに空きレベルが生じて、図９の動作に至ってスワップのリトライ処理を終了する。
【００７５】
以上のように、本実施形態によると、コヒーレンシ制御回路にあるディレクトリをスワップする際、リトライ可能なキャッシュメモリの無効化命令を発行すると共に、プロセッサはキャッシュメモリに一致したアドレスがあっても、使用優先度が高い場合はキャッシュメモリを無効化しないでリトライすることが可能である。従って、ディレクトリのスワップに起因したプロセッサのキャッシュミスでの処理遅延を軽減することができる。また、スワップがリトライされた場合には、コヒーレンシ制御回路ではそのスワップを再発行するのではなく、代替として異なるレベルを探してスワップ処理を継続するため、コヒーレンシ制御回路での処理の停滞の発生を抑制できる。なお、上記では、複数セル構成について記述しているが、複数プロセッサを搭載し、共有メモリを持った１セルの構成であってもよい。
【産業上の利用可能性】
【００７６】
本発明は、共有メモリ型マルチプロセッサシステムにおいてコヒーレンシ制御回路内ディレクトリやコピーキャッシュを持ち、スワップが発生し得るシステムにおいて適用でき、産業上の利用可能性を有する。
【図面の簡単な説明】
【００７７】
【図１】マルチプロセッサシステムの構成を示すブロック図である。
【図２】スワップ制御部の構成を示すブロック図である。
【図３】管理テーブルのデータ構造を示す図である。
【図４】ディレクトリのデータ構造を示す図である。
【図５】プロセッサの構成を示すブロック図である。
【図６】マルチプロセッサシステムの動作を示すフローチャートである。
【図７】マルチプロセッサシステムの動作を示すフローチャートである。
【図８】マルチプロセッサシステムの動作を示すフローチャートである。
【図９】マルチプロセッサシステムの動作を示すフローチャートである。
【図１０】マルチプロセッサシステムの動作を示すフローチャートである。
【符号の説明】
【００７８】
１１，１２  セル
２１，２２，２３，２４  プロセッサ
３１，３３，３５，３７  キャッシュメモリ
３２，３４，３６，３８  無効化判定機能
５１，５２  コヒーレンシ制御回路
６１，６３  ディレクトリ
６２，６４  スワップ制御部
７１，７２  メモリ
８１  無効化命令受付部
８２  無効化判定部
８３  無効化処理部
８４  リプライ部
１０１  閾値調整部
１２１  スワップ管理部
１３１  リトライ管理部
１３２  管理テーブル
１４１  スワップ生成部
【図１】
0005019222.tif 000002
【図２】
0005019222.tif 000003
【図３】
0005019222.tif 000004
【図４】
0005019222.tif 000005
【図５】
0005019222.tif 000006
【図６】
0005019222.tif 000007
【図７】
0005019222.tif 000008
【図８】
0005019222.tif 000009
【図９】
0005019222.tif 000010
【図１０】
0005019222.tif 000011