Performance Explorerを知る
Performance Explorerで複雑なデータ分析を簡単に行う
IBM i はシステムのパフォーマンス特性を理解し、パフォーマンスに関する問題を診断するのに役立つ業界をリードする機能を提供し続けています。IBM i 6.1 時点では、パフォーマンス・データを収集する際に必要なすべてのインスツルメンテーションが基本 OS に含まれていました。IBM i には、素晴らしいパフォーマンス・データ収集プログラム一式が含まれており、それぞれがシステム・パフォーマンスを独自に考察しています。さらに、データを有意義な方法で理解するのに役立つ豊富なデータ分析ツールが利用できます。
この記事では、パフォーマンス・データ収集プログラムの1つである Performance Explorerをご紹介します。はじめは、PEXはとっつきにくいかもしれませんが、価値あるパフォーマンス分析の隙間を埋めてくれます。
IBM i パフォーマンス・ツールの概要
PEX について詳しく説明する前に、リアルタイム・コマンドからデータ収集プログラムまで、IBM i で利用できる幅広いパフォーマンス・ツールを見てみましょう。特に指示がない限り、図1のツールが基本 OS のすべての部分です。
パフォーマンス・コマンド
システム全体のパフォーマンスを、サンプルを使用して迅速に確認できるいくつかの便利なコマンドがあり、それは次のようなものです。
- Work with Active Jobs (WRKACTJOB)
- Work with System Activity (WRKSYSACT)
- Work with System Status (WRKSYSSTS)
- Work Disk Status (WRKDSKSTS)
WRKSYSACT 以外のすべてのコマンドは、IBM Navigator for i と同等の機能を備えています。
パフォーマンス・データ収集プログラム。IBM i は、Collection Services、Disk Watcher、Job Watcher、Job Trace、PEX の 5 つのパフォーマンス・データ収集プログラムを備えています。各収集プログラムは、システムに関するパフォーマンス・メトリックのスナップショットを提供します。
- Collection Services は、ジョブ、タスク、ハードウェア (CEC、IOP、コレクター、デバイス) など多数のシステム・リソースから、さらにユーザー/IBM アプリケーション (ミドルウェア) のデータを収集します。待機時間情報も収集します。このツールはシステムで常時稼働し、15 秒から 1 時間の間隔で定期的にデータを収集して報告しますが、システム負荷は低くなっています。パフォーマンスに関する問題を調査する場合、通常は Collection Services のデータを最初に調査してください。このコレクターは、特定のジョブ (複数の場合もあり) や特定の期間に潜在的な問題がないか詳しく調べる場合に便利でしょう。
- Disk Watcher は、ディスク・アクティビティーに関する詳細情報を収集します。間隔を開けてデータを収集する Stats モード (Collection Services など) と、ディスクで入出力が発生するたびに詳細データを収集する Trace モードがあります。
- Job Watcher は、選択したジョブ、スレッド、または Licensed Internal Code (LIC) タスクのセットに関するほぼリアルタイムの情報を収集します。データには待機時間、SQL ステートメント、呼び出しスタックが含まれている場合があります。このツールは間隔を指定して使用し、0.1 秒単位の細かさで指定できます。
- Job Trace は、PEX を使用してジョブ・トレース・データを収集します。さらに、Print Job Trace (PRTJOBTRC) コマンドは収集データに基づきレポートを印刷します。
- PEX は、特定のアプリケーション、プログラム、またはシステム・リソースに関する Trace、Stats、または Profile ベースの詳細データを収集します。
データの表示と分析のためのツール。パフォーマンス・データを収集したら、それを表示および分析してシステムのパフォーマンス・メトリックをモニターし、パフォーマンスに関する問題のトラブルシューティングを行う方法が必要になります。IBM i では、このタスクを支援する次の 3 種類のツールを提供しています。 - パフォーマンス・ツール・ライセンス・プログラム・プロダクト (LPP) は、Collection Services データに基づくレポートを印刷するグリーン・スクリーンベースのインターフェースを備えた別途有償の LPP (7.1 では 5770-PT1) です。
- Performance Data Investigator (PDI) は、パフォーマンス・データを Web ベースの GUI で表示し、多数の対話式図表を含んでいます。これは、すでに説明した収集プログラムそれぞれに対するパフォーマンス・データを表示し、分析することができます。PDI は、Performance Investigate Data タスク経由で IBM Navigator for i で利用できます。基本 OS には、Collection Services と Health Indicators の図表が入っています。Disk Watcher、PEX、Database の図表を使用するには、Performance Tools LPP のオプション 1 をインストールしておく必要があります。Job Watcher ではオプション 3 が必要です。
- サービス・オファリングである IBM iDoctor for IBM i は PDI の概念と似ていますが、クライアントベースのツールです。シリアル番号ごとに年間のライセンス料を支払う必要があります。IBM iDoctor は Collection Services、Job Watcher、Disk Watcher のグラフィカル・データ分析、また PEX Analyzer 機能による詳細な PEX 分析機能をサポートしています。
PEX についてもっと詳しく
常時稼働している Collection Services と異なり、PEX は (通常、数分から数時間) 比較的短時間稼働します。システム全体または特定のタスクまたはジョブのデータを収集できます。パフォーマンスに問題があるジョブを明らかにするには、Collection Services など詳細データを収集するツールを使用し、PEX を実行してそのジョブだけのデータを収集し、それらの問題の正確な場所を判断してください (注: PEX コマンドを実行するには *SERVICE 特殊権限が必要です)。
PEX は、分析をプログラム・レベルにまで分解する、つまりどのプログラムとプロシージャーが最も時間とリソースを消費しているか示すことができる点で Collection Services とは異なります。PEX は次の目的で積極的に使用することができます。
- 新しいアプリケーションを生産に入る前に、そのリソース特性を測定する
- ソフトウェアやハードウェアを大幅に変更する前に、重要なアプリケーション・ジョブのベースラインを提供する
- 考えられるアプリケーション・チューニングのチャンスを特定する
PEX を反応的に使用すると、次のようなプログラムなど、システム・リソースに影響を与えるプログラムを特定することで、パフォーマンスに関する問題の分析に役立ちます。
- CPU を最も消費する
- ページ・フォールトを最も発生させる
- ディスク入出力が最も激しい (PEX は入出力のタイプも特定します)
また、PEX は最も頻繁に呼び出されるプログラムやデータベースのオープン/クローズ動作を最も行うプログラムなど、有用な特性を指摘できます。
PEX 収集モード
PEX には Stats、Trace、Profile の 3 種類の収集モードがあります。それぞれ、異なる種類のデータを収集します。
- Stats モードは、システム全体またはジョブ・レベルで指定した範囲の一般的なパフォーマンス統計情報を収集します。インラインおよび累積 CPU およびディスク入出力ととともに、プログラム/プロシージャー/MI 命令呼び出しに関する統計情報を収集します。Stats データはフラット型または階層型編成で収集できます。フラット型編成には、プログラムとプロシージャーの単純なリストがあり、それぞれ独自のデータを備えています。階層型編成では、どのプログラムが他のどのプログラムを呼び出すかによって、そのデータを親子関係に編成します。
- Trace モードは、特定のイベントのログを記録し、そのイベント (ページ・フォールトまたはストレージ・セグメントの割り当て) が発生するたびに、トレース・レコードが生成されます。Trace は最も堅牢なモードですが、収集されたデータは短時間で大量のスペースを占有することがあります。
- Profile モードは、特定のプログラムをサンプリングして、プロセッサー時間を大量に消費しているコード中の領域を特定します。この情報を使用して、特定のプログラムまたはアプリケーションのパフォーマンスを改善できます。Profile モードと Trace モードは互いに大きく重なり合うため、特定のプログラムのパフォーマンス分析には、一般的に Profile モードではなく Trace モードをお勧めします。
PEX 収集の実行方法
これで PEX が、パフォーマンスに関する問題を迅速かつ簡単に特定できることがわかったと思いますので、ツールの使用方法を見てみましょう。ツールを効果的に使用するため、次の 5 つのステップに従ってください。
ステップ1
データ定義を作成するには Add PEX Definition (ADDPEXDFN) コマンドを使用します。このコマンドは、どのジョブやタスクのデータを収集するか、収集するデータ、収集方法について PEX に指示します。ADDPEXDFN は極めて複雑です。それはPEX 収集の多数の異なる面を制御するためです。図2 のサンプル例は、コマンドを使用して MYJOBNAME という各ジョブで 0.1 ミリ秒ごとに Performance Monitor Counter Overflow (PMCO) Trace イベントを収集する定義を作成する方法を示しています。コンピューターが使用されたプロセッサー時間量を作表します。カウンターがサンプリング間隔 (この場合は 0.1ミリ秒) を超え、「オーバーフローする」たびに、イベントが生成されます。
図2 の下で、Event format を FORMAT2 に設定している点に注意してください。デフォルトは FORMAT1 ですが、FORMAT2 はその他のレベルのプログラム・スタックを収集し、そのスタックは分析に便利であることがわかります。PMCO 以外の他の多くのイベントを収集できます (が、ここではお話しません)。イベントはタイプおよびサブタイプ別に編成されます。フルの ADDPEXDFN コマンドの Base events を越えてスクロールすると、storage、disk、fault、job、lock、SAR、expert cache、disk server、OS、Java、communications、application、PASE、file server、synchronization、journal、database、resource affinity、virtual I/O などさまざまなタイプすべてが表示されます。各イベントタイプには、各種サブタイプがあります。サブタイプを表示するには、ADDPEXDFN コマンドの Event identifier フィールドで F4 キーを押し、ヘルプ・テキストを確認します。
ステップ2
Start Performance Explorer(STRPEX)コマンドと選択した定義を使用して PEX 収集を開始します。図3の例は、前のステップで作成したMYDFN定義を使用しています。
ステップ3
分析するコマンド、プログラム、またはアプリケーションを実行します。
ステップ4
図4 の End Performance Explorer (ENDPEX) コマンドを使用して PEX 収集を終了します。ENDPEX を実行する場合、データをデータベース・ファイルのセットに保存するか、管理コレクション・オブジェクト (*MGTCOL) に保存するか決める必要があります。*MGTCOL に保存する場合、データベース・ファイルを作成するために、ある時点で管理コレクション・オブジェクトにおいて Create PEX Data (CRTPEXDTA) コマンドを実行する必要があるでしょう。別の言い方をすれば、ENDPEX DTAOPT (*LIB) の実行は、基本的に ENDPEX DTAOPT (*MGTCOL) の後に CRTPEXDTA を実行することと同じです。セッション ID に *SELECT を指定して ENDPEX を実行すると、PEX セッションのリストが画面に表示されます (図5)。終了するセッションを選択し (複数のセッションがアクティブになっているので当然そうなります)、Enter キーを押します。
ステップ 5
図6 に示す CRTPEXDTA コマンド (オプション) を使用して、ENDPEX で作成された PEX 管理コレクション・オブジェクトから PEX データベース・ファイルを作成します。CRTPEXDTA では、PEX 管理コレクション・オブジェクトの名前を指定し、データを書き込むライブラリーとメンバーの名前を特定します。
PEX のヒントとテクニック
ほとんどのテクノロジーに当てはまるように、「コツ」を知っていると生産性が格段に上がります。それを念頭に、PEX を使用してパフォーマンス・データを収集して分析する場合に便利と思われるヒントをいくつか次に示します。
- 複数の PEX セッションを同時にアクティブにしておくことができます。唯一の制限は、複数のセッションで PMCO データを収集している場合、すべてのセッションで同じ間隔を使用していなければならない点です。
- ADDPEXDFN コマンドの MAXSTG パラメーターは、収集データに使用する最大ストレージを指定します。ほとんどのトレース収集では、デフォルト値ではなく MAXSTG(1000000) を指定してください。PEX セッションに十分なストレージが割り当てられていないと、追加データの収集が停止し、セッションがアクティブから保留状態に変化します。PEX セッションのステータスは ENDPEX 画面で確認できます。
- トレース・データを収集するには、ADDPEXDFN コマンドで TRCTYPE(*SLTEVT) SLTEVT(*YES) を指定してください。そうすることで、*CALLRTN (call/return) などプリパッケージされたグループを使用せず、特定のイベントを選択することを示します。また、有効にする特定のトレース・イベントのリストを提供する必要があります。これは、BASEVT (base events) から始まり、ADDPEXDFN キーワードを指定して行います。
- 特定の PEX セッションが必要ないと判断したら、ENDPEX DTAOPT(*DLT) を実行します。このオプションにより (アクティブな場合) 収集が停止し、何も保存せずにそのデータを削除します。
- 非常に大量のトレース収集データ (数百万イベント以上) を保存すると、特に小型のマシンの場合に、多少システム・パフォーマンスに影響する場合があります。この場合、ENDPEX OPTON(*STOP) を実行し、ENDPEX OPTION(*END) により後でデータを保存することで、追加イベントの収集を停止できます。PEX セッション (ENDPEX 画面に表示されたセッション) は、保存または削除するまで、またはシステムが IPL を行うまでシステム上に存在します。
収集データの分析
収集したデータの分析には、オプションがいくつか使用できます。
- QAYPE* 出力ファイルのデータに対して、自分の SQL または照会を作成する
- Print PEX Report (PRTPEXRPT) コマンドを実行する
- PDI (*PROFILE データおよび制限付き *TRACE データ向け) を使用する
- IBM iDoctor for IBM i PEX Analyzer ツールを使用して詳細な分析を行う
2 つのグラフィカル・オプションである PDI と IBM iDoctor for IBM i をもっと詳しく見てみましょう。
Performance Data Investigator。PDI は *PROFILE または *TRACE プロファイルを使用して収集された PEX データを表示します。_*TRACE プロファイル (TPROF) には、図2 の例で示すように *PMCO イベントが入っています。提供されているビューは、実行中のアプリケーションで CPU 時間が費やされている場所をより簡単に検出したり、プログラムやアプリケーション内の「ホット・スポット」を特定したりするのに役立ちます。
図7 の Investigate Data 画面で、Performance Explorer Data フォルダーを選択して展開し、表示するパースペクティブをクリックします。次に、PEX Collection ライブラリーを選択し、ドロップダウン・ボックスから名前を指定し、Display をクリックします。
Profile by Procedure を選択すると、プログラム名やヒット・カウントなどプロシージャーに関する重要な情報を表示するリストが生成されます (図8)。当然、自分のデータを表示するのはもっと興味があるでしょう。また、PDI のすべての表データを (Select Action ボタンを使用して) *.csv ファイルか *.txt ファイルとしてエクスポートできます。
図9 で示すように、Profile by Component はコンポーネント単位で分類されたプロシージャーの階層リストを表示します。またこのビューは、プログラム名やヒット・カウントなどプロシージャーに関する重要な情報を示します。
図10 の Hierarchical Trace Profile ビューでは、タイプやコンポーネントなどいくつかのプロパティーで分類されたプロシージャーの階層リストを表示できます。
図11 で示す Job/Thread リストは、 PEX 収集のジョブおよびスレッドの階層リストだけでなく、累積 CPU 時間を秒で表示します。この情報はアプリケーションのリソース使用量や動作を理解する際に役立つ場合があります。ヒット・カウントと累積 CPU 時間は特に便利です。プログラムやモジュール・ソースにアクセスする場合、データを分析すると変更するきっかけになる場合があります。例えば、データ型を再定義する、より効率的なアルゴリズムを作成しデータを処理する、あるいはより効率的なプログラミング言語で関数を実装することになるでしょう。
IBM iDoctor for IBM i。このツール一式には、パワフルな PEX Analyzer 機能が含まれています。IBM iDoctor を使用して複雑な問題を切り分け、アプリケーション・パフォーマンスを理解することができます。これは、さまざまな種類の PEX 収集 (Stats、Profile、Trace) 全体に渡って極めて詳細なグラフとレポートを提供しています。ディスク操作、CPU 利用率、ファイル・オープン、MI プログラム、待機状態、DASD スペース消費、その他の低水準サマリーを提供するドリルダウン機能を備えています。
PEX Analyzer は PEX 定義を追加し、収集を開始/停止できる GUI ウィザードも備えています。利用できるツールやチャートの機能の例をいくつか見てみましょう。
図12 の Profile ビューは、プログラム・レベルの CPU 使用率を示しています。データベースのオープン/クローズを最も頻繁に行っているプログラムを判断するには、図13 のビューを使用します。データベースのフル・オープン/クローズを高い率で行うと、パフォーマンス問題で最も頻繁に見られる原因の 1 つになります。図14 に示す、プログラムによる論理データベース入出力のグラフでは、プログラムまたはプロシージャーのメトリックスが一目でわかります。Trace プロファイル (図15) は、ライブラリー、プログラム、モジュールのヒット・カウントおよび割合をリストしています。
図16 は Stats Hierarchical シーケンスのビューを示しています。このシーケンスは、すべてのプログラムと MI 複合命令アクティビティーを発生した順序に表示します。自分に対して重要なもの (CPU 使用率、経過時間、ディスク入出力カウントなど) に応じて、このデータをさまざまな方法で見ることができます。該当する他の値には、プログラムが呼び出された頻度、プログラムが行った呼び出し数、呼び出された MI 命令の数が含まれている場合があります。また、どのジョブにあるかに関係なく、最もコストが高いプログラムを判断できます。
インライン stats と累積 stats を表示するとします。インライン stats は、プログラムまたは命令で直接実行された CPU およびディスク・アクティビティーに基づいていますが、プログラムが呼び出したプログラムや命令には基づいていません。累積 stats は、プログラムまたは命令により呼び出されたすべてのプログラムおよび命令の合計を表す CPU およびディスク・アクティビティーに基づいています。したがって、プログラム A がプログラム B を呼び出し、プログラム B がプログラム C を呼び出し、プログラム C が MI 命令 D を呼び出す場合、プログラム A の累積統計は A、B、C、D の合計になります。
ただちにデータ分析する
データをより迅速かつ簡単に分析するには、PEX Analyzer は複合データを意味のある方法で示す必要があります。この記事で説明できるより多くの機能を提供しているため、PEX Analyzer の機能をよく知るには iDoctor の Web サイト (https://www-912.ibm.com/i_dir/idoctor.nsf) をご覧ください。
多数のユーザーはしばしば高度なパフォーマンス分析に PEX を採用しますが、一部の PEX 機能は簡単に使用できます。これで多少は PEX について知り、パフォーマンス・データ分析を単純化するために使用できる、パワフルなツールの実態を知ることができたと思います。まずはやってみてください!