2

コード実行の 10% がシステム スペースであることに気付きました。ただし、どのシステムが呼び出すかはわかりません。ただし、ファイルまたはタイムスタンプを実行する必要があると思います。

どのシステムコールが原因であるかを特定するツールはありますか? また、呼び出し(および呼び出し先)の頻度(および場所)を知りたいです。

私はAS3を使用しています

どうも

4

6 に答える 6

6

straceとはどちらも、trussどのシステム コールに時間がかかっているかを確認するのに役立ちます。次の 2 つの便利なオプションがstraceあります。

  1. -T各システムコールに費やされた時間を表示するには、
  2. -cシステムコール数、呼び出し数、エラー数を表にまとめます。

ただし、2 つのオプションは相互に排他的です。

カーネルをより詳細にプロファイリングできるようにするために、完全なシステム プロファイリング ツールが必要になる場合があります。 プラットフォームにDTraceがある場合は、おそらく DTrace が最適です。

プラットフォーム別のオプションは次のとおりです。

DTrace は、pid プロバイダを使用して C/C++ コードのプロファイリングを支援することもできます。たとえば、こちらを参照してください。

于 2009-10-19T14:43:49.820 に答える
3

Linux を使用している場合は、strace を参照してください。

他の Unix を使用している場合は、truss が利用可能かどうかを確認してください。

于 2009-10-19T14:29:46.180 に答える
1

10%の場合は、30サンプルに対してこの方法を試してください。正確な呼び出しは、最大3つのサンプル、おそらく2つ、おそらく4つで表示されます。

于 2009-10-19T21:49:37.487 に答える
1

あなたのシステムにそれがあれば、trussコマンドはあなたが望むことをするはずです。

于 2009-10-19T14:30:47.987 に答える
0

Linux では、 oprofileプロファイラーを試すことができます。libc とカーネルで使用できるデバッグ シンボルがあることを確認してください (多くのディストリビューションでは、これらは別のパッケージに含まれています)。単一のプロセスだけでなく、システム全体をプロファイルします。そこから貴重な情報を得た。

于 2009-10-19T16:05:13.387 に答える
0

Solaris では、dtrace を使用できます。

于 2009-11-29T01:45:57.020 に答える