(57)【要約】【課題】少ない出力量とオーバヘッドで、プログラム実行パスを正確に分析可能なデータを出力することができるとともに、トレース対象が動作する中央処理装置と異なる中央処理装置上でも空間識別情報を収集可能とすること。【解決手段】非特権状態から特権状態に移行するときに、モジュール配置情報を変更するシステムコールが発行されたとき以外であれば、アドレス変換テーブルの先頭アドレスを保存し、特権状態から非特権状態に移行するときに保存したアドレスと現在のアドレスを比較し、不一致の場合のみ、あらかじめ登録しておいたオフセット位置からＯＳ固有情報を取り出し、空間識別情報と空間内のモジュール配置情報とを出力する。【選択図】　図１
2004078790.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置で実行された命令のトレース情報を出力する命令トレース出力方法において、
非特権状態から特権状態に移行するときにアドレス変換テーブルの先頭アドレスＡを保存するステップと、
特権状態から非特権状態に移行するときに前記アドレスＡと現在のアドレス変換テーブルの先頭アドレスＢとを比較するステップと、
前記アドレスＡと前記アドレスＢとが不一致の場合に現在の空間の空間識別情報と空間内のモジュール配置情報とを出力するステップと、
を含むことを特徴とする命令トレース出力方法。
【請求項２】
請求項１記載の命令トレース出力方法において、
前記モジュール配置情報を出力したときに該当空間の空間識別情報出力済判別フラグをセットするステップと、
非特権状態から特権状態に移行するときに実行された命令を判別するステップと、
前記命令が特権状態への移行割込を起こさせる命令であるときに、システムコール番号を判別するステップと、
前記システムコール番号がモジュール配置情報を変更するシステムコールの番号であるときに、前記フラグをリセットするステップと、
前記アドレスＡと前記アドレスＢとが不一致の場合に、前記フラグがセットされていれば現在の空間の空間識別情報のみ出力するステップと、
を含むことを特徴とする命令トレース出力方法。
【請求項３】
請求項１記載の命令トレース出力方法において、
非特権状態から特権状態に移行するときに実行された命令を判別するステップと、
前記命令が特権状態への移行割込を起こさせる命令であるときに、システムコール番号を判別するステップと、
前記システムコール番号がモジュール配置情報を変更するシステムコールの番号であるときに、前記アドレスＡと前記アドレスＢの一致・不一致にかかわらず、特権状態から非特権状態に移行するときに前記空間識別情報と前記モジュール配置情報とを出力するステップと、
を含むことを特徴とする命令トレース出力方法。
【請求項４】
動的アドレス変換機構を有する計算機システムにおいて、
非特権状態と特権状態との切り替えを検出し、アドレス変換テーブルの先頭アドレスの変更を検出し、アドレス変換テーブルの先頭アドレスの変更と非特権状態への切り替えがともに検出されたときに空間識別情報とモジュール配置情報とを出力するトレース手段を有することを特徴とする計算機システム。
【請求項５】
中央処理装置で実行された命令のトレース情報を出力する命令トレース出力方法において、
トレース対象のＯＳのバージョンを特定するステップと、
前記バージョンとＯＳ固有情報の種別との組み合わせをもとに、あらかじめ登録しておいたオフセット位置を求めるステップと、
前記ＯＳ固有情報を格納したテーブルの先頭アドレスを求めるステップと、
前記テーブルの前記オフセット位置から前記ＯＳ固有情報を取り出し、トレース情報として出力するステップと、
を含むことを特徴とする命令トレース出力方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機システム内で実行された命令をトレースし、命令トレース情報を取得・出力・分析する方法に関する。
【０００２】
【従来の技術】
現在の一般的な計算機システムでは、動的アドレス変換機構を備え、ジョブやプロセスを単位として別々の仮想空間を割り当てる多重仮想記憶をサポートしている。仮想空間ごとにアドレス変換テーブルを割り当て、アドレス変換テーブルの内容をもとに仮想空間上のアドレスである仮想アドレスを主記憶装置上のアドレスである実アドレスに変換する。
また、現在の一般的な計算機システムでは、特権状態による保護機構を持つ。オペレーティングシステム（ＯＳ）が動作する特権状態ではすべての命令を発行できるが、ユーザプログラムが動作する非特権状態では、仮想記憶を制御する命令を含む特権命令を実行できない。非特権状態でスーパバイザコール命令やトラップ命令を実行すると、割り込みが発生し、特権状態に移行する。
【０００３】
このような計算機システムの性能評価やデバッグを目的として、命令の実行を追跡し、計算機システムの中央処理装置が実行した命令や空間に関する情報を収集・出力する「命令トレーサ」と呼ばれる技術がある。例えば、特開平１０−２６０８７２「計算機システムおよび記録媒体」、ＳＴＤＢ（ＥＣＢＳ２００１　ｐｐ．２９８−３０５）、特開平８−５０５５６「仮想計算機システム」に記載されている。
【０００４】
命令トレーサにより可能となる機能の１つに、モジュールや関数ごとの実行頻度の算出がある。実行頻度を算出するためには、命令トレース情報を分析して実行された命令が属するモジュール・関数を特定することが必要となる。多重仮想記憶をサポートした計算機では、モジュールがロードされる仮想アドレスはいつも同じとは限らない。このため、命令が属するモジュールを特定するには、命令アドレスのほかに、空間に関する情報（空間識別子およびモジュール配置情報）を収集して出力する必要がある。
【０００５】
従来技術１「計算機システムおよび記録媒体」では、初期設定時にモジュール配置情報を出力する方法が述べられている。
【０００６】
従来技術２「ＳＴＤＢ」では、連続出現のユーザ空間の命令群の最初の命令を実行したときと最後の命令を実行したときに出力する方法が述べられている。従来技術３「仮想計算機システム」では、仮想空間の切り換えを行うハードウェア命令が実行されたときに出力する方法と、モジュールのローディングが完了した時点で登録した出口ルーチンを呼び出力する方法とが述べられている。
【０００７】
【発明が解決しようとする課題】
従来技術に記載された方法では、以下の問題がある。
【０００８】
従来技術１記載の方法では、ダイナミックローディングが発生し、初期設定後にモジュール配置が変わった場合に、モジュールを誤認する恐れがある。
【０００９】
従来技術２記載の方法では、特権状態に移行したあとにモジュールのロードもなく同じ空間に戻ってくるケース（簡単なシステムコールで多く発生する）など不必要な空間情報出力が発生する。
【００１０】
従来技術３記載の方法では、ハードウェア命令による方法は、従来技術３でも述べているように、空間切り替えを行うハードウェア命令が特定できない場合、空間切り替え情報を取得することができない。また、出口ルーチン登録による方法では、出口ルーチンを登録しなければならないため、インストールの手間がかかり、ＯＳのソースコードが必要となる。また、必ず被トレースＯＳ上でトレース処理を動作させなければならないため、入出力処理の競合を回避するための割込禁止制御や、命令コードが主記憶装置上に存在するか調べる処理が必要となる。
【００１１】
本発明では、少ない出力量とオーバヘッドで、プログラム実行パスを正確に分析可能なデータを出力することができるとともに、トレース対象が動作する中央処理装置と異なる中央処理装置上でも空間識別情報を収集可能とすることを目的とする。
【００１２】
【課題を解決するための手段】
上記目的達成のため、本発明の一実施形態である命令トレース出力方法では、非特権状態から特権状態に移行するときにアドレス変換テーブルの先頭アドレスＡを保存するステップと、特権状態から非特権状態に移行するときにアドレスＡと現在のアドレス変換テーブルの先頭アドレスＢまたは空間識別子Ｂとを比較するステップと、ＡとＢが不一致の場合に空間識別情報と空間内のモジュール配置情報とを出力するステップとを有する。
【００１３】
また、モジュール配置情報を出力したときに該当空間の空間識別情報出力済判別フラグをセットするステップと、　非特権状態から特権状態に移行するときに実行された命令を判別するステップと命令が特権状態への移行割込を起こさせる命令であるときに、システムコール番号を判別するステップと、モジュール配置情報を変更するシステムコールの番号であるときに、フラグをリセットするステップと、アドレスＡとアドレスＢとが不一致の場合に、フラグがセットされていれば現在の空間の空間識別情報のみ出力するステップとを有する。
【００１４】
また、非特権状態から特権状態に移行するときに実行された命令を判別するステップと、　特権状態への移行割込を起こさせる命令であるときに、システムコール番号を判別するステップと、システムコール番号がモジュール配置情報を変更するシステムコールの番号であれば、特権状態から非特権状態に移行するときに空間識別情報と前記モジュール配置情報とを出力するステップとを有する。
【００１５】
また、非特権状態と特権状態との切り替えを検出し、アドレス変換テーブルの先頭アドレスの変更を検出し、アドレス変換テーブルの先頭アドレスの変更と非特権状態への切り替えがともに検出されたときに空間識別情報とモジュール配置情報とを出力するトレース手段を有する。
【００１６】
また、トレース対象のＯＳのバージョンを特定するステップと、バージョンとＯＳ固有情報の種別との組み合わせをもとに、あらかじめ登録しておいたオフセット位置を求めるステップと、ＯＳ固有情報を格納したテーブルの先頭アドレスを求めるステップと、テーブルの前記オフセット位置からＯＳ固有情報を取り出し、トレース情報として出力するステップと、を有する。
【００１７】
【発明の実施の形態】
図１は、本発明の構成の一例を示した図である。
【００１８】
図１において、１００は計算機システム内の中央処理装置、１１０は主記憶装置である。中央処理装置１００内には、現在実行中の命令コードの仮想アドレスを格納したプログラムカウンタ１０１、現在の特権／非特権状態を識別するためのフラグ１０２、アクティブ空間のセグメントテーブル（アドレス変換テーブルの構成要素）の先頭アドレス（ＳＴＯＲ：Ｓｅｇｍｅｎｔ　Ｔａｂｌｅ　　Ｏｒｉｇｉｎ）を格納したレジスタ１０３、動的アドレス変換機構１０４、が存在する。
【００１９】
主記憶装置１１０内には、現在実行中の命令コード１１１、オペレーティングシステムが各空間を識別するために使用する識別子１１２、各空間内にローディングされたモジュールの先頭アドレス・モジュール長・モジュール識別子などを格納したモジュール配置情報１１３、セグメントテーブルやページテーブルなどのアドレス変換テーブル１１４、多重仮想記憶方式のオペレーティングシステムのコードが存在する。識別子１１２や情報１１３は、オペレーティングシステムの管理テーブル内に格納されている。
【００２０】
トレース手段１２０は、１０１〜１０３および１１１〜１１３の各データを収集し、主記憶装置１１０や外部記憶装置にトレースデータ１３０として出力するプログラムコードである。トレースデータ分析手段１４０は、データ１３０を読み込み、分析・集計してモジュールごとや関数ごとの実行命令数などの統計データを出力するプログラムコードである。
【００２１】
手段１２０は、主記憶装置１１０内に存在してトレース対象の命令コードと同じ中央処理装置１００上で動作してもよい。また、トレース対象の命令コードとは異なる中央処理装置１００上、例えば中央処理装置１００をエミュレートするプログラムが動作する中央処理装置上で動作してもよい。
【００２２】
手段１２０には、空間識別情報（レジスタ１０３または識別子１１２の内容）を前回収集したときの内容を保持する領域１２１や、フラグ１０２の内容を前回収集したときの内容を保持する領域１２２、各空間ごとに空間識別情報を出力済か否かを判別するフラグ１２３を有する。
【００２３】
本発明では、手段１２０内に領域１２１や領域１２２が存在するところと、手段１２０が必ずしもトレース対象の命令コードと同じ中央処理装置１００上に存在しなくてもいいところに特徴がある。
【００２４】
本発明では、一般的な計算機が有するハードウェアの以下の２つの性質を利用する。
【００２５】
（１）動的アドレス変換機構を有する計算機では、アドレス変換テーブル１１４を切り替えると、仮想記憶空間が切り替わる。従って、アドレス変換テーブル１１４の先頭アドレス（ＳＴＯＲ）を格納したレジスタ１０３を検査すれば、空間が切り替わったかどうかがわかる。
【００２６】
（２）特権状態による保護機構を有する計算機では、レジスタ１０３の内容は、特権状態でしか変更することができない。従って、特権状態から非特権状態に切り替わるときのみ空間切り替えを検査すればよい。
【００２７】
命令ごとにフラグ１０２を収集して次の命令実行時まで領域１２２に保持し、特権状態と非特権状態の切り替えを検出する。また、非特権状態から特権状態への切り替えを検出したときにレジスタ１０３を収集するとともに、特権状態から非特権状態への切り替えを検出したときに、領域１２１の情報によりレジスタ１０３または情報１１３が変更されたと判別した場合のみ、識別子１１２や情報１１３を収集し、出力する。ただし、情報１１３を出力したときに、出力した空間の出力済みフラグ１２３をセットし、フラグがセットされていれば情報１１３は収集・出力しない。これにより、少ない出力量とＣＰＵオーバヘッドで、プログラム実行パスを正確に分析可能なデータを出力することが可能となる。
【００２８】
出力量が従来技術より少なくなる実例を、空間遷移と空間情報出力契機との関係の一例を示した図２によって説明する。２０１に示す被測定命令を実行したとき、非特権状態の最初と最後にモジュール配置情報を出力する従来技術２に比べて、システムコール実行後再び同じ空間に戻ってくるときの出力が削減されている。このようなケースは、小規模のシステムコールを実行したときに多く発生する。また、ユーザ空間からＯＳ（非特権状態から特権状態）に移行するときも出力が削減されている。
【００２９】
従来技術１は、本発明より出力量は少ないが、起動時にしか出力しないため、測定中にダイナミックロードが発生し、モジュールが追加された場合、追加されたモジュールを認識することができない。
【００３０】
また、情報を収集するタイミングの検出がトレース対象と独立しているため、トレース対象が動作する中央処理装置と異なる中央処理装置上でも識別子１１２や情報１１３を収集することができる。例えば、中央処理装置１００をエミュレートするプログラムや仮想計算機、主記憶装置を共有する別の計算機などに手段１２０の処理を付加することにより、同じ中央処理装置上で動作することによる以下のデメリットを回避することができる。
【００３１】
（１）トレース対象が動作するＯＳ（被トレースＯＳ）への組み込みが必要である。
【００３２】
（２）フェッチする前に命令コードを収集するため、命令コードが主記憶装置上に存在するか調べる処理が必要である。
【００３３】
（３）手段１２０と被トレースＯＳの入出力処理の競合を回避するため、手段１２０実行中は割込を禁止する制御が必要である。
【００３４】
図３に、トレースデータ１３０の構造を示す。トレースデータには、少なくとも、命令レコード１３１、空間切替レコード１３２、モジュール配置レコード１３３、を含む。その他のイベントやデータを記録したレコードが含まれていてもよい。
【００３５】
命令レコード１３１には、レコードの種別を識別するレコード識別子と、命令アドレスが含まれる。命令コードやオペランドなど他の情報が含まれていてもよい。命令レコードは通常１命令を実行するごとに出力されるが、アドレスが連続した複数の命令を実行した場合、先頭の命令のアドレスと命令数を記録し、１つのレコードとして出力してもよい。
【００３６】
空間切替レコード１３２には、レコード識別子のほか、プロセス番号や空間番号などの空間識別子が含まれる。空間識別子のかわりにアドレス変換テーブルの先頭アドレスを記録してもよい。また、他の情報が含まれてもよい。
【００３７】
モジュール配置レコード１３３には、レコード識別子のほか、モジュール先頭アドレス、モジュール長、モジュールを識別するモジュール名などの識別子が含まれる。モジュール長のかわりにモジュール最終アドレスでもよい。他の情報が含まれてもよい。
【００３８】
次に、各処理のアルゴリズムについて説明する。図４に、トレース手段１２０における処理のフローチャート図を示す。コンソールへのコマンド投入や特定命令の実行などの手段によりトレース処理を起動した場合、まず、領域１２１をクリアし、領域１２２を特権状態に初期化し、すべての空間のフラグ１２３をリセットする（４０１）。その後、１命令ごとに以下の処理（ステップ４０２〜４１１）を行う。
【００３９】
保持しておいた前命令実行時のフラグ１０２の領域１２２の内容と、現在のフラグ１０２の内容とを比較し（４０２）、領域１２２の内容が非特権状態かつフラグ１０２の内容が特権状態であれば、現在のレジスタ１０３の内容を領域１２１に複写する（４０３）。レジスタ１０３のかわりに、空間識別子１１２を複写してもよい。さらに、現在の命令アドレス１０１と、命令アドレスに位置する命令コード１１１とを収集し、特権状態への移行割り込みを起こさせる命令（スーパバイザコール（ＳＶＣ）命令やトラップ命令など）の命令コードであるかどうか調べる。これらの命令であれば（４０４）、命令コードのオペランドに付加されているシステムコール番号を調べ、モジュールレイアウトを変更する可能性のあるシステムコール（ｍｍａｐなど）の番号であるか確認する。そうであれば（４０５）、レジスタ１０３と一致することのないように領域１２１をクリアするとともに、フラグ１２３をリセットする（４０６）。
【００４０】
領域１２２の内容が特権状態かつフラグ１０２の内容が非特権状態の場合は（４０７）、領域１２１の内容とレジスタ１０３の内容を比較する。不一致の場合（４０８）、フラグ１２３を調べ、セットされていなければ現在のアクティブな空間の空間情報を出力し（５００）、フラグ１２３をセットする（４０９）。
【００４１】
その後、現在の命令アドレス１０１等のデータを収集して命令レコードを作成し、トレースデータ１３０に出力する（４１０）。さらに、現在のフラグ１０２の内容を領域１２２に複写する（４１１）。
図５に、トレース手段１２０の処理内の空間情報取得出力処理５００のフローチャート図を示す。まず、あらかじめ定義しておいたテーブルから、取得する情報の種別とＯＳのバージョン・ＯＳの種類・計算機の動作モードなどに対応したオフセットを求める（５０１）。ＯＳのバージョン・ＯＳの種類・計算機の動作モードの各情報は、計算機のレジスタまたは主記憶装置の参照や、ユーザからの入力などの手段によりトレース処理の初期設定時に得ておく。
【００４２】
次に、主記憶を参照してテーブルの先頭アドレスを取得し、オフセットに加える（５０２）。テーブルの先頭アドレスが実アドレスではなく仮想アドレスである場合は（５０３）、主記憶装置内に保持されているアクティブ空間のセグメントテーブルやページテーブルなどのアドレス変換テーブルを参照し、仮想アドレスを実アドレスに変換する（５０４）。被トレースＯＳとトレース処理が動作するＯＳが異なる場合は（５０５）、さらに実アドレスを、トレース処理が参照可能な（被トレースＯＳの主記憶装置の内容をトレース処理が動作する空間にマッピングした）アドレスに変換する（５０６）。ＯＳのテーブルに格納された空間識別子やモジュール配置情報などのＯＳ固有情報を取得し、レコード１３２やレコード１３３内に埋め込み、トレースデータ１３０に出力する（５０７）。
【００４３】
【発明の効果】
本発明の命令トレース出力方法および計算機システムによれば、少ない出力量とオーバヘッドで、プログラム実行パスを正確に分析可能なデータを出力することができるとともに、トレース対象が動作する中央処理装置と異なる中央処理装置上でも空間識別情報を収集できるため、組込や割込禁止制御を削減することができる。
【図面の簡単な説明】
【図１】本発明の構成の一例を示した図
【図２】空間遷移と空間情報出力契機との関係を示した図
【図３】トレースデータのレコード構造を示した図
【図４】命令トレース処理のフローチャート図
【図５】空間情報取得出力処理のフローチャート図
【符号の説明】
１００：中央処理装置、１０１：プログラムカウンタ、１０２：特権状態識別フラグ、１０３：アドレス変換テーブル先頭アドレス格納レジスタ、１０４：動的アドレス変換機構、１１０：主記憶装置、１１１：命令コード、１１２：空間識別子、１１３：モジュール配置情報、１１４：アドレス変換テーブル、１２０：トレース手段、１２１：特権状態移行直前のレジスタ１０３内容の格納領域、１２２：、直前の命令の実行時におけるフラグ１０２内容の格納領域、１３０：トレースデータ、１３１：命令レコード、１３２：空間切替レコード、１３３：モジュール配置レコード、１４０：トレースデータ分析手段
【図１】
2004078790.tif 000003
【図２】
2004078790.tif 000004
【図３】
2004078790.tif 000005
【図４】
2004078790.tif 000006
【図５】
2004078790.tif 000007