Linux Perf GUIパフォーマンス分析ツール(ホットスポット)に完璧さを加えた方法

プロジェクトの1つで、新しい機能を開発することにより、Linux PerfGUIプロファイラーを改善しました。



顧客のニーズは、目的のプロファイラーの次の特性によって表すことができます。



  • 特定のアーキテクチャセットのパフォーマンス分析ツールがあります。
  • 分解されたコードの命令まで、パフォーマンスの詳細な分析を行うことができます。
  • そのようなアーキテクチャのセット(x86_64、ARMv7、ARMv8)の便利なGUIで、逆アセンブルされたコードの出力を表示および操作する手段を持つこと。


つまり、プロファイラーが必要でした。



  • クロスプラットフォームであること。
  • このセットからアーキテクチャの関数のディスアセンブラを生成できます-x86_64、ARMv7、ARMv8;
  • 結果を表示し、GUIを介してユーザーと対話し、使いやすさを維持します。


お客様のニーズを満たすために、新しいシステムコンポーネントを開発しました。これは、x86_64、ARMv7、ARMv8(出力を操作するための機能とGUI)のコード生成を備えたクロスプラットフォームディスアセンブラーです。



動作中のHotspotでのC ++コードの簡単なデモとそれが提供するパフォーマンス分析機能の例を見てみましょう。例:



cat demo.cpp:
#include <iostream>
int g (int arg) {
    return abs(rand()) * arg;
}

int f() {
    int i = 1;
    int res = 1 ;

    std::cout << abs(rand()) << std::endl;
    while (i < 1000000) {
        res += i * g(res);
        i++;
    }
    std::cout << res << std::endl;
    return res;
}

int main() {
    std::cout << f() << std::endl;
    return 0;
}


デモアプリケーションをコンパイル、ビルドします。



 g++ demo.cpp -o demo


プロファイラーを起動します。



./hotspot


ステップ1-データを収集してperf.dataファイルに書き込みます。



これは2つの方法で行うことができます-perfへの明示的な呼び出しを使用するコマンドラインから



record -o /home/demo/perf.data --call-graph dwarf ./demo


または、[ホットスポット]メニューの[ファイル]-> [データの記録]を使用します。



デモでは、サイクルタイプのイベントを収集しますが、他のイベントタイプまたは一連のイベントタイプ(キャッシュミス、命令、ブランチミスなど)を設定できます。







[記録の開始]をクリックし、[結果の表示]が点灯するのを待ち







ます。パフォーマンス分析の世界に飛び込みます。



ここでは、デモのランタイムの消費者の間で要約情報とチャンピオンを見つけます。







双方向の呼び出しのチェーン-呼び出されたメソッドから呼び出しメソッド(ボトムアップ)へ、およびその逆(ボトムダウン)と時間(重み)。















フレームグラフとパフォーマンスに関するデータ、

重要な関数/メソッドの実行時間



関心のある関数の詳細情報と、その中のイベントの分布(分解されたコードの指示まで)を取得するには、コンテキストメニューの[分解]項目を押します。好きな機能を右クリックすると開きます。







これで、この機能に関するすべてがわかりました。







コールスタックをナビゲートできます。青色で強調表示された呼び出し命令をダブルクリックします。そして私たちの前には、呼び出された関数g(int)のディスアセンブラーがあります。 CPUを消費する命令には、ここに競合他社はありません。







Ctrl + B、Ctrl + D-コマンドのマシンコードもあり、ディスアセンブラはobjdumpを使用して生成されました。前のケースでは、perfannotateを呼び出すことによって生成されたコードが示されていました。







[戻る]ボタンが点灯しているので、コールスタックに沿って両方向に移動できます。



アドレス1236の命令に移動し、アドレス124fの命令をダブルクリックします。また、アドレス1236の命令に戻る遷移が可能です







。Ctrl+ B、Ctrl + Iは、Intel Assembler構文に切り替わります。







たとえば、%rspレジスタを使用して、入力されたパターンでテキストを検索する機会が得られます。







そして...場所を離れることなく、ARMに移動します。 ..。これを行うには、基本的に2つのエンティティが必要です。ARMでコンパイルされたユーザーアプリケーションの実行可能ファイルと、そこに記録されたそのためのperf.dataファイルです。私たちのデモでは、これらはARMv8上に構築されたcoremark.1.exeとperf.1.fp.cycles.dataです。それらを/ home / demo / armv8 /に配置し、perf.dataをロードします-











したがって、お客様が設定したタスクを実行しただけでなく、それらを上回りました。特に、ディスアセンブラーの指示に従ってイベントの分布を計算および表示することで、コード内の文字列にリンクできる指示まで詳細な分析を行うことができます。プログラムにはGUIがあります。ユーザーフレンドリーなインターフェイスです。クロスプロファイリング設定で。



Linux perf gui Hotspotは、パートナーとの合意により、GNU General PublicLicenseの条件の下で配布されます。つまり、関心のあるすべてのユーザーに、このプロファイラープログラムを無料でコピー、変更、および配布する権利を付与します。



ダウンロードとインストールの手順とともに、GitHubでホストされています。誰もがそれを知り、感謝することができます。



Linux Perf GUI(Hotspot)をガイドに連れて行って、アプリケーションとその作業の特殊性をエキサイティングな旅に出して、アセンブリチームのエリートな雰囲気に飛び込み、さまざまなアーキテクチャを訪問してください。



All Articles