問題タブ [perf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - perf record -c オプションとオーバーフロー イベントの関係は?
perf record を使用して、15 個のハードウェア イベントとトレース ポイント イベントを記録しようとしています。
次のことを理解したいです。
イベントベースのサンプリング:ドキュメントから、そのイベントに対応する64ビットカウンターがオーバーフローするたびにperfレコードがサンプリングされることを理解しました。そうですか?このようなイベントが ~ 2^64 回発生すると、カウンターがオーバーフローしますか?
PMU/カウンターの数よりも多くのイベントを測定する場合、多重化を使用するには特定のスイッチを渡す必要がありますか? 多重化が存在する場合、オーバーフロー イベントはどのように動作しますか。
スイッチ「-c」の目的/用途は何ですか? このスイッチを使用して、n イベントごとにカウンターをオーバーフローさせることはできますか?
助けてください。
c++ - C++ アプリのウォール クロックのプロファイリングに使用するツールは何ですか?
マルチスレッド C++ アプリのプロファイルを作成し、そのボトルネックを見つける必要があります。問題は、掛け時計のプロファイルを表示する必要があることです。と を使用oprofile
しperf
ました。誰も私にそのような情報を提供することはできません。
私は使用しperf record -g -e sched:sched_stat_sleep <cmd>
ましたperf record
が、SIGFPE例外で落ちます。これは私を怒らせます。
Valgrind
fanotify_mark
このツールに実装されていないsyscallを使用しているため、私には適していません。
Googleperftools
が壁掛け時計のプロファイリングを実行できるかどうかはわかりません。Google のドキュメントには情報がありません。
誰でも提案できますか?ありがとうございました。
unix - 2 つのコマンドが同時に関係している場合、出力を 2 つの異なるファイルにリダイレクトする方法は?
ツールを使用perf
して sort utility を分析しています。私は次のコマンドを与えました。
/dev/null
sort の出力と perf の出力を perf_data ファイルにリダイレクトしたいと考えています。
これどうやってするの ?
android - システムコール __NR_perf_event_open が Android で動作しないようです
Android アプリで __NR_perf_event_open の syscall を使用したいと考えています。
コードは Linux では正常に動作しますが、Android では動作しません。
ただし、fd は常に値 -1 を返します。「errno.h」を使用すると、「EBADF:不正なファイル記述子」というエラー情報が表示されました。
cpu - 異なる NUMA ノードでのパフォーマンス ツールの結果の解釈
perf ツールを使用して、プログラムの興味深い動作を説明したいと思います。
いくつかの背景情報
私のマシンには 4 つの NUMA ノードがあり、メイン アプリケーションはマシン上で実行されています。cpusets を使用してマシンを分割し、アプリケーションに 3 つのノード、システムに 1 つのノードを割り当てています。同じマシンで単体テスト (ログの改善のため) を実行しているときに、perf ツールを使用して調査しようとしている予期しない動作が発生します。
予期しない動作は、アプリケーションが実行されている NUMA ノード (ノード 2 としましょう) で、単体テストでより良い時間を取得することです。ノード 3)。node2のCPU(スピンロックを行わないCPU)で実行しているように見えますが、別のnumaで実行するよりも良い結果が得られます。
ログシステムを改善しようとしているので、テストはアプリケーションによっても行われる作業を行っており、後でディスクにダンプするためにいくつかのログメッセージをキューに書き込みます (別のスレッド)。キューへの競合は、スピンロック (CAS) によって制御されます。unitest は、2 つのループを持つ 1 つのライター スレッドです。100 回、1000 個のログがキューに書き込まれ、RDTSC (私の選択) を使用して各内部ループが測定され、統計が出力されます。キューは十分に大きく、標準偏差を取得し、メモリ操作は最小限に抑えられます (memcpy なし)。リーダーは別のスレッドでディスクにダンプしています。
アプリケーションを停止して、もう一度テストを実行してみました。この場合、テストを実行するために選択した NUMA ノードに関係なく、node3(slow) で実行した場合と同様の結果が得られます。つまり、同じ numa でテストを実行すると、実行中のアプリケーションがテストを高速化しています。アプリケーションが実行されるノード。私にとって非常に直感的ではありません。
次の perf ツール コマンドを使用してデータを取得する
コマンドを使用して分析する
私はいくつかの違いを含むものを抽出しました。 sched-、LLC-、branch-、TLB を疑うべきかどうかはわかりません。相対的な違いが私が見ている動作を説明するかどうかの手がかりがないからです。
これを調査するためのより良い方法の提案はありますか?
linux - コマンド「perf report」に何も表示されないのはなぜですか?
「perf record ./exe」を使用すると、「perf.data」というファイルが作成されます。しかし、「パフォーマンス レポート」を使用してデータを確認すると、何も表示されないのはなぜですか? 私の perf バージョンは「0.0.2.PERF」で、Open suse Linux Enterprise Server 11 (x86_64) を使用しています。
Ubuntuで同じことをするとうまくいきます.Open suseとUbuntuの間に違いはありますか?
linux - perfを使用してmutilprocessorコンピューターで各CPUメッセージを取得するにはどうすればよいですか?
私の仕事は、マルチプロセッサ コンピューター (例: 4 コア) の各ノードを を使用して測定することperf
です。cache-misses、LLC-loads、LLC-load-misses、LLC-stores、LLC-store-misses などを含め、合計統計データのみを取得します。
それらを区別する方法はありますか?
linux-kernel - Executing block of code without context switch
Is there any way to execute a block of code in C without suffering a Context Switch?
I have modified perf stat to sample the counters periodically. While this works, it ends up giving me some bad data points such as 0 cycles x instructions.
I believe that the reason for this happening is because of context switching.
Since my code always pulls cycle counter value before instruction counter, if a context switch were to happen after pulling the cycle counter value, and if the process I was profiling executed for some portion of the scheduling quanta, then when I finally pulled the instruction counter value, it would be 'one ahead' of the cycle counter value that I already pulled.
Is there any way to execute the code-block without allowing a context switch to take place?
c++ - 実行時にC++ソフトウェアのクラスを調査する
私はC++ベースのプログラムを起動して実行していますが、私の問題は次のことを知りたいということです。
- 最もよく呼ばれるtop10、top5、topXメソッドは何ですか
- 計算に最も重いクラスは何ですか、または最大クロックサイクルを必要とするスレッドは何ですか
Linuxで、、または同様のvalgrind
ツールを使用してこれを行うことは可能ですか?perf
このアプリケーションが多くのサードパーティライブラリを使用していることはありませんが、変更および改善したいのはアプリ自体のコアであるため、これらのライブラリには興味がありません。可能なすべてのメソッドのリストを実装されたものに減らすことができます。 「実際のアプリケーション」によってのみ。
一般に、分岐とパフォーマンスの低下における最大の障害の原因となるクラスまたはメソッドを検出する方法は?
valgrind - Valgrind と Linux のパフォーマンスの相関関係
perf
イベントinstructions
、LLC-load-misses
、を選択したとしますLLC-store-misses
。さらに、入力をprog
変化させてプログラムをテストするとします。valgrind
同じ入力と同じカウンターに対して「同じ」機能結果が得られるはずですか? つまり、 の 1 つの値perf
が上昇した場合、 の 1 つvalgrind
は常に同じようにする必要がありますか? valgrind
コードのプロファイリング中に注意すべきシミュレーションであることの影響はありますか?
編集:ところで、人々が私自身を実験していないことで私をグリルする前に、私は(ちょっと)持っていると言わなければなりperf
ません. パッチがありますが、カーネルを再コンパイルする気がしません...