コード実行の 10% がシステム スペースであることに気付きました。ただし、どのシステムが呼び出すかはわかりません。ただし、ファイルまたはタイムスタンプを実行する必要があると思います。
どのシステムコールが原因であるかを特定するツールはありますか? また、呼び出し(および呼び出し先)の頻度(および場所)を知りたいです。
私はAS3を使用しています
どうも
コード実行の 10% がシステム スペースであることに気付きました。ただし、どのシステムが呼び出すかはわかりません。ただし、ファイルまたはタイムスタンプを実行する必要があると思います。
どのシステムコールが原因であるかを特定するツールはありますか? また、呼び出し(および呼び出し先)の頻度(および場所)を知りたいです。
私はAS3を使用しています
どうも
strace
とはどちらも、truss
どのシステム コールに時間がかかっているかを確認するのに役立ちます。次の 2 つの便利なオプションがstrace
あります。
-T
各システムコールに費やされた時間を表示するには、-c
システムコール数、呼び出し数、エラー数を表にまとめます。ただし、2 つのオプションは相互に排他的です。
カーネルをより詳細にプロファイリングできるようにするために、完全なシステム プロファイリング ツールが必要になる場合があります。 プラットフォームにDTraceがある場合は、おそらく DTrace が最適です。
プラットフォーム別のオプションは次のとおりです。
DTrace は、pid プロバイダを使用して C/C++ コードのプロファイリングを支援することもできます。たとえば、こちらを参照してください。
Linux を使用している場合は、strace を参照してください。
他の Unix を使用している場合は、truss が利用可能かどうかを確認してください。
10%の場合は、30サンプルに対してこの方法を試してください。正確な呼び出しは、最大3つのサンプル、おそらく2つ、おそらく4つで表示されます。
あなたのシステムにそれがあれば、trussコマンドはあなたが望むことをするはずです。
Linux では、 oprofileプロファイラーを試すことができます。libc とカーネルで使用できるデバッグ シンボルがあることを確認してください (多くのディストリビューションでは、これらは別のパッケージに含まれています)。単一のプロセスだけでなく、システム全体をプロファイルします。そこから貴重な情報を得た。
Solaris では、dtrace を使用できます。