Ideal Graph Visualizer

Ideal Graph Visualizer (IGV)は、ユーザーがコンパイル・グラフを分析し、パフォーマンスの問題を調査できる開発者ツールです。このツールは、Oracle GraalVM Enterprise Editionに基づいてビルドするすべての言語実装者にとって不可欠なツールです。これは、Oracle Technology Networkで個別のダウンロードとして入手でき、Oracle Technology Networkの開発者ライセンスに同意する必要があります。

IGVは、中間表現グラフ(ソース言語とコンパイラによって生成されたマシン・コードの間の言語に依存しない中間表現(IR))を表示および検査するために開発されました。後述の「グラフのダンプ」を参照してください。

  1. ダウンロードしたパッケージを解凍し、binディレクトリを入力します:
    cd idealgraphvisualizer/bin
    
  2. ツールを起動します:
    idealgraphvisualizer
    
  3. 次のコード・スニペットをTest.rbとして保存します:
    require 'json'
    obj = {
      time: Time.now,
      msg: 'Hello World',
      payload: (1..10).to_a
    }
    encoded = JSON.dump(obj)
    js_obj = Polyglot.eval('js', 'JSON.parse').call(encoded)
    puts js_obj[:time]
    puts js_obj[:msg]
    puts js_obj[:payload].join(' ')
    
  4. 別のコンソール・ウィンドウから、rubyランタイムがGraalVM Enterpriseで使用可能であることを確認し、Test.rbスクリプトを実行中のIGVに接続します:
    gu list
    ruby --jvm --polyglot --vm.Dgraal.Dump=:1 --vm.Dgraal.PrintGraph=Network Test.rb
    

    これにより、GraalVM Enterpriseでは、IGV形式のコンパイラ・グラフを、127.0.0.1:4445でリスニングしているIGVプロセスにネットワーク経由でダンプします。接続が確立されると、「アウトライン」ウィンドウにグラフが表示されます。たとえば、java.lang.String.char(int)フォルダを検索し、ダブルクリックしてその解析後グラフを開きます。ノードにsourceNodePositionプロパティがある場合、「処理中」ウィンドウでは、その場所とスタック・トレース全体の表示が試行されます。

グラフの参照

特定のグラフを開くと、名前、IDまたはproperty=valueデータでノードを検索でき、一致するすべての結果が表示されます。このツールのもう1つの優れた機能は、元のゲスト言語のソース・コードに移動できることです。グラフのノードを選択して、スタック・ビュー・ウィンドウの「ソースに移動」ボタンを押します。

グラフ・ナビゲーションは、コンテキスト・メニューからも使用でき、特定のグラフ・ノードをフォーカスして右クリックすることで有効になります。ノードの抽出オプションでは、グラフが再度レンダリングされ、選択したノードとその近隣ノードのみが表示されます。

グラフが画面より大きい場合は、メイン・ツールバーの「衛星」ビュー・ボタンを使用して操作し、ビューポートの矩形を移動します。

着色フィルタ(デフォルトでは左側のサイドバーで有効になっています)を編集することで、ユーザー・プリファレンスに応じてグラフの色スキームを調整できます。

ソース・コードの表示

ソース・コード・ビューは、手動モードおよび支援モードで開くことができます。グラフ・ビューでノードを選択すると、「処理中」ビューが開きます。IGVで現在のフレームのソース・コードの場所が認識されている場合は、緑色の「ソースに移動」矢印が有効になります。IGVでソースの場所が認識されていない場合、線はグレー表示され、虫眼鏡ボタンが表示されます。

これを押し、Javaプロジェクト内で検索を選択して、ダイアログ内の正しいプロジェクトを検索します。IGVでは、必要なソース・ファイルが含まれていないプロジェクトは非表示になります。ソース・コレクションには、ソースのルートを追加する一般アクションによって追加された、スタンドアロン・ルートが表示されます。ソースが(Javaプロジェクトから)推奨される方法を使用して配置されると、そのプロジェクトは、後で「プロジェクト」タブで管理できます。これは最初は非表示になっていますが、「ウィンドウ」→「プロジェクト」を使用して、開いているプロジェクトのリストを表示できます。

グラフのダンプ

IGVツールは、GraalVM Enterprise言語実装者が、言語実装フレームワークでアセンブルされた言語を最適化できるようにするために開発されました。開発ツールであるため、本番環境にはインストールしないでください。

GraalVMコンパイラ・グラフを埋込みJavaアプリケーションからIGVにダンプするには、GraalVMベースのプロセスにオプションを追加する必要があります。使用している言語またはVMによっては、オプションの前に接頭辞--vmを付けることが必要な場合があります。詳細は、特定の言語のドキュメントを参照してください。追加する主なオプションは、-Dgraal.Dump=:1です。これにより、IGVで読取り可能な形式のグラフが、ローカル・ファイル・システムにダンプされます。ネットワーク経由でダンプをIGVに直接送信するには、GraalVMインスタンスの起動時に-Dgraal.PrintGraph=Networkを追加します。オプションで、ポートを指定できます。次に、localhostで実行中のGraalVMからIGVにダンプが送信されます。IGVがlocalhostでリスニングしない場合は、「オプション」を選択してからIdeal Graph設定またはネットワークからのデータを受け入れるを選択できます。127.0.0.1でリスニングしているIGVインスタンスがない場合、またはこのようなインスタンスに接続できない場合、ダンプはローカル・ファイル・システムにリダイレクトされます。ファイル・システムの場所は、プロセスの現在の作業ディレクトリの下のgraal_dumps/で、-Dgraal.DumpPathオプションを使用して変更できます。

古いGraalVM Enterpriseが使用されている場合は、ダンプにnodeSourcePositionプロパティを含めるよう明示的に要求することが必要になる可能性があります。これを行うには、-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepointsオプションを追加します。