7. メモリインスペクタ

ParaView Memory Inspector パネルを使用すると、インタラクティブな可視化処理中に ParaView のメモリ使用量を簡単に監視できます。また、開発者はポイントアンドクリック方式のインターフェースを使って、ローカルまたはリモートのクライアントプロセスやサーバープロセスにデバッガーを接続することもできます。前に説明したように、 Information パネルと Statistics Inspector の両方で、現在のパイプラインに使用されている合計メモリーが過大または過小に見積もられる傾向があります。 Memory Inspector は、オペレーティングシステムへの直接クエリによってこれらの問題を解決します。ホストごとにすべてのプロセスで使用されている合計メモリー、ホストごとに ParaView で使用されている合計累積メモリー、および各 ParaView プロセスで使用されている個々のランクごとの使用量など、多数の診断統計が収集され、レポートされます。ホスト上で累積的に、または個々のランクで、メモリ消費がクリティカルレベルに達すると、対応するGUI要素が赤に変わり、シャットダウンされる可能性があることを警告します。これにより、状態を保存し、より多くのノードでジョブを再起動して、作業の損失を回避することができます。逆に言えば、使用可能なメモリーの全容量を使い切っていないことを知ることは、より小さなジョブを実行することによって計算リソースを節約するのに役立ちます。もちろん、メモリのフットプリントは、最適な実行サイズを決定する1つの要因にすぎません。

../_images/Meminsp-pv-gui.png

図 7.10 Memory Inspector パネルのメインUI要素。A:プロセスグループ、B:ホストごとの統計、C:ランクごとの統計、およびD:更新コントロール。

7.1. ユーザーインターフェースとレイアウト

Memory Inspector パネルには、クライアントおよびサーバーホストの現在のメモリ使用状況に関する情報が表示されます。図 7.10 に、A-Dとラベル付けされたメインUI要素を示します。ClientとServerグループ、ホスト、ランクのUI要素からアクセスできる特別なコンテキストメニューを介して、多数の追加機能が提供されます。主なUI要素は次のとおりです:

  1. プロセスグループ

    1. Client : ParaView クライアントに関する統計情報をレポートするクライアントグループが常に存在します。

    2. Server : クライアントサーバーモードで実行している場合、サーバーグループは、pvserver プロセスが実行されているホストに関する統計情報を報告します。

    3. Data Server : クライアントデータレンダーサーバーモードで実行している場合、データサーバーグループは、pvdataserver プロセスが実行されているホストに関する統計情報を報告します。

    4. Render Server : クライアントデータレンダーサーバーモードで実行している場合、レンダーサーバーグループは、pvrenderserver プロセスが実行されているホストに関する統計情報を報告します。

  2. ホストごとの統計情報 : ParaView プロセスが実行されている各ホストについて、ホストごとの統計情報が報告されます。ホストは、最初の列に示されているホスト名で編成されます。2つの統計情報が報告されます。1) ホスト上のすべてのプロセスで使用されているメモリの合計、2) このホスト上の ParaView の累積使用量です。絶対値は、使用可能なメモリーの合計使用率を示すバーに表示されます。ジョブ全体のリソース制限が適用されているシステムでは、ParaViewPV_HOST_MEMORY_LIMIT 環境変数によって制限を認識します。この場合、ParaView の累積使用率は、ホスト合計とリソース制限のうち小さい方を使用して計算されます。

  3. コントロールの更新 : デフォルトでは、パネルが表示されている場合、パイプラインオブジェクトが作成、修正、または破棄されたとき、およびシーンがレンダリングされた後に、メモリ使用統計が自動的に更新されます。更新は、更新ボタンを使用して手動でトリガできます。自動更新を無効にするには、Auto-update チェックボックスをオフにします。リモートシステムへのクエリーは、かなり大きなジョブでも非常に高速であることが実証されています。そのため、自動更新機能はデフォルトで有効になっています。

  4. Host Properties ダイアログ : The Host コンテキストメニューには、 Host Properties ダイアログが表示されます。このダイアログには、OSのバージョンやCPUのバージョン、ホストコンテキストおよびプロセスコンテキストにインストールされて使用可能なメモリなど、さまざまなシステムの詳細情報が表示されます。 Memory Inspector パネルでは、特定のコンテキストで使用可能なメモリの割合としてメモリ使用量が報告されますが、 Host Properties ダイアログでは、各コンテキストでインストールされて使用可能なメモリの合計が報告されます。インストールされているメモリと使用可能なメモリを比較することで、リソース制限の影響を受けるかどうかを判断できます。

../_images/PV_MemoryInspectorProperties.png

図 7.11 ホストプロパティダイアログ

7.2. 高度なデバッグ機能

7.2.1. リモートコマンド

../_images/Meminsp-remote-command.png

図 7.12 リモートコマンドダイアログ

Memory Inspector Panel は、リモート(またはローカル)コマンド機能を提供し、特定のホストでシェルコマンドを実行できるようにします。この機能は、専用のランクアイテムのコンテキストメニューを通じて公開されます。ランクのプロセスIDなどの情報があるため、個々のプロセスが対象となる場合があります。たとえば、リモートクラスタで実行されているサーバープロセスにデバッガを簡単に接続できます。ターゲットランクがクライアントと同じホスト上にない場合、コマンドはリモートと見なされます。それ以外の場合は、ローカルとみなされます。したがって、リモートコマンドは ssh 経由で実行されますが、ローカルコマンドは実行されません。コマンドテンプレートのリストが管理されます。多くの定義済みコマンドテンプレートに加えて、テンプレートを追加したり、既存のテンプレートを編集することができます。デフォルトのテンプレートでは、次のことができます。

  • gdb を選択したプロセスに接続

  • 選択したプロセスのホスト上で実行

  • 選択したプロセスにシグナルを送信

実行前に、選択したテンプレートが解析され、特殊トークンのリストが実行時に決定された値またはユーザー提供の値に置き換えられます。ユーザ指定の値は、ダイアログボックスのパラメータグループで設定および変更できます。トークンを置き換えたコマンドが、ダイアログのプレビューペインに確認用に表示されます。

次のトークンが使用可能で、必要に応じてコマンドテンプレートで使用できます。

  1. $TERM_EXEC$ : コマンドの実行に使用する端末プログラム。UNIXシステムでは、通常xtermが使用されます。Windowsシステムでは、通常、cmd.exe が使用されます。プログラムがデフォルトのパスにない場合は、絶対パスを指定する必要があります。

  2. $TERM_OPTS$ : 端末プログラムのコマンドライン引数。Unixでは、端末ウィンドウのタイトル、サイズ、色などを設定するために使用されます。

  3. $SSH_EXEC$ : リモートコマンドの実行に使用するプログラム。Unixでは、通常は ssh です。Windowsでは、1つのオプションは plink.exe です。プログラムがデフォルトのパスにない場合は、絶対パスを指定する必要があります。

  4. $FE_URL$ : リモートプロセスが外部からは見えない計算ノード上にある場合に使用するssh URL。このトークンは、コマンドを実行するために2つの ssh ホップが作成されるコマンドテンプレートを構築するために使用されます。

  5. $PV_HOST$ : 選択したプロセスが実行されているホスト名。

  6. $PV_PID$ : 選択したプロセスのプロセスID。

Note:Windowsでは、Visual Studio (例: windbg.exe)に加えて、MicrosoftのSDKに含まれるデバッグツールをインストールする必要があります。Windows用の ssh program plink.exe は、Unixシェルプログラムで使用されるANSIエスケープコードを解析しません。一般に、Windows固有のテンプレートには、ある程度の調整が必要です。

7.2.2. スタックトレースシグナルハンドラ

プロセスグループのコンテキストメニューには、バックトレースシグナルハンドラオプションがあります。有効にすると、SEGV、TERM、INT、ABORTなどのシグナルをキャッチし、プロセスが終了する前にスタックトレースを出力するシグナルハンドラがインストールされます。シグナルハンドラが有効になったら、明示的にシグナルを送信することでスタックトレースをトリガできます。スタックトレースシグナルハンドラを使用すると、クラッシュに関する情報を収集したり、計算ノードで ssh を実行できない場合にデッドロック中にスタックトレースをトリガしたりできます。コンピュートノードへのユーザーの ssh アクセスを制限するサイトでは、ログインノードから実行中のプロセスにシグナルを送る方法が提供されることがよくあります。この機能はPOSIXシグナルをサポートしているシステムでのみ利用可能であり、現在はGNU互換のコンパイラでのみスタックトレースを実装しています。

7.3. コンパイルとインストールに関する考慮事項

ParaView が実行されるシステムに、ジョブ全体のメモリ使用制限や非標準のプロセス単位のメモリ制限など、特殊なリソース制限が適用されている場合、システム管理者は次の環境変数を使用して、この情報を ParaView の実行中のインスタンスに提供する必要があります。たとえば、これらはバッチ・システム起動スクリプトで設定できます。

  1. PV_HOST_MEMORY_LIMIT : ホスト全体のリソース制限をレポートします。

  2. PV_PROC_MEMORY_LIMIT : プロセスごとのメモリー制限をレポートします。標準のUnixリソース制限では強制されません。

いくつかのデバッグ機能(スタックトレースのプリントなど)には、デバッグシンボルが必要です。これらの機能は、ParaViewCMAKE_BUILD_TYPE=Debug でビルドされている場合、またはリリースビルドの場合は CMAKE_BUILD_TYPE=RelWithDebugSymbols でビルドされている場合に最適です。