(57)【特許請求の範囲】
【請求項１】
相互に通信可能な少なくとも２以上の演算装置を含み、前記演算装置の各々は、キャッシュを備えると共に対応するメモリに接続するシステムにおいて、前記メモリのいずれか１つへアクセスした演算装置を特定するための方法であって、
前記メモリのいずれか１つへのメモリアクセスをモニターするステップと、
前記演算装置間のキャッシュ・コヒーレンシ・コマンドをモニターするステップと、
前記メモリアクセスに関する情報と前記キャッシュ・コヒーレンシ・コマンドに関する情報とから前記メモリアクセスがモニターされた前記メモリのいずれか１つへアクセスした演算装置を特定するステップと、を含む方法。
【請求項２】
前記メモリのいずれか１つへのメモリアクセスをモニターするステップは、前記メモリのいずれか１つに接続するメモリバスを介して前記メモリアクセスに関する情報を取得し、当該情報を保管するステップを含む、請求項１に記載の方法。
【請求項３】
前記演算装置間のキャッシュ・コヒーレンシ・コマンドをモニターするステップは、
前記演算装置間のインターコネクトを介して前記キャッシュ・コヒーレンシ・コマンドをモニターし、前記キャッシュ・コヒーレンシ・コマンドに関する情報を保管するステップを含む、請求項１にまたは２に記載の方法。
【請求項４】
前記メモリのいずれか１つへアクセスした演算装置を特定するステップは、
前記キャッシュ・コヒーレンシ・コマンドに関する情報の履歴の中から前記メモリアクセスに関する情報中のメモリアドレスと同じメモリアドレスを含む前記キャッシュ・コヒーレンシ・コマンドを特定するステップと、
特定された前記キャッシュ・コヒーレンシ・コマンドを前記メモリアクセスのタイミングに最も近いタイミングで出力した演算装置を前記メモリのいずれか１つへアクセスした演算装置として特定するステップと、を含む請求項３に記載の方法。
【請求項５】
前記メモリアクセスに関する情報は、アクセスタイムと、コマンドの種類と、メモリアドレスとを含み、
前記キャッシュ・コヒーレンシ・コマンドに関する情報は、コマンド発生タイムと、コマンドの種類と、メモリアドレスと、コマンドを出力した演算装置のＩＤとを含む、請求項１〜４のいずれか１項に記載の方法。
【請求項６】
相互にインターコネクトを介して通信可能な少なくとも２以上の演算装置を含み、前記演算装置の各々は、キャッシュを備えると共にメモリバスを介して対応するメモリに接続するシステムにおいて、前記メモリのいずれか１つである第１メモリへアクセスした演算装置を特定するための方法であって、
前記第１メモリに接続する前記メモリバスを介して前記第１メモリへのメモリアクセスをモニターするステップと、
前記演算装置間の前記インターコネクトを介してキャッシュ・コヒーレンシ・コマンドをモニターし、当該コマンドに関する情報を保管するステップと、
前記コマンドに関する情報の履歴の中から前記第１メモリへのメモリアクセスのメモリアドレスと同じメモリアドレスを含むコマンドを特定するステップと、
特定された前記コマンドを前記第１メモリへのメモリアクセスのタイミングに最も近いタイミングで出力した演算装置を前記第１メモリへアクセスした演算装置として特定する
ステップと、を含む方法。
【請求項７】
請求項１〜６のいずれか１項の方法の各ステップを実行するためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセストレース方法に関し、より具体的には、マルチプロセッサシステムにおいて、共有されるメモリへアクセスするプロセッサを特定するための方法に関する。
【背景技術】
【０００２】
キャッシュ、メモリコントローラ、CPU間インターコネクトなどのハードウェアのデザイン／チューニング、あるいはVM、OS、アプリケーションなどのソフトウェアのデザイン／チューニングを行うための方法の一つにメモリアクセストレースがある。メモリアクセストレースは、一般にメモリバスの信号をプローブし、そのコマンド、アドレス、及びデータを記録するものである。
【０００３】
NUMA（Non-Uniform Memory Access）に代表されるようなアーキテクチャを採用する共有メモリ型マルチプロセッサシステムでは、メモリアクセストレースとして、例えば、CPUからなるNUMA構成のサーバが、各CPUと対応するローカルメモリ（DIMM）の間のメモリバス（MB）信号をプローブし、その動きを記録することが行われる。
【０００４】
一方で、ハードウェアあるいはソフトウェアのより高度な動作解析やチューニングを行うために、メモリアクセスに注目し、そのメモリアクセスがどのCPUから発行されたものか知りたい場合がある。例えば、NUMA構成のシステムでは、ローカルメモリ及びリモートメモリに対して発生したメモリアクセスが、どのCPUによって行われたかを特定したいという要求がある。
【０００５】
メモリバス上には、アドレスとリード／ライトの情報は流れているが、アクセス要求元のCPUを特定する情報は流れていない。したがって、従来のメモリアクセストレースでは、アクセス要求元のCPUを特定することはできない。そのため、例えば、CPU間のインターコネクト（CI）にプローブを接続して、流れるリード／ライトパケットをモニターする必要がある。しかし、アクセス要求元のCPUを特定するには、全てのCPU間のインターコネクトをモニターしなければならないため電気的、機械的に大きな労力が必要である。また、ローカルメモリへのアクセスは、CPU間のインターコネクトを通らないので、インターコネクトをモニターするだけでは、直接的にアクセス要求元のCPUを特定することはできない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１５２６６５
【特許文献２】特開２００６−３１８４１２
【特許文献３】特開２００９−１９３６０４
【発明の概要】
【発明が解決しようとする課題】
【０００７】
したがって、本発明の目的は、相互に通信可能な少なくとも２以上の演算装置の各々が、キャッシュを備えると共に対応するメモリに接続するマルチプロセッサシステムにおいて、共有されるメモリのいずれか１つへアクセスする演算装置を特定するための方法を提供することである。
【課題を解決するための手段】
【０００８】
本発明は、相互に通信可能な少なくとも２以上の演算装置を含み、演算装置の各々は、キャッシュを備えると共に対応するメモリに接続するシステムにおいて、メモリのいずれか１つへアクセスする演算装置を特定するための方法を提供する。その方法は、（ａ）メモリのいずれか１つへのメモリアクセスをモニターするステップと、（ｂ）演算装置間のキャッシュ・コヒーレンシ・コマンドをモニターするステップと、（ｃ）メモリアクセスに関する情報とキャッシュ・コヒーレンシ・コマンドに関する情報とからメモリのいずれか１つへアクセスする演算装置を特定するステップと、を含む。
【０００９】
本発明の一態様では、メモリのいずれか１つへのメモリアクセスをモニターするステップ（ａ）は、メモリのいずれか１つに接続するメモリバスを介してメモリアクセスに関する情報を取得し、当該情報を保管するステップを含む。
【００１０】
本発明の一態様では、演算装置間のキャッシュ・コヒーレンシ・コマンドをモニターするステップ（ｂ）は、演算装置間のインターコネクトを介してキャッシュ・コヒーレンシ・コマンドをモニターし、キャッシュ・コヒーレンシ・コマンドに関する情報を保管するステップを含む。
【００１１】
本発明の一態様では、メモリのいずれか１つへアクセスする演算装置を特定するステップ（ｃ）は、（ｃ１）キャッシュ・コヒーレンシ・コマンドに関する情報の履歴の中からメモリアクセスに関する情報中のメモリアドレスと同じメモリアドレスを含むキャッシュ・コヒーレンシ・コマンドを特定するステップと、（ｃ２）特定されたキャッシュ・コヒーレンシ・コマンドをメモリアクセスのタイミングに最も近いタイミングで出力した演算装置を前記メモリのいずれか１つへアクセスする演算装置として特定するステップと、を含む。
【００１２】
本発明の一態様では、メモリアクセスに関する情報は、アクセスタイムと、コマンドの種類と、メモリアドレスとを含み、キャッシュ・コヒーレンシ・コマンドに関する情報は、コマンド発生タイムと、コマンドの種類と、メモリアドレスと、コマンドを出力した演算装置のＩＤとを含む。
【図面の簡単な説明】
【００１３】
【図１】本発明の方法を実行するマルチプロセッサシステムの構成例を示すブロック図である。
【図２】本発明の方法を実行するマルチプロセッサシステムの構成例を示すブロック図である。
【図３】本発明の方法の基本フローを示す図である。
【図４】本発明の一実施例の構成及び信号の流れを示す図である。
【図５】本発明の一実施例の構成及び信号の流れを示す図である。
【図６】本発明の一実施例の構成及び信号の流れを示す図である。
【図７】本発明の一実施例の構成及び信号の流れを示す図である。
【図８】本発明の一実施例の構成及び信号の流れを示す図である。
【図９】本発明の一実施例の構成及び信号の流れを示す図である。
【発明を実施するための形態】
【００１４】
図面を参照しながら本発明の実施の形態を説明する。図１と図２は、本発明の方法を実行する実行するマルチプロセッサシステムの構成例を示すブロック図である。図１と図２は、NUMA（Non-Uniform Memory Access）方式の共有メモリ型マルチプロセッサシステム１００の構成例である。なお、図１と図２においては、NUMA方式の４つのプロセッサ（以下、「ＣＰＵ」と呼ぶ）ＣＰＵ１−４を含む例を示しているが、本発明を実行する構成はこれに限られず、基本的にメモリを共有する少なくとも２以上のＣＰＵを含むマルチプロセッサシステムにおいて実行可能である
【００１５】
図１において、各ノードを構成するＣＰＵ１〜４の各々とメモリＭ１〜Ｍ４の各々が対応するメモリバス１０を介して相互に通信可能に接続されている。各ＣＰＵ１〜４は、キャッシュを備え、さらにインターコネクト２０を介して相互に通信可能に接続されている。メモリＭ１〜Ｍ４の各々は、ローカルメモリあるいはリモートメモリとして各ＣＰＵに共有される。メモリＭ１〜Ｍ４は、例えば複数のＤＲＡＭを含むメモリモジュール（例えば、ＤＩＭＭ）からなる。図１の例では、全ＣＰＵから等価にアクセス可能なグローバルなメモリとしてメモリＭＭも例示されている。
【００１６】
図２は、図１の共有メモリ型マルチプロセッサシステム１００構成例を本発明の説明のために構成し直したブロック（イメージ）図である。図２では、図１のインターコネクト２０がより明確になるように、符号Ｉ１〜Ｉ６で指示されるラインによって、各ＣＰＵ間のインターコネクトを示している。また、各ノードにおけるメモリバスも符号ｂ１〜ｂ４のラインで示している。本発明の方法では、下記に説明するように、符号３０でイメージされるプローブを用いて、メモリバスｂ１〜ｂ４のいずれか１つまたは２以上、及びインターコネクトＩ１〜Ｉ６のいずれか１つまたは２以上をモニターすることにより、より正確にはそのモニター結果（情報）を利用して、共有されるメモリＭ１〜Ｍ４の各々にアクセス（Ｒ／Ｗ）するＣＰＵを特定する。
【００１７】
図２及び図３を参照しながら本発明の方法のフローについて説明する。図３は、本発明の方法の基本的なフローを示す図である。図３のフローを含む本発明の方法は、例えば、上述した共有メモリ型マルチプロセッサシステム１００を備えるコンピュータ（サーバ）が、メモリ（コンピュータがアクセス可能なＨＤＤ等）に格納された所定のソフトウェアを呼び出して実行することにより実施される。
【００１８】
図３のステップＳ１１において、メモリＭ１〜Ｍ４のいずれか１つへのメモリアクセスをモニターする。そのモニターは、プローブ３０をメモリバスｂ１〜ｂ４のいずれか１つまたは２以上に接続して、バス上の信号からメモリアクセスに関する情報を取得し、その情報を所定のメモリ（コンピュータがアクセス可能なＨＤＤ等）に保管することにより行う。メモリアクセスに関する情報には、例えば、アクセスタイム、コマンドの種類、及びメモリアドレスが含まれる。
【００１９】
ステップＳ１２において、ＣＰＵ１〜４間のキャッシュ・コヒーレンシ・コマンドをモニターする。そのモニターは、プローブ３０をインターコネクトＩ１〜Ｉ６のいずれか１つまたは２以上に接続して、インターコネクト上の信号からそのキャッシュ・コヒーレンシ・コマンドに関する情報（パケット情報、プロトコル）を取得し、その情報を所定のメモリ（コンピュータがアクセス可能なＨＤＤ等）に保管することにより行う。そのコマンドに関する情報には、例えば、コマンド発生タイム、コマンドの種類、メモリアドレス、及びコマンドを出力したＣＰＵのＩＤが含まれる。
【００２０】
ステップＳ１３において、ステップＳ１１で取得したメモリアクセスに関する情報とステップＳ１２で取得したキャッシュ・コヒーレンシ・コマンドに関する情報とから、メモリＭ１〜Ｍ４のいずれか１つへアクセスするＣＰＵを特定する。その特定は、コンピュータによって実行される、メモリに保管された情報の履歴を用いるオフライン解析として、以下の手順でおこなうことができる。
【００２１】
（ｉ）メモリに保管されたキャッシュ・コヒーレンシ・コマンドに関する情報の履歴の中から、メモリに保管された特定のメモリ（Ｍ１〜Ｍ４のいずれか）に対するメモリアクセスに関する情報中のメモリアドレスと同じメモリアドレスを含むキャッシュ・コヒーレンシ・コマンドを特定する。
（ｉｉ）特定されたキャッシュ・コヒーレンシ・コマンドをメモリアクセスのタイミングに最も近い（最新／最後の）タイミングで出力したＣＰＵをそのメモリへアクセスするＣＰＵとして特定する。
【００２２】
上述したステップＳ１３のアクセスするＣＰＵの特定に関して、以下に述べる実施例において、図４〜図９を参照しながら具体的に説明する。なお、以下の実施例においては、図２のシステム１００において、ＭＥＳＩプロトコルを用いてキャッシュ・コヒーレンシを確保するためのメモリ制御（キャッシュ・コヒーレンシ制御）を行う場合の例を示しているが、本発明はこのＭＥＳＩプロトコルに限定されず他のＭＥＳＩＦプロトコル等のブロードキャスト（broadcast）ベースのキャッシュ・コヒーレンシ制御全般に適用可能である。
【実施例１】
【００２３】
図４を参照する。ＣＰＵ１のキャッシュラインがＩ（Invalid：無効）状態にあるとする。ＣＰＵ１がローカルメモリＭ１にメモリアクセス（リード）Ａ１を行い、さらに、他のＣＰＵ２〜４に対して、リードするアドレスのデータと同じデータを保有しているか否かを確認するべく、キャッシュ・コヒーレンシ・コマンドＣ１〜Ｃ３を送ったとする。プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。メモリアクセスＡ１の情報には、既に上述した、例えば、アクセスタイム、コマンドの種類、及びメモリアドレスが含まれる。なお、以下の実施例においてもその情報の内容は同様である。プローブ２によりインターコネクトＩ１上のキャッシュ・コヒーレンシ・コマンドＣ１の情報が取得されて保管される。そのコマンドＣ１の情報には、既に上述した、例えば、コマンド発生タイム、コマンドの種類、メモリアドレス、及びコマンドを出力したＣＰＵのＩＤが含まれる。なお、以下の実施例においてもその情報の内容は同様である。
【００２４】
保管された情報の履歴から、キャッシュ・コヒーレンシ・コマンドＣ１をメモリアクセスＡ１のタイミングに最も近い（最新／最後の）タイミングで出力したＣＰＵ１がメモリＭ１へアクセスしたＣＰＵとして特定される。言い換えれば、キャッシュ・コヒーレンシ・コマンドＣ１の発生タイミングに最も近い（最新／最後の）タイミングで発生したメモリアクセスＡ１を出力したＣＰＵ１がメモリＭ１へアクセス（リード）したＣＰＵとして特定される。
【実施例２】
【００２５】
図５を参照する。図４の場合と違って、ＣＰＵ４のキャッシュラインがＩ（Invalid：無効）状態にあるとする。ＣＰＵ４がリモートメモリに相当するＣＰＵ１のローカルメモリＭ１にメモリアクセス（リード）Ａ１を行い、他のＣＰＵ２、３に対して、リードするアドレスのデータと同じデータを保有しているか否かを確認すべく、キャッシュ・コヒーレンシ・コマンドＣ１、Ｃ２を送ったとする。この場合、プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。プローブ５によりインターコネクトＩ６上のキャッシュ・コヒーレンシ・コマンドＣ２の情報が取得されて保管される。
【００２６】
保管された情報の履歴から、キャッシュ・コヒーレンシ・コマンドＣ２をメモリアクセスＡ１のタイミングに最も近い（最新／最後の）タイミングで出力したＣＰＵ４がメモリＭ１へアクセスしたＣＰＵとして特定される。言い換えれば、キャッシュ・コヒーレンシ・コマンドＣ２の発生タイミングに最も近い（最新／最後の）タイミングで発生したメモリアクセスＡ１を出力したＣＰＵ４がメモリＭ１へアクセス（リード）したＣＰＵとして特定される。
【実施例３】
【００２７】
再び図４を参照する。ＣＰＵ１、３、４の３つのキャッシュラインがＳ（Shared：共有）状態にあるとする。ＣＰＵ１がローカルメモリＭ１にメモリアクセス（ライト）Ａ１を行い、他のＣＰＵ２〜４に対して、ライトするアドレスのデータと同じデータの無効を伝えるべく、キャッシュ・コヒーレンシ・コマンドＣ１〜Ｃ３を送ったとする。プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。プローブ２によりインターコネクトＩ１上のキャッシュ・コヒーレンシ・コマンドＣ１の情報が取得されて保管される。
【００２８】
保管された情報の履歴から、キャッシュ・コヒーレンシ・コマンドＣ１をメモリアクセスＡ１のタイミングに最も近い（最新／最後の）タイミングで出力したＣＰＵ１がメモリＭ１へアクセスしたＣＰＵとして特定される。言い換えれば、キャッシュ・コヒーレンシ・コマンドＣ１の発生タイミングに最も近い（最新／最後の）タイミングで発生したメモリアクセスＡ１を出力したＣＰＵ１がメモリＭ１へアクセス（ライト）したＣＰＵとして特定される。
【実施例４】
【００２９】
再び図５を参照する。ＣＰＵ２、４の２つのキャッシュラインがＳ（Shared：共有）状態にあるとする。ＣＰＵ４がリモートメモリに相当するＣＰＵ１のローカルメモリＭ１にメモリアクセス（ライト）Ａ１を行い、他のＣＰＵ２、３に対して、ライトするアドレスのデータと同じデータの無効を指示すべく、キャッシュ・コヒーレンシ・コマンドＣ１、Ｃ２を送ったとする。プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。プローブ５によりインターコネクトＩ６上のキャッシュ・コヒーレンシ・コマンドＣ２の情報が取得されて保管される。
【００３０】
保管された情報の履歴から、キャッシュ・コヒーレンシ・コマンドＣ２をメモリアクセスＡ１のタイミングに最も近い（最新／最後の）タイミングで出力したＣＰＵ４がメモリＭ１へアクセスしたＣＰＵとして特定される。言い換えれば、キャッシュ・コヒーレンシ・コマンドＣ２の発生タイミングに最も近い（最新／最後の）タイミングで発生したメモリアクセスＡ１を出力したＣＰＵ４がメモリＭ１へアクセス（ライト）したＣＰＵとして特定される。
【実施例５】
【００３１】
図６を参照する。ＣＰＵ２のキャッシュラインがＭ（Modified：変更）状態にあり、そのキャッシュラインが追い出される（Cast out）ケースである。ＣＰＵ２がリモートメモリに相当するＣＰＵ１のローカルメモリＭ１にメモリアクセス（ライト）Ａ１を行ったとする。プローブ１、２によりバスｂ１及びインターコネクトＩ１上のメモリアクセスＡ１の情報が取得されて保管される。ここで、Ｍ状態のキャッシュラインの追い出し（Cast out)であるから、ＣＰＵ２はＣＰＵ３とＣＰＵ４へスヌープ（Snoop）リクエストを出さないことに留意されたい。
【００３２】
保管された情報の履歴から、メモリＭ１へのメモリアクセスＡ１の情報中のアドレスと同じアドレスに最後（最新）にアクセス（ライト）したＣＰＵ２がメモリＭ１へアクセス（ライト）したＣＰＵとして特定される。
【実施例６】
【００３３】
図７を参照する。上述した実施例２（図５）の経過後において、ＣＰＵ４のキャッシュラインがＭ（Modified：変更）状態にあるとする。ＣＰＵ４がリモートメモリに相当するＣＰＵ１のローカルメモリＭ１にメモリアクセス（ライト）Ａ１を行ったとする。その際、ＣＰＵ４は、Ｍ状態にあるキャッシュラインの追い出し（Cast out）なので、他のＣＰＵに対して、キャッシュ・コヒーレンシ・コマンドＣ１、Ｃ２は送らない。プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。
【００３４】
保管された情報の履歴から、メモリＭ１へのメモリアクセスＡ１の情報中のアドレスと同じアドレスに最後（最新）にアクセス（ライト）したＣＰＵ４がメモリＭ１へアクセス（ライト）したＣＰＵとして特定される。
【実施例７】
【００３５】
図８を参照する。上述した実施例１（図４）の経過後において、ＣＰＵ１のキャッシュラインがＭ（Modified：変更）状態にあるとする。ＣＰＵ１がローカルメモリＭ１にＭ状態のキャッシュラインを追い出す（Cast out)ため、メモリアクセス（ライト）Ａ１を行ったとする。その際、ＣＰＵ１は、他のＣＰＵに対して、キャッシュ・コヒーレンシ・コマンドＣ１、Ｃ２は送らない。プローブ１によりバスｂ１上のメモリアクセスＡ１の情報が取得されて保管される。
【００３６】
保管された情報の履歴から、メモリＭ１へのメモリアクセスＡ１の情報中のアドレスと同じアドレスに最後（最新）にアクセス（リードまたはライト）したＣＰＵ１がメモリＭ１へアクセス（リードまたはライト）したＣＰＵとして特定される。
【実施例８】
【００３７】
図９を参照する。最後の実施例として、２つのメモリアクセスが競合する場合について説明する。ＣＰＵ２とＣＰＵ３が、同時にリモートメモリに相当するＣＰＵ１のローカルメモリＭ１にメモリアクセス（リード）Ａ１、Ａ２を行ったとする。プローブ１によりバスｂ１上のメモリアクセスＡ１、Ａ２の情報が取得されて保管される。
【００３８】
この場合、ＣＰＵ１の内部キャッシュ／メモリのハードウェア・ロジックがモニターされない限り、保管された情報の履歴からは、そのメモリアクセスＡ１、Ａ２を行ったＣＰＵがＣＰＵ２またはＣＰＵ３のいずれかであるかを厳密には決定することはできない。すなわち、そのメモリアクセスＡ１、Ａ２を行ったＣＰＵがＣＰＵ２及びＣＰＵ３であることを特定することに留まる。
【００３９】
本発明の実施形態について、図を参照しながら説明をした。しかし、本発明はこれらの実施形態に限られるものではない。本発明はその趣旨を逸脱しない範囲で当業者の知識に基づき種々なる改良、修正、変形を加えた態様で実施できるものである。
【符号の説明】
【００４０】
１０  メモリ
２０  インターコネクト  
３０  プローブ
１００  共有メモリ型マルチプロセッサシステム  
【図１】
0005936152.tif 000002
【図２】
0005936152.tif 000003
【図３】
0005936152.tif 000004
【図４】
0005936152.tif 000005
【図５】
0005936152.tif 000006
【図６】
0005936152.tif 000007
【図７】
0005936152.tif 000008
【図８】
0005936152.tif 000009
【図９】
0005936152.tif 000010