4

私が理解しているように、Linuxのパフォーマンスカウンターサブシステムは、perf recordコマンドを使用して、CPUおよびハードウェアカウンター(キャッシュミスなど)のサンプルベースのプロファイリングを実行します。

  1. のサンプリングレートをどのように指定しますperf recordか?マニュアルページからわかる最も近いものは、やや不可解なオプション「-c、-count =サンプリングするイベント期間」ですが、これが期間としての期間を指しているのか、レート期間の逆を指しているのかは明確ではありません。 (後者の場合、どのユニットが期待されるか)。

  2. モバイルAndroidデバイス上のアプリケーションでサンプリングするための「適切な」サンプリングレートとは何ですか?どのレートが低すぎて役に立たないのか、そしてどのレートが高すぎるのか?

4

1 に答える 1

6

最初に、でイベントのリストを取得する必要がありますperf list。私はAndroidの経験がないので、できれば、このリストの最も興味深い部分を示してください。

1)-cサンプル間のイベントのカウントが取得されます。(count番目のイベントのみがサンプリングされます。1はすべてをサンプリングし、100000は100000番目のイベントごとにサンプリングします)たとえば、cpuティック(TSCのようなsmth)のイベントがある場合、countはティック数です。サンプリングを1ミリ秒以内に実行するように設定します。ティックカウントを取得するには、次の式を使用しますCPU_Freq_in_MHz * 1000。これは、ミリ秒ごとにサンプルを取得するイベントの数です。たとえば、800MHzCPUおよびティックイベントの使用の場合-c 800000です。

他のイベントについては、どのくらいの頻度で行うかを見積もる必要があります。わからない場合は、ダニのカウント値から始めて、十分なサンプルが収集されているかどうかを確認できます。そうでない場合は、カウントを10回減らして、もう一度確認してください。ティックはCPUで最も頻繁に発生するイベントの1つであるため、ティックのカウントは安全です。

2)「-e」または「--event =」オプションで選択されたPMUによって、良好なレートは異なります。イベントがまれで、1秒あたり1000を超えない場合は、各イベントをサンプリングすることもできます。イベントがキャッシュミスのようなものである場合、適切な値はサンプリングされたコードに依存するため、いくつかのバリエーションを試す必要があります。サンプリングレートが低すぎると、サンプル数が少なくなり、結果の信頼性が低くなり、ノイズが多くなります。ただし、レートが高すぎると、すべてのPMUがトレースされるプログラムに影響を与える可能性があるため、結果にもノイズが発生します。平均して1秒あたり1000イベント以下を使用することをお勧めします。

于 2011-05-23T23:53:51.963 に答える