(57)【特許請求の範囲】
【請求項１】
情報処理システムで実行されるソフトウェアによるメモリの使用状況を解析するためのシステムであって、
ソフトウェアにより発行される命令と該命令により使用される前記メモリの物理アドレスとをトレース・データとして取得し、記憶手段に記録するトレース手段と、
ソフトウェアが発生させたイベントを検出し、イベント情報を取得するイベント検出手段と、
前記イベント情報を、前記メモリをアクセスするための複数の命令と複数の物理アドレスとから構成されるメモリ・アクセス・パターンに変換する変換手段と、
変換された前記メモリ・アクセス・パターンを使用して前記メモリにアクセスし、前記トレース手段にトレース・データを取得させ、前記記憶手段に記録させるメモリ・アクセス手段とを含む、システム。
【請求項２】
前記記憶手段に記録された複数のトレース・データを取得する取得手段と、
取得された前記複数のトレース・データの中から前記イベントのトレース・データを検出するデータ検出手段と、
検出された前記トレース・データから前記イベント情報を抽出する抽出手段とをさらに含む、請求項１に記載のシステム。
【請求項３】
前記メモリは、複数のバンクに分割して管理され、前記バンクを指定するためのバンク・アドレス、複数の行を指定するためのロウ・アドレス、複数の列を指定するためのカラム・アドレスを使用してアクセスされ、
前記変換手段は、前記イベント情報を、前記バンク・アドレス、前記ロウ・アドレスおよび複数の前記カラム・アドレスで表現し、前記バンク・アドレスおよび前記ロウ・アドレスと、複数の前記カラム・アドレスの各々とを合成して複数のアドレスを生成することにより前記メモリ・アクセス・パターンに変換する、請求項１に記載のシステム。
【請求項４】
前記イベント情報は、前記メモリを使用して処理を行うソフトウェアをプロセスとして識別するためのプロセス識別情報と、該ソフトウェアが前記メモリにアクセスするために使用するページ・フレーム情報とを含み、
前記変換手段は、前記プロセス識別情報を、前記バンク・アドレスおよび前記ロウ・アドレスで表現し、前記ページ・フレーム情報を、複数の前記カラム・アドレスで表現する、請求項３に記載のシステム。
【請求項５】
前記情報処理システムは、複数のノードから構成され、各ノードがそれぞれ前記トレース手段を備え、前記メモリ・アクセス手段は、変換された前記メモリ・アクセス・パターンを使用して、前記イベントを発生させたソフトウェアがアクセスするメモリにアクセスし、該メモリを有するノードのトレース手段にトレース・データを取得させ、前記記憶手段に記録させる、請求項１に記載のシステム。
【請求項６】
前記イベントは、ページ・フォールト・イベントであり、
抽出された前記イベント情報を用い、１以上のトレース・データに含まれる前記物理アドレスを、ソフトウェアが前記メモリにアクセスするために使用する仮想アドレスへ変換するアドレス変換手段をさらに含む、請求項２に記載のシステム。
【請求項７】
前記アドレス変換手段は、前記物理アドレスと該物理アドレスを変換して得られた前記仮想アドレスとを対応付けて変換テーブルを生成する、請求項６に記載のシステム。
【請求項８】
前記メモリと、前記トレース手段とは、同一のプリント基板上に実装され、前記情報処理システムが備えるメモリ・モジュールを装着するためのソケットに挿入して使用される、請求項１に記載のシステム。
【請求項９】
情報処理システムで実行されるソフトウェアによるメモリの使用状況を解析するための方法であって、
ソフトウェアにより発行される命令と該命令により使用される前記メモリの物理アドレスとを、トレース手段によりトレース・データとして取得し、記憶手段に記録するステップと、
ソフトウェアが発生させたイベントを検出し、イベント情報を取得するステップと、
取得された前記イベント情報を、前記メモリをアクセスするための複数の命令と複数の物理アドレスとから構成されるメモリ・アクセス・パターンに変換するステップと、
変換された前記メモリ・アクセス・パターンを使用して前記メモリにアクセスし、前記トレース手段にトレース・データを取得させ、前記記憶手段に記録させるステップとを含む、方法。
【請求項１０】
前記記憶手段に記録された複数のトレース・データを取得するステップと、
取得された前記複数のトレース・データの中から前記イベントのトレース・データを検出するステップと、
検出された前記トレース・データから前記イベント情報を抽出するステップとをさらに含む、請求項９に記載の方法。
【請求項１１】
前記メモリは、複数のバンクに分割して管理され、前記バンクを指定するためのバンク・アドレス、複数の行を指定するためのロウ・アドレス、複数の列を指定するためのカラム・アドレスを使用してアクセスされ、
前記変換するステップでは、前記イベント情報を、前記バンク・アドレス、前記ロウ・アドレスおよび複数の前記カラム・アドレスで表現し、前記バンク・アドレスおよび前記ロウ・アドレスと、複数の前記カラム・アドレスの各々とを合成して複数のアドレスを生成することにより前記メモリ・アクセス・パターンに変換する、請求項９に記載の方法。
【請求項１２】
前記イベント情報は、前記メモリを使用して処理を行うソフトウェアをプロセスとして識別するためのプロセス識別情報と、該ソフトウェアが前記メモリにアクセスするために使用するページ・フレーム情報とを含み、
前記変換するステップでは、前記プロセス識別情報を、前記バンク・アドレスおよび前記ロウ・アドレスで表現し、前記ページ・フレーム情報を、複数の前記カラム・アドレスで表現する、請求項１１に記載の方法。
【請求項１３】
前記情報処理システムは、複数のノードから構成され、各ノードがそれぞれ前記トレース手段を備え、前記記録させるステップでは、変換された前記メモリ・アクセス・パターンを使用して、前記イベントを発生させたソフトウェアがアクセスするメモリにアクセスし、該メモリを有するノードのトレース手段にトレース・データを取得させ、前記記憶手段に記録させる、請求項９に記載の方法。
【請求項１４】
前記イベントは、ページ・フォールト・イベントであり、
前記抽出するステップで抽出された前記イベント情報を用い、１以上のトレース・データに含まれる前記物理アドレスを、ソフトウェアが前記メモリにアクセスするために使用する仮想アドレスへ変換するステップをさらに含む、請求項１０に記載の方法。
【請求項１５】
前記物理アドレスと該物理アドレスを変換して得られた前記仮想アドレスとを対応付けて変換テーブルを生成するステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
情報処理システムで実行されるソフトウェアによるメモリの使用状況を解析する処理を、コンピュータに実行させるためのプログラムであって、トレース手段が、ソフトウェアにより発行される命令と該命令により使用される前記メモリの物理アドレスとをトレース・データとして取得し、記憶手段に記録するものにおいて、
ソフトウェアが発生させたイベントを検出し、イベント情報を取得するステップと、
取得された前記イベント情報を、前記メモリをアクセスするための複数の命令と複数の物理アドレスとから構成されるメモリ・アクセス・パターンに変換するステップと、
変換された前記メモリ・アクセス・パターンを使用して前記メモリにアクセスし、前記トレース手段にトレース・データを取得させ、前記記憶手段に記録させるステップとを実行させる、プログラム。
【請求項１７】
前記記憶手段に記録された複数のトレース・データを取得するステップと、
取得された前記複数のトレース・データの中から前記イベントのトレース・データを検出するステップと、
検出された前記トレース・データから前記イベント情報を抽出するステップとをさらに実行させる、請求項１６に記載のプログラム。
【請求項１８】
前記メモリは、複数のバンクに分割して管理され、前記バンクを指定するためのバンク・アドレス、複数の行を指定するためのロウ・アドレス、複数の列を指定するためのカラム・アドレスを使用してアクセスされ、
前記変換するステップでは、前記イベント情報を、前記バンク・アドレス、前記ロウ・アドレスおよび複数の前記カラム・アドレスで表現し、前記バンク・アドレスおよび前記ロウ・アドレスと、複数の前記カラム・アドレスの各々とを合成して複数のアドレスを生成することにより前記メモリ・アクセス・パターンに変換する、請求項１６に記載のプログラム。
【請求項１９】
前記イベント情報は、前記メモリを使用して処理を行うソフトウェアをプロセスとして識別するためのプロセス識別情報と、該ソフトウェアが前記メモリにアクセスするために使用するページ・フレーム情報とを含み、
前記変換するステップでは、前記プロセス識別情報を、前記バンク・アドレスおよび前記ロウ・アドレスで表現し、前記ページ・フレーム情報を、複数の前記カラム・アドレスで表現する、請求項１８に記載のプログラム。
【請求項２０】
前記情報処理システムは、複数のノードから構成され、各ノードがそれぞれ前記トレース手段を備え、前記記録させるステップでは、変換された前記メモリ・アクセス・パターンを使用して、前記イベントを発生させたソフトウェアがアクセスするメモリにアクセスし、該メモリを有するノードのトレース手段にトレース・データを取得させ、前記記憶手段に記録させる、請求項１６に記載のプログラム。
【請求項２１】
前記イベントは、ページ・フォールト・イベントであり、
前記抽出するステップで抽出された前記イベント情報を用い、１以上のトレース・データに含まれる前記物理アドレスを、ソフトウェアが前記メモリにアクセスするために使用する仮想アドレスへ変換するステップをさらに含む、請求項１７に記載のプログラム。
【請求項２２】
前記物理アドレスと該物理アドレスを変換して得られた前記仮想アドレスとを対応付けて変換テーブルを生成するステップをさらに実行させる、請求項２１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムで実行されるソフトウェアによるメモリの使用状況を解析するためのシステム、方法およびその方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
OSやアプリケーション等のソフトウェアを評価、解析、最適化するために、ソフトウェアがメモリ(DRAM)へアクセスした際のログを取得する装置（メモリ・トレーサ）が知られている（例えば、特許文献１、２および非特許文献１参照）。また、Hardware  memory tracing tool(HMTT)と呼ばれる類似の装置も知られている（非特許文献２参照）。
【０００３】
上記のメモリ・トレーサは、アクセス・ログとしてソフトウェアからの命令（コマンド）とメモリの物理アドレスのみを取得し、その物理アドレスにあるデータは記録しない。これは、データを取得すると、時間がかかり、それを記憶するためのメモリ容量が必要になり、速度と量的な課題があるためである。
【０００４】
メモリ・トレーサでソフトウェアの挙動を詳細に調べるためには、ソフトウェアがいつどの物理アドレスを使用しているかの情報を追跡（トレース）し、トレースした情報とメモリ・トレーサで取得したアクセス・ログとを照会する必要がある。これは、アクセス・ログのみでは、例えば、どのソフトウェアがその物理アドレスにアクセスしているかが分からないからである。この情報をトレースするために、例えば、SystemTapと呼ばれるソフトウェアによる実行中のOSの動作を動的にモニタおよびトレースする方法が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１１５９５４号公報
【特許文献２】特願２０１３−０７２２１１号
【非特許文献】
【０００６】
【非特許文献１】Nobuyuki Ohba, Seiji Munetoh, Atsuya Okazaki, and Yasunao Katayama, “Non-intrusive Scalable Memory Access Tracer”, In Proceedings of the 11th International Conference on Quantitative Evaluation of Systems(QEST 2014), Florence, Italy, September 8-10, 2014, LNCS Vol.8657, pp.245-248
【非特許文献２】Yongbing  Huang, Zehan Cui, Licheng Chen, Wenli Zhang, Yungang Bao, and Mingyu Chen, “HaLock: hardware-assisted lock contention detection in multithreaded applications”, In Proceedings of the 21th International Conference on Parallel Architectures and Compilation Techniques (PACT’12), ACM, New York, USA, September 19-23, 2012, pp.253-262
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ソフトウェアが発生させるイベントを、上記の方法でトレースする場合、ページ・フォールト等の発生頻度が高いイベントのトレースにオーバーヘッドが生じ、ソフトウェアの挙動に影響を与えるという問題があった。ここで、ページ・フォールトとは、ソフトウェアがアクセスしようとした仮想アドレス領域がTLB（トランスレーション・ルックアサイド・バッファ）上にない場合や、実メモリ上にはなく、HDDやSSD等に退避されている場合に発生する割り込み処理である。
【０００８】
また、イベントが発生し、それをトレースする場合、そのイベントをファイルの形式で保存することから、イベントの頻度が高い場合、大量のファイルの読み書きが発生するという問題もあった。特に、ハードウェアやソフトウェアの動作速度を評価するベンチマーク解析では、SystemTapのようなトレース機能によるオーバーヘッドが大きいことから、本来計測したいシステムの正常動作とは挙動が異なるという問題があった。
【０００９】
また、メモリ・トレーサでのアクセス・ログの記録は、メモリのクロックのnsecオーダの精度を有するが、OSの時間記録はμsecオーダの精度しかなく、SystemTapの記録を、アクセス・ログのどの時点に挿入するべきかが分からず、それらの記録の突き合わせが難しいという問題もあった。
【００１０】
そこで、大量のファイルの読み書きを発生させることがなく、ソフトウェアの挙動に影響を与えることもなく、メモリ・トレーサといったハードウェアによる記録とSystemTapといったソフトウェアによる記録との突き合わせを容易にするシステムや方法等の提供が望まれていた。
【課題を解決するための手段】
【００１１】
本発明は、上記課題に鑑み、情報処理システムで実行されるソフトウェアによるメモリの使用状況を解析するためのシステムであって、ソフトウェアにより発行される命令と該命令により使用されるメモリの物理アドレスとをトレース・データとして取得し、記憶手段に記録するトレース手段と、ソフトウェアが発生させたイベントを検出し、イベント情報を取得するイベント検出手段と、イベント情報を、メモリをアクセスするための複数の命令と複数の物理アドレスとから構成されるメモリ・アクセス・パターンに変換する変換手段と、変換されたメモリ・アクセス・パターンを使用してメモリにアクセスし、トレース手段にトレース・データを取得させ、記憶手段に記録させるメモリ・アクセス手段とを含む、システムが提供される。
【発明の効果】
【００１２】
本発明によれば、大量のファイルの読み書きを発生させることがなくなり、ソフトウェアの挙動に影響を与えることもなくなり、ハードウェアによる記録とソフトウェアによる記録との突き合わせも容易になる。
【図面の簡単な説明】
【００１３】
【図１】本発明の解析システムと解析対象の情報処理システムの構成例を示した図。
【図２】情報処理システムの別の構成例を示した図。
【図３】トレーサにより記録されるデータ・フォーマットの例を示した図。
【図４】イベント情報の例を示した図。
【図５】メモリのアドレス空間とイベントとの関係を示した図。
【図６】メモリ・アクセス・パターンの構成を例示した図。
【図７】解析システムの機能ブロック図。
【図８】解析システムが行うイベント検出およびイベント情報を埋め込む処理の流れを示したフローチャート。
【図９】トレーサが記録したアクセス・ログの中にイベント情報を埋め込んだデータ・フォーマットの例を示した図。
【図１０】解析システムの機能ブロック図。
【図１１】解析処理を行い、イベント情報等を割り当てた後のデータ・フォーマットの例を示した図。
【図１２】解析システムが行う解析処理の流れを示すフローチャート。
【図１３】解析処理において物理アドレスを仮想アドレスに変換する詳細な処理の流れを示すフローチャート。
【発明を実施するための形態】
【００１４】
以下、本発明を図面に示した具体的な実施形態に沿って説明するが、本発明は、後述する実施形態に限定されるものではない。図１は、本発明の解析システムと解析対象の情報処理システムの構成例を示した図である。情報処理システム１０は、一般的なPC等と同様、CPU１１と、ROM１２と、DRAM等の主記憶装置と、SSD等の補助記憶装置１３とを含んで構成される。以下、主記憶装置をメモリ１４と呼ぶ。情報処理システム１０は、そのほか、外部記憶I/F、通信I/F、入出力I/F、表示装置、入力装置等のハードウェアを備えることができる。
【００１５】
CPU１１は、情報処理システム１０全体の制御を行う。CPU１１は、OS１５やアプリケーション１６等のソフトウェアを実行し、データの設定やデータの読み書き等の処理を行う。ROM１２は、情報処理システム１０を起動させるためのブート・プログラムやハードウェアを制御するためのファームウェア等を記憶する。メモリ１４は、CPU１１に対して作業領域を提供する。補助記憶装置１３は、CPU１１が使用するソフトウェアやデータ等を格納し、CPU１１がそれらをすぐに使用することができるようにしている。
【００１６】
外部記憶I/Fは、CD-ROMドライブ、DVDドライブ、SDカード・スロット等とされ、CD-ROM、DVD、SDカード等の記録メディアに対してデータ等の読み書きを行う。通信I/Fは、LANやインターネット等のネットワークに接続し、ネットワーク上の機器との通信を可能にする。ネットワークは、有線ネットワーク、無線ネットワークのいずれであってもよい。入出力I/Fは、ディスプレイ等の表示装置、キーボードやマウス等の入力装置、マイク等の音声入力装置、スピーカ等の音声出力装置、その他の機器を接続し、それらの装置の使用を可能にする。
【００１７】
CPU１１等の情報処理システム１０内の各ユニットは、バスを介して互いに接続され、データ等のやりとりを行うことができるようになっている。メモリ１４は、例えば、複数のDRAMチップをプリント基板上に搭載したメモリ・モジュールとされ、挿入可能なソケットに挿入して使用される。
【００１８】
CPU１１は、OS１５やアプリケーション１６等のソフトウェアを実行する。その実行において、OS１５は、OS１５の一部機能やアプリケーション１６に対してメモリ領域を割り当て、それらのソフトウェアはプロセスとして、その割り当てられたメモリ領域を使用して所定の処理を実行する。CPU１１は、１つのプロセスに限らず、複数のプロセスを実行することができる。このとき、プロセスは、それぞれ独立したアドレス空間を有し、補助記憶装置１３も使用してメモリ１４より大きい仮想メモリを利用する。
【００１９】
プロセスが利用する仮想メモリの仮想アドレス空間は、あるサイズのかたまり、すなわち複数のページに分割される。物理メモリであるメモリ１４は、ページと同じサイズの固定長のページ・フレームに分割される。任意のページは、任意のページ・フレームに対応付けることができる。
【００２０】
CPU１１は、プロセスを実行する際、仮想メモリにアクセスするために使用する仮想アドレスを出力する。図示しないメモリ管理ユニットが出力された仮想アドレスをCPU１１が使用できる物理アドレスに変換する。このとき、メモリ管理ユニットは、メモリ１４中に作成されたページ・テーブルと呼ばれる、ページとページ・フレームとを対応付けた変換テーブルを使用して、あるページの仮想アドレスを、対応するページ・フレームの物理アドレスに変換する。そして、CPU１１は、変換された物理アドレスと、プロセスが発行したコマンドとを使用してメモリ１４の該当するデータ等にアクセスする。
【００２１】
メモリ１４上のしばらく使用していないページの内容は、補助記憶装置１３に退避し、プロセスが要求するページの内容をメモリ１４にコピーする。プロセスが、退避されたページにアクセスすると、ページ・フォールトというイベントが発生する。このイベントをイベント検出部２１が受け付けると、OS１５は、退避されたページの内容をメモリ１４にコピーし、プロセスがそのページにアクセスして、データの読み書き等の処理を実行する。
【００２２】
破線で示される解析システム２０は、情報処理システム１０で実行されるソフトウェアによるメモリの使用状況を解析するためのシステムで、イベント検出部２１と、トレーサ２２と、トレーサ２２のトレース結果を記憶するSSDやHDD等の専用の記憶装置２３と、解析装置２４とを含んで構成される。
【００２３】
イベント検出部２１は、OS１５の１つの機能として実装することができる。イベント検出部２１は、プロセスが発生させたイベントを検出する。イベントは、エラーの発生、セッションの切断、ページ・フォールト等を挙げることができる。以下、イベントをページ・フォールト・イベントとして説明する。イベント検出部２１は、検出したイベントのイベント情報を取得する。イベント検出には、例えば上記のSystemTapを使用することができる。また、イベント検出部２１は、イベントを記録するためのイベント記録用ページを確保する。
【００２４】
トレーサ２２は、メモリ１４にメモリ・アクセスの記録機能を追加した特別なハードウェアであり、メモリ１４と同一のプリント基板に実装されたモジュールを使用することができる。このモジュールは、ソケットに挿入されたメモリ・モジュールに代えて、ソケットに挿入して装着することができる。このトレーサ２２は、ソフトウェアにより発行されるコマンドと、そのコマンドにより使用されるメモリ１４の物理アドレスとをトレース・データとして取得し、記憶装置２３に記録する。トレーサ２２は、記録する際、それらのアクセス・ログを取得した時間とともに記録する。ここでは、トレーサ２２は、ソケットに挿入して使用するように構成されているが、これに限定されるものではなく、ケーブル等により接続して使用するものであってもよい。
【００２５】
解析装置２４は、記憶装置２３に格納されたトレース・データを取得し、それを格納するためのSSDやHDD等の記憶装置２５を備える。また、解析装置２４は、データ解析を行うためのソフトウェアである解析ツール２６と、イベント・アナライザ２７とを備え、図示しないCPUにより実行することができるようになっている。
【００２６】
情報処理システム１０では、プロセスが発生させたイベントをイベント検出部２１が検出し、イベント情報を取得する。そして、イベント情報を、一定の規則に従って、複数のコマンドと複数の物理アドレスとから構成されるメモリ・アクセス・パターンに変換し、変換されたメモリ・アクセス・パターンを使用してメモリ１４にアクセスする。これにより、トレーサ２２がそのコマンドと物理アドレスとをアクセス・ログとして取得し、記録するので、イベント情報を、ファイルとしてその都度保存しなくても、トレーサ２２が記録するトレース・データとして記憶装置２３に記録することができる。
【００２７】
イベントのトレース・データを記録した後も、トレーサ２２は、メモリ１４への通常アクセスのトレース・データを記録し続けるため、イベントのトレース・データは、記録された複数のトレース・データの中に埋め込まれた形となる。
【００２８】
解析装置２４は、トレーサ２２が記録した複数のトレース・データを取得し、解析を行うために記憶装置２５にトレース・データを格納する。解析装置２４は、記憶装置２５に格納されたトレース・データを使用して、オフラインで解析を行うことができる。イベント・アナライザ２７は、記憶装置２５に格納された複数のトレース・データの中からイベントのトレース・データを検出し、イベント情報を抽出する。そして、イベント・アナライザ２７は、イベント情報を関連するトレース・データに割り当て、記憶装置２５に格納する。
【００２９】
解析ツール２６は、イベント情報が割り当てられたトレース・データを用い、いつ、どのプロセスがメモリを利用しているかを解析し、表示装置にプロセスの実メモリ使用に関する解析結果を出力させる。
【００３０】
解析対象の情報処理システム１０は、図１に示すように、１つのCPU１１と１つのメモリ１４とから構成されるシステムに限定されるものではなく、図２に示すようなNUMA(Non-Uniform Memory Access)マシンであってもよい。NUMAマシンは、CPU１１とメモリ１４との対（ノード）１７を、内部接続したマシンで、複数のCPU１１が共有するメモリ１４へのアクセス・コストがメモリ領域とCPU１１に依存し、均一でないアーキテクチャである。また、情報処理システム１０は、複数のPC等の情報処理装置がケーブルやネットワークで接続されたシステムであってもよい。
【００３１】
NUMAマシンを採用する場合は、各ノード１７のメモリ１４に対してトレーサ２２を設け、イベントを発生させたプロセスがアクセスするメモリ１４に、メモリ・アクセス・パターンを使用してアクセスし、そのメモリ１４を有するノード１７のトレーサ２２にトレース・データを取得させ、記録させる。すなわち、イベントは、物理アドレスと対応するノード１７に記録するようにする。
【００３２】
図２では、各ノード１７に１つのCPU１１と１つのメモリ１４とを備える構成を例示したが、これに限られるものではなく、各ノード１７は、複数のCPU１１と複数のメモリ１４とから構成されたものであってもよい。
【００３３】
ここで、トレーサ２２が記録するトレース・データのフォーマットを、図３に示す。トレース・データは、取得した時間順に上から並べられ、コマンド(Cmd)、物理アドレス（PA）が対応付けて記録される。コマンドは、ACT、RD、WT、PRE等である。ACT(Activate)は、待機状態からロウ・アドレス、バンク・アドレスを取り込む命令である。RD(Read)は、カラム・アドレスを取り込み、データを呼び出す命令である。WT(Write)は、カラム・アドレスを取り込み、データを書き込む命令である。PRE(Pre Charge)は、すべての動作を終了し、待機状態に戻る命令である。なお、図３には示されていないが、図２に示したノード１７を識別するためのノード番号を含んでいてもよい。
【００３４】
メモリ１４は、複数に分割して管理され、分割された各々はバンクと呼ばれる。各バンクは、バンク・アドレスを指定してアクセスされる。メモリ１４は、複数の行および列からなる複数の記憶領域（メモリ・セル）を有し、各メモリ・セルは、バンク・アドレスのほか、行を指定するためのロウ・アドレスと、列を指定するためのカラム・アドレスとを使用してアクセスされる。カラム・アドレスは、比較的自由に動かし、読み出すことができるが、ロウ・アドレスは、一度動作を終了し、再度ロウ・アドレスを入れ直す必要がある。
【００３５】
イベント検出部２１が取得するイベント情報について、図４を参照して説明する。イベント情報は、割り当てられたメモリ領域を使用して処理を実行するソフトウェア、すなわちプロセスを識別するためのプロセス識別情報(PID)、プロセスが使用するページ・フレームの物理アドレス(PA)、ページの仮想アドレス(VA)を含む。PIDは、プロセスに割り当てられた番号である。ページ・フォールト・イベントでは、VAに対応する退避されたページの内容が実メモリ１４に戻され、ページ・テーブルが更新された後の新しく割り当てられたページ・フレームのPAが得られる。
【００３６】
メモリ・アドレス空間とイベント割り当てとの関係を、図５を参照して説明する。CPU１１の物理アドレス空間は、DRAMバス幅(8byte)、キャッシュ・ライン（64byte）を含む、最上位ビット(MSB)から最下位ビット(LSB)までの空間である。個々のメモリ１４のアドレス空間（DRAMアドレス空間）は、ロウ・アドレス、バンク・アドレス、カラム・アドレスで構成される空間である。イベントで用いるイベント・アドレスのアドレス空間は、特定のページで、ページ・サイズ（x86 CPUの場合は4ｋBもしくは2MB）の空間である。
【００３７】
イベントで用いるアドレス空間は、特定のページで使用するロウ・アドレスの空間を使用するので、個々のDRAMアドレス空間よりロウ・アドレスの空間が少なくなっている。また、利用できるカラム・アドレスの空間は、個々のDRAMアドレス空間よりキャッシュ・ライン・サイズ分、カラム・アドレスの空間が少なくなっている。イベントで用いるアドレス空間では、CPU１１のメモリ書き込みが直ぐにメモリ１４上に現れるようにキャッシュを無効にする。
【００３８】
メモリ１４へ出力されるコマンドを、図６を参照して説明する。イベントで用いるアドレス空間へのアクセスは、ACTコマンド、RDコマンドにより行われる。ロウ・アドレスとバンク・アドレスは、ACTコマンドで与えられ、カラム・アドレスは、RDコマンドで与えられる。PAのカラム・アドレスの部分だけを変化させた場合、図６に示すように「A」で示されるACTコマンドと、一連の「R」で示されるRDコマンドとして参照される。なお、図６中、「P」はPREコマンドを示している。
【００３９】
このことから、トレーサ２２で取得し、記録したいイベントを、ACTコマンド、ロウ・アドレス、バンク・アドレスから構成される固定部、RDコマンド、カラム・アドレスから構成される可変部に変換すれば、図６に示すような複数のコマンドと複数の物理アドレスから構成されるメモリ・アクセス・パターンを得ることができる。これを使用して実際にメモリ１４にアクセスすることで、トレーサ２２がそのアクセス・ログを取得して記録するので、トレーサ２２が記録したトレース・データの中に、イベントの記録を埋め込むことができる。
【００４０】
ちなみに、メモリ・アクセスは、図６に示すように、PREコマンドで一連のコマンドによる処理が終了してから、別のバンクの一連のコマンドによる処理が開始される。
【００４１】
図７を参照して、解析システム２０が備える機能について説明する。解析システム２０は、その機能部として、イベント検出部２１、変換部２８、メモリ・アクセス部２９を備える。解析システム２０は、解析を行うにあたって、SystemTap等のイベントを検出するイベント検出部２１を起動する。事前準備として、イベント記録用のページをメモリ１４に確保する。そして、ページは、アクセスが直ぐにメモリ１４へ出力されるようにキャッシュを無効にする。
【００４２】
イベント検出部２１は、イベントを検出し、イベント情報を取得する。イベント検出部２１は、取得したイベント情報を変換部２８へ出力する。変換部２８は、イベント情報を、固定長部分と可変長部分とに分離する。固定長部分は、メモリ１４のイベント記録用のページのロウ・アドレスおよびバンク・アドレスに割り当てられる。それらのアドレスには、PID=0x48を割り当てることができる。可変長部分が、イベント記録用のページの複数のカラム・アドレスに割り当てられる。これらのアドレスには、PA、VAの個々のデータ、すなわち「3」、「4」、「5」、「6」、「4」、「A」、「C」、「5」、「8」というデータが割り当てられる。このため、変換部２８は、イベント情報を、バンク・アドレスおよびロウ・アドレスおよび複数のカラム・アドレスで表現し、それらを合成して複数のアドレスを生成し、これにより、メモリ・アクセス・パターンに変換する。
【００４３】
この例では、イベント情報として取得したPA、VAがそれぞれPA=0x04560000、VA=0xAC580000であるが、ページ・フレーム内を示す下位アドレスについては、情報のないアドレスは省略し（この例では「0」）、「456」、「AC58」のみを抽出する。抽出したアドレスは、それぞれ３つ、４つの桁から構成されている。最初の「3」は、桁数を示し、それに続く「4」、「5」、「6」は「456」を１つずつ分離したものである。それに続く「4」は、桁数を示し、「A」、「C」、「5」、「8」は「AC58」を１つずつ分離したものである。また、データ量を削減するために符号化やテーブルによる変換等を用いてもよい。
【００４４】
変換部２８は、確保したイベント記録用のページの物理アドレス（0x05600000）と、上記固定長部分および可変長部分とを用い、図６中のCPU命令レベルに記載されたような複数のアドレスを生成し、それをコマンドに与えて、メモリ・アクセス・パターンに変換する。
【００４５】
具体的には、物理アドレス「0x05600000」に、PIDの「48」、上記で分離した１つのデータ「3」を合成し、「0x05604830」というアドレスを生成する。これを繰り返し、「0x05604840」、…、「0x05604880」という一連のアドレスを生成する。これらを、各コマンドに与えて、メモリ・アクセス・パターンに変換する。
【００４６】
変換されたメモリ・アクセス・パターンは、CPU１１にコマンドおよびアドレスが順に取り込まれ、そのアドレスにアクセスされる。メモリ１４へは、最初に、バンク・アドレス、ロウ・アドレスによりバンク、行が特定され、次に、カラム・アドレスにより列が指定され、アクセスされる。バンク、行が同じアドレスで、列のみが異なるアドレスであるため、一連の列が順に指定され、順にアクセスされる。これは、PREコマンドで終了するまで連続して行われる。
【００４７】
このようにアクセスされると、トレーサ２２がコマンドと物理アドレスとをアクセス・ログとして取得し、記録するので、イベントがトレース・データとして記録される。その後も別のトレース・データが記録されるので、結果的にイベントのトレース・データは、トレーサ２２が記録したトレース・データの中に埋め込まれる。
【００４８】
解析システム２０が行うこの処理を、図８に示すフローチャートを参照して説明する。ステップ８００からこの処理を開始し、ステップ８１０では、イベント記録用ページを確保する。ページは、どのページであってもよく、２以上のページであってもよい。ステップ８２０では、キャッシュを無効にする。メモリ１４へのアクセスがキャッシュではなく、直接メモリ１４に行われるようにするためである。
【００４９】
ステップ８３０では、イベント検出部２１がイベントを検出したかを判断する。検出していない場合は、検出するまでこの判断を繰り返す。検出した場合は、ステップ８４０へ進み、イベント情報を取得する。ステップ８５０では、上記のようにしてメモリ・アクセス・パターンに変換する。ステップ８６０では、変換されたメモリ・アクセス・パターンを使用してメモリ１４にアクセスし、トレーサ２２にトレース・データを取得させ、記録させる。これにより、イベントのトレース・データを、トレーサ２２が記録したトレース・データの中に埋め込む。
【００５０】
ステップ８７０では、イベントの検出を終了するかどうかを判断する。イベントの検出は、例えば、ユーザがその機能を無効にする等した場合にその設定を受けて終了すると判断することができる。また、何らかのエラーが発生した場合に終了すると判断することもできる。イベント検出を終了しない場合は、ステップ８３０に戻り、イベントの検出を行う。終了する場合は、ステップ８８０へ進み、この処理を終了する。
【００５１】
実際に埋め込んだイベントのトレース・データを図９に例示する。プロセスによる一連のメモリ・アクセスは、ACTコマンドで始まり、PREコマンドで終了する。イベントのトレース・データは、イベント記録用ページの物理アドレス、PIDを含むことから、それらの情報に基づき、そのトレース・データを検出することができる。図９では、「0x056048**」という物理アドレスを有するトレース・データを、イベントのトレース・データとして検出することができる。
【００５２】
ちなみに、このイベント以降、PA=0x04560000は、VA=0xAC580000でPID=0x48のプロセスが使用していることになる。
【００５３】
解析システム２０は、イベントのトレース・データを埋め込んだ後、任意の時間に解析を行うことができる。解析を行う時期はいつであってもよい。解析システム２０は、この解析を行うために、図１０に示すように記憶装置２５、データ検出部３０、抽出部３１、アドレス変換部３２をさらに備える。
【００５４】
解析システム２０は、図示しない取得部を備え、任意の時間に、トレーサ２２が記録した複数のトレース・データを取得し、記憶装置２５にその取得した複数のトレース・データを格納する。取得するトレース・データは、すべてのトレース・データを取得してもよいし、ある時間から現在までのトレース・データや、ある特定の期間のトレース・データを取得してもよい。
【００５５】
データ検出部３０は、ACTコマンドで与えられるバンク・アドレスおよびロウ・アドレスを参照し、イベントのトレース・データか、それ以外の通常のトレース・データかを判断することにより、イベントのトレース・データを検出する。データ検出部３０は、イベント検出部２１により確保されたイベント記録用ページの物理アドレスの情報を用い、上記のアドレスを参照して判断を行う。
【００５６】
抽出部３１は、検出したイベントのトレース・データからイベント情報を抽出する。イベント情報を一定の規則に従ってメモリ・アクセス・パターンに変換することから、これをEncodeとすれば、EncodeとDecodeとの関係と同様に一定の規則で解析を行い、イベント情報を抽出することができる。
【００５７】
具体的には、抽出部３１は、ACTコマンドで与えられるバンク・アドレスおよびロウ・アドレスを参照し、PID（0x48）を抽出する。RDコマンドで与えられるカラム・アドレスを参照し、「3」、「4」、「5」、「6」、「4」、「A」、「C」、「5」、「8」というデータを抽出し、物理アドレスが３桁の「456」で、仮想アドレスが４桁の「AC58」で構成されるものであると解析する。この解析結果から、PA=0x04560000、VA=0xAC580000を得る。
【００５８】
アドレス変換部３２は、抽出したイベント情報を用いて、物理アドレスを、プロセスがメモリ１４をアクセスするために使用する仮想アドレスに変換する。抽出したイベント情報は、PID、ページ・フレームのPA、ページのVAであるため、アドレス変換部３２は、そのページ・フレームを使用するイベント後に記録された物理アドレスを、上記のページ・フレームとページとの関係を用いて、仮想アドレスに変換する。
【００５９】
具体的には、そのページ・フレームを使用するイベント後に記録された物理アドレスは、「0x04560000」、「0x04560040」、「0x04560080」であり、PA=0x04560000、VA=AC580000であるため、仮想アドレスにおけるバンク・アドレスおよびロウ・アドレスは上記VAの「AC5800」を使用し、カラム・アドレスを物理アドレスのものに変換し、それぞれ「0xAC580000」、「0xAC580040」、「0xAC580080」とする。
【００６０】
アドレス変換部３２は、抽出したイベント情報および変換して得られた仮想アドレスを、記憶装置２５に格納された１以上のトレース・データに割り当てる。１以上のトレース・データは、上記のページ・フレームを使用するそのイベント後に記録された１以上のトレース・データである。割り当てた後の記録を、図１１に例示する。イベント情報としては、PIDが各トレース・データに割り当てられている。
【００６１】
この解析処理の流れについて、図１２に示すフローチャートを参照して説明する。解析処理は任意の時間に実施することができる。ステップ１２００からこの処理を開始し、ステップ１２１０では、トレーサ２２が記録した複数のトレース・データを取得し、ステップ１２２０において、取得した複数のトレース・データを記憶装置２５に格納する。
【００６２】
ステップ１２３０では、データ検出部３０が記憶装置２５に格納された時系列で並ぶトレース・データを順に呼び出し、イベントのトレース・データかどうかを確認し、イベントのトレース・データを検出する。この確認は、メモリ１４へのACTコマンドで与えられるアドレス情報（ロウ・アドレスおよびバンク・アドレス）を基に行う。ステップ１２４０では、検出したイベントのトレース・データからイベント情報を抽出する。ステップ１２５０では、抽出したイベント情報を用い、物理アドレスを仮想アドレスに変換する。ステップ１２６０では、変換された仮想アドレスおよびイベント情報を、トレース・データに割り当てる。
【００６３】
ステップ１２７０では、解析処理を終了するかどうかを判断する。例えば、ユーザが解析処理を終了することを要求する場合、その要求を受けて、解析処理を終了すると判断することができる。また、何らかのエラーが発生した場合に、解析処理を終了すると判断することができる。解析処理を終了しない場合、ステップ１２１０へ戻り、終了する場合、ステップ１２８０へ進み、解析処理を終了する。
【００６４】
上記ステップ１２３０〜ステップ１２６０の詳細な処理について、図１３に示すフローチャートを参照して説明する。ステップ１３００からこの処理を開始し、ステップ１３１０では、ページ・テーブルを初期化する。初期化では、ページ・テーブルに設定されているPA、VAを、例えば0という値にクリアする。ステップ１３２０では、時系列に格納されているトレース・データを順に読み込む。ステップ１３３０では、イベントのトレース・データを検出するために、読み込んだトレース・データがイベントのトレース・データかどうかを判断する。
【００６５】
イベントのトレース・データである場合、ステップ１３４０へ進み、ログを解析し、イベント情報を抽出してページ・テーブルを更新する。そして、ステップ１３９０へ進む。一方、イベントのトレース・データではなく、通常のトレース・データである場合、ページ・テーブルの内容は変更されないので、ステップ１３５０へ進み、ページ・テーブルをそのまま用いて仮想アドレスを特定する。
【００６６】
ステップ１３６０では、仮想アドレスを特定できたか否かを判断する。特定できた場合は、ステップ１３７０へ進み、特定した仮想アドレスを追加してトレース・データを更新する。すなわち、トレース・データに仮想アドレスを割り当て、トレース・データに情報を追加する。一方、特定できない場合は、ステップ１３８０へ進み、その旨を示す情報を追加する等してトレース・データを更新する。そして、ステップ１３９０へ進み、読み込むトレース・データがまだあるかを判断する。ある場合は、ステップ１３２０へ戻り、ない場合は、ステップ１４００へ進み、この処理を終了する。
【００６７】
以上に説明してきたように、トレーサ２２で記録したトレース・データの中に、SystemTap等でイベントを時間的に同期して埋め込むことができるため、ハードウェアによる記録と、ソフトウェアによる記録との同期作業を簡単に、かつ高精度で行うことができる。この作業は、他の処理を停止して行う必要がないため、オンライン処理が可能である。また、任意のイベントをトレース・データに関連付けることができ、プロセス中の特定部分の記録との判別が可能になる。
【００６８】
発生頻度が高いページ・フォールト等のイベントのトレース・データをその都度ファイルに保存すると、オーバーヘッドが生じ、ソフトウェアの挙動へ影響を与えるが、そのトレース・データをファイルに保存しなくてもよいため、その影響を低減することができる。
【００６９】
これまで、本発明の解析システムおよび解析方法について、図面を参照して詳細に説明してきたが、他の実施形態や、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。したがって、解析方法をコンピュータに実行させるためのプログラムやそのプログラムが記録された記録媒体を提供することもできる。
【符号の説明】
【００７０】
１０…情報処理システム、１１…CPU、１２…ROM、１３…補助記憶装置、１４…メモリ、１５…OS、１６…アプリケーション、１７…ノード、２０…解析システム、２１…イベント検出部、２２…トレーサ、２３…記憶装置、２４…解析装置、２５…記憶装置、２６…解析ツール、２７…イベント・アナライザ、２８…変換部、２９…メモリ・アクセス部、３０…データ検出部、３１…抽出部、３２…アドレス変換部
【図１】
0005936241.tif 000002
【図２】
0005936241.tif 000003
【図３】
0005936241.tif 000004
【図４】
0005936241.tif 000005
【図５】
0005936241.tif 000006
【図６】
0005936241.tif 000007
【図７】
0005936241.tif 000008
【図８】
0005936241.tif 000009
【図９】
0005936241.tif 000010
【図１０】
0005936241.tif 000011
【図１１】
0005936241.tif 000012
【図１２】
0005936241.tif 000013
【図１３】
0005936241.tif 000014