理想圖形視覺化工具

理想圖形視覺化工具 (IGV) 是一個開發人員工具,用於分析編譯圖形並調查效能問題。IGV 的開發目的是檢視和檢查中繼表示圖形,這是一種介於原始語言和機器碼之間的、與語言無關的中繼表示 (IR),由編譯器產生。對於任何基於 GraalVM 建構的語言實作者而言,這都至關重要。

IGV 工具的開發目的是讓 GraalVM 語言實作者能夠使用 Truffle 框架 來最佳化他們組裝的語言。作為開發工具,它不應安裝到生產環境中。

先決條件 #

開始使用 #

IGV 可免費使用,必須在使用者電腦上使用 mx 工具 建置,mx 是一個命令列工具,用於建置、測試、執行、更新程式碼,以及建置 GraalVM 的成品。

  1. mx 儲存庫複製到您的工作目錄
     git clone https://github.com/graalvm/mx.git
    
  2. 複製 Graal 儲存庫
     git clone https://github.com/oracle/graal.git
    
  3. mx 新增至 PATH 環境變數
     export PATH="/path/to/mx:$PATH"
    

    若要檢查安裝是否成功,請執行命令

     mx --version 
    
  4. 使用 mx 啟動 IGV
     mx -p graal/compiler igv
    

使用 Ruby 範例傾印圖形 #

使用一個嵌入了一些 Java 的主機 Ruby 應用程式,您現在將透過網路傾印編譯器圖形。

  1. 將下列程式碼片段儲存到名為 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(' ')
    
  2. 使用 Ruby 管理器/安裝程式,從 TruffleRuby 獨立版本安裝 Ruby。檢查其版本以確保您正在執行 TruffleRuby 發行版本
     ruby --version
    
  3. 執行應用程式,將程序連線到正在執行的 IGV
     ruby --vm.Djdk.graal.Dump=:1 --vm.Djdk.graal.PrintGraph=Network Test.rb
    

這會透過網路將編譯器圖形以 IGV 格式傾印到監聽 127.0.0.1:4445 的 IGV 程序。連線建立後,您就可以在「大綱」視圖中看到圖形。例如,找到 java.lang.String.char(int) 資料夾,然後按兩下開啟其「解析後」圖形。如果節點具有 sourceNodePosition 屬性,則「處理」視窗將嘗試顯示其位置和整個堆疊追蹤。

瀏覽圖形 #

開啟特定圖形後,您可以按名稱、ID 或 property=value 資料搜尋節點,並且會顯示所有相符的結果。這個工具的另一個絕佳功能是能夠導覽至原始客體語言原始程式碼。在圖形中選取一個節點,然後按一下「堆疊檢視」視窗中的「前往原始碼」按鈕。

IGV add source

也可以從內容功能表執行圖形導覽,方法是專注並按一下滑鼠右鍵選取特定的圖形節點。「擷取節點」選項會重新轉譯圖形,並且只顯示選取的節點及其鄰近節點。

IGV context menu

如果圖形大於螢幕,請操作主工具列中的「衛星視圖」按鈕來移動檢視區矩形。

IGV satellite view button

為了方便使用者偏好,可以透過編輯「色彩配置」篩選器來調整圖形色彩配置,預設會在左側邊欄中啟用。

檢視原始程式碼 #

原始程式碼檢視可以在手動和輔助模式下開啟。在圖形檢視中選取節點後,「處理」檢視會開啟。如果 IGV 知道目前框架的原始程式碼在哪裡,則會啟用綠色的「前往原始碼」箭頭。如果 IGV 不知道原始程式碼在哪裡,則該行會呈現灰色,並且會出現「放大鏡」按鈕。

View Source Code

按一下它並選取「在 Java 專案中尋找」以在對話方塊中找到正確的專案。IGV 會隱藏不包含所需原始檔的專案。「原始程式碼集合」用於顯示由「新增原始碼根目錄」一般動作新增的獨立根目錄。如果使用慣用方法 (例如,從 Java 專案) 找到原始程式碼,則稍後可以在「專案」索引標籤上管理其專案。該索引標籤最初會隱藏,但您可以使用「視窗」,然後使用「專案」來顯示已開啟專案的清單。

從嵌入式 Java 傾印圖形 #

若要將嵌入式 Java 應用程式的 GraalVM 編譯器圖形傾印到 IGV,您需要在基於 GraalVM 的程序中新增選項。根據所使用的語言/VM,您可能需要將選項加上 --vm 前置詞。請參閱特定語言的文件以瞭解詳細資訊。要新增的主要選項是 -Djdk.graal.Dump=:1。這會將圖形以 IGV 可讀格式傾印到本機檔案系統。若要將傾印直接透過網路傳送至 IGV,請在啟動 GraalVM 執行個體時新增 -Djdk.graal.PrintGraph=Network。您也可以選擇指定連接埠。然後,傾印會從 localhost 上執行的 GraalVM 傳送到 IGV。如果 IGV 未監聽 localhost,請在「選項」下檢查,然後可以勾選「理想圖形設定 | 接受來自網路的資料」。如果沒有 IGV 執行個體監聽 127.0.0.1,或無法連線到它,傾印將會重新導向到本機檔案系統。檔案系統位置在程序的目前工作目錄下的 graal_dumps/,並且可以使用 -Djdk.graal.DumpPath 選項變更。

如果使用較舊的 GraalVM 版本,您可能需要明確要求傾印包含 nodeSourcePosition 屬性。這可以透過新增 -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints 選項來完成。

相關文件 #

與我們聯繫