8. メモリインスペクタ
ParaView Memory Inspector
パネルを使用すると、インタラクティブな可視化処理中に ParaView のメモリ使用量を簡単に監視できます。また、開発者はポイントアンドクリック方式のインターフェースを使って、ローカルまたはリモートのクライアントプロセスやサーバープロセスにデバッガーを接続することもできます。前に説明したように、 Information
パネルと Statistics Inspector
の両方で、現在のパイプラインに使用されている合計メモリーが過大または過小に見積もられる傾向があります。 Memory Inspector
は、オペレーティングシステムへの直接クエリによってこれらの問題を解決します。ホストごとにすべてのプロセスで使用されている合計メモリー、ホストごとに ParaView で使用されている合計累積メモリー、および各 ParaView プロセスで使用されている個々のランクごとの使用量など、多数の診断統計が収集され、レポートされます。ホスト上で累積的に、または個々のランクで、メモリ消費がクリティカルレベルに達すると、対応するGUI要素が赤に変わり、シャットダウンされる可能性があることを警告します。これにより、状態を保存し、より多くのノードでジョブを再起動して、作業の損失を回避することができます。逆に言えば、使用可能なメモリーの全容量を使い切っていないことを知ることは、より小さなジョブを実行することによって計算リソースを節約するのに役立ちます。もちろん、メモリのフットプリントは、最適な実行サイズを決定する1つの要因にすぎません。
8.1. ユーザーインターフェースとレイアウト
Memory Inspector
パネルには、クライアントおよびサーバーホストの現在のメモリ使用状況に関する情報が表示されます。図 8.12 に、A-Dとラベル付けされたメインUI要素を示します。ClientとServerグループ、ホスト、ランクのUI要素からアクセスできる特別なコンテキストメニューを介して、多数の追加機能が提供されます。主なUI要素は次のとおりです:
プロセスグループ
Client : ParaView クライアントに関する統計情報をレポートするクライアントグループが常に存在します。
Server : クライアントサーバーモードで実行している場合、サーバーグループは、
pvserver
プロセスが実行されているホストに関する統計情報を報告します。Data Server : クライアントデータレンダーサーバーモードで実行している場合、データサーバーグループは、
pvdataserver
プロセスが実行されているホストに関する統計情報を報告します。Render Server : クライアントデータレンダーサーバーモードで実行している場合、レンダーサーバーグループは、
pvrenderserver
プロセスが実行されているホストに関する統計情報を報告します。
ホストごとの統計情報 : ParaView プロセスが実行されている各ホストについて、ホストごとの統計情報が報告されます。ホストは、最初の列に示されているホスト名で編成されます。2つの統計情報が報告されます。1) ホスト上のすべてのプロセスで使用されているメモリの合計、2) このホスト上の ParaView の累積使用量です。絶対値は、使用可能なメモリーの合計使用率を示すバーに表示されます。ジョブ全体のリソース制限が適用されているシステムでは、ParaView は PV_HOST_MEMORY_LIMIT 環境変数によって制限を認識します。この場合、ParaView の累積使用率は、ホスト合計とリソース制限のうち小さい方を使用して計算されます。
コントロールの更新 : デフォルトでは、パネルが表示されている場合、パイプラインオブジェクトが作成、修正、または破棄されたとき、およびシーンがレンダリングされた後に、メモリ使用統計が自動的に更新されます。更新は、更新ボタンを使用して手動でトリガできます。自動更新を無効にするには、Auto-update チェックボックスをオフにします。リモートシステムへのクエリーは、かなり大きなジョブでも非常に高速であることが実証されています。そのため、自動更新機能はデフォルトで有効になっています。
Host Properties ダイアログ : The Host コンテキストメニューには、
Host Properties
ダイアログが表示されます。このダイアログには、OSのバージョンやCPUのバージョン、ホストコンテキストおよびプロセスコンテキストにインストールされて使用可能なメモリなど、さまざまなシステムの詳細情報が表示されます。Memory Inspector
パネルでは、特定のコンテキストで使用可能なメモリの割合としてメモリ使用量が報告されますが、Host Properties
ダイアログでは、各コンテキストでインストールされて使用可能なメモリの合計が報告されます。インストールされているメモリと使用可能なメモリを比較することで、リソース制限の影響を受けるかどうかを判断できます。
8.2. 高度なデバッグ機能
8.2.1. リモートコマンド
Memory Inspector Panel
は、リモート(またはローカル)コマンド機能を提供し、特定のホストでシェルコマンドを実行できるようにします。この機能は、専用のランクアイテムのコンテキストメニューを通じて公開されます。ランクのプロセスIDなどの情報があるため、個々のプロセスが対象となる場合があります。たとえば、リモートクラスタで実行されているサーバープロセスにデバッガを簡単に接続できます。ターゲットランクがクライアントと同じホスト上にない場合、コマンドはリモートと見なされます。それ以外の場合は、ローカルとみなされます。したがって、リモートコマンドは ssh
経由で実行されますが、ローカルコマンドは実行されません。コマンドテンプレートのリストが管理されます。多くの定義済みコマンドテンプレートに加えて、テンプレートを追加したり、既存のテンプレートを編集することができます。デフォルトのテンプレートでは、次のことができます。
gdb
を選択したプロセスに接続選択したプロセスのホスト上で実行
選択したプロセスにシグナルを送信
実行前に、選択したテンプレートが解析され、特殊トークンのリストが実行時に決定された値またはユーザー提供の値に置き換えられます。ユーザ指定の値は、ダイアログボックスのパラメータグループで設定および変更できます。トークンを置き換えたコマンドが、ダイアログのプレビューペインに確認用に表示されます。
次のトークンが使用可能で、必要に応じてコマンドテンプレートで使用できます。
$TERM_EXEC$ : コマンドの実行に使用する端末プログラム。UNIXシステムでは、通常xtermが使用されます。Windowsシステムでは、通常、
cmd.exe
が使用されます。プログラムがデフォルトのパスにない場合は、絶対パスを指定する必要があります。$TERM_OPTS$ : 端末プログラムのコマンドライン引数。Unixでは、端末ウィンドウのタイトル、サイズ、色などを設定するために使用されます。
$SSH_EXEC$ : リモートコマンドの実行に使用するプログラム。Unixでは、通常は
ssh
です。Windowsでは、1つのオプションはplink.exe
です。プログラムがデフォルトのパスにない場合は、絶対パスを指定する必要があります。$FE_URL$ : リモートプロセスが外部からは見えない計算ノード上にある場合に使用するssh URL。このトークンは、コマンドを実行するために2つの
ssh
ホップが作成されるコマンドテンプレートを構築するために使用されます。$PV_HOST$ : 選択したプロセスが実行されているホスト名。
$PV_PID$ : 選択したプロセスのプロセスID。
Note:Windowsでは、Visual Studio (例: windbg.exe
)に加えて、MicrosoftのSDKに含まれるデバッグツールをインストールする必要があります。Windows用の ssh
program plink.exe
は、Unixシェルプログラムで使用されるANSIエスケープコードを解析しません。一般に、Windows固有のテンプレートには、ある程度の調整が必要です。
8.2.2. スタックトレースシグナルハンドラ
プロセスグループのコンテキストメニューには、バックトレースシグナルハンドラオプションがあります。有効にすると、SEGV、TERM、INT、ABORTなどのシグナルをキャッチし、プロセスが終了する前にスタックトレースを出力するシグナルハンドラがインストールされます。シグナルハンドラが有効になったら、明示的にシグナルを送信することでスタックトレースをトリガできます。スタックトレースシグナルハンドラを使用すると、クラッシュに関する情報を収集したり、計算ノードで ssh
を実行できない場合にデッドロック中にスタックトレースをトリガしたりできます。コンピュートノードへのユーザーの ssh
アクセスを制限するサイトでは、ログインノードから実行中のプロセスにシグナルを送る方法が提供されることがよくあります。この機能はPOSIXシグナルをサポートしているシステムでのみ利用可能であり、現在はGNU互換のコンパイラでのみスタックトレースを実装しています。
8.3. コンパイルとインストールに関する考慮事項
ParaView が実行されるシステムに、ジョブ全体のメモリ使用制限や非標準のプロセス単位のメモリ制限など、特殊なリソース制限が適用されている場合、システム管理者は次の環境変数を使用して、この情報を ParaView の実行中のインスタンスに提供する必要があります。たとえば、これらはバッチ・システム起動スクリプトで設定できます。
PV_HOST_MEMORY_LIMIT : ホスト全体のリソース制限をレポートします。
PV_PROC_MEMORY_LIMIT : プロセスごとのメモリー制限をレポートします。標準のUnixリソース制限では強制されません。
いくつかのデバッグ機能(スタックトレースのプリントなど)には、デバッグシンボルが必要です。これらの機能は、ParaView が CMAKE_BUILD_TYPE=Debug
でビルドされている場合、またはリリースビルドの場合は CMAKE_BUILD_TYPE=RelWithDebugSymbols
でビルドされている場合に最適です。