6

したがって、Intelプロセッサ上のLinuxの場合と同様に、アクセスするハードウェアパフォーマンスカウンタが大量にあります。以前と同様に、perfmon2と呼ばれるユーザースペースソフトウェアを使用して、キャッシュミス率、何らかの理由(L1キャッシュミスなど)によるCPUストールサイクルなどの値を取得できました。

私の質問は、Androidにそれらのものがありますか?ARMに基づいているので、x86ほど強力なパフォーマンスモニターカウンターのサポートはないと思いますよね?

4

3 に答える 3

6

ARM11およびCortex-A/Rには、ハードウェアパフォーマンスカウンターがあります。このページの公式ARMWebサイトで確認できます:http: //infocenter.arm.com/help/index.jsp?topic = / com.arm.doc.faqs / ka4237.html

AndroidもLinux上で実行されているため、「PerfEvents」サブシステムを介してユーザースペースソフトウェアを介してパフォーマンスカウンターにアクセスできます。ただし、「perf_event.h」を含むネイティブCコードを記述し、AndroidNDKを使用してビルドする必要があります。コードを書き始める前に、次のプロジェクトを確認することをお勧めします:platform / external / linux-tools-perf(https://android.googlesource.com/platform/external/linux-tools-perf/)。まさにあなたが探しているものになります。Javaコードから直接これを行うことを可能にする代替案については知りません。

于 2013-03-10T22:05:22.130 に答える
6

ベニーの答えに加えて、私は以下を追加します:

  1. linux-tools-perfプロジェクトはAOSPと統合されています(私は4.2を使用しています)。$ AOSP / external/linux-tools-perfの下にあります。./linux-tools-perf/Documentationには、すべてを実行する方法に関する多くの情報が含まれています。perfツールは、AOSPの一部として$ PRODUCT_OUT / system / bin / perfに組み込まれていますが、パッケージ化されていません。明示的にターゲットにプッシュする必要があります。

  2. Android(Linux)カーネルをチェックして、PM:PERF_EVENTSをサポートしていることを確認します。Googleで.configを取得する方法ですが、最も簡単なのは「extract-ikconfigzImage」を実行することです。

  3. 結果を確認するには、ターゲットへのルートアクセス権を持ってから、「。/perfstat--testprog1」のようなものを実行する必要があります。さまざまなPMカウンターを記録/取得するコマンドには、多くの引数があります。

  4. ほとんどのARM実装には、複数のコアと多数のパイプラインがあることを忘れないでください。Cortex-A9の実行が順不同です。そのため、数字は少し気紛れになる可能性があります-ほとんど意味がない場合もあります。

  5. ARM PMCCNTRレジスタ(ARM PMサイクルカウンタ)を使用して、コードのパフォーマンスをテストすることがあります。PMUSERENR.ENおよびPMINTENCLR.CはPL1+レベルで設定する必要があります。そうすれば、PMCCNTRをPL0レベルで管理できます。これが何を意味するかについてはARMARMを、使用例についてはperfサブシステムを参照してください。

注:すべてのシェル変数は$ AOSP / build/envsetup.shで設定されます

于 2013-11-09T13:17:08.643 に答える
1

ARM®HWCPipeExporterを試してみることができると思います。

ARM®HWCPipeExporterは、JavaおよびC ++で記述されたPrometheusエクスポーターであり、ARM®ハードウェアコンポーネントで実行されているAndroidデバイスからメトリックを取得し、Prometheus監視システムにエクスポートします。

免責事項:私はARMHWCPipeExporterの作成者です。

于 2021-09-26T07:10:23.970 に答える