私はtrace-cmdを使ってロードジェネレータをトレースしています。ここに私のトレース-cmdのレポートからの出力の抜粋です:入れ子関数の時間を除いたtrace-cmdで関数の持続時間を出力する方法はありますか?
loadgen-2682 [003] 105.979473: funcgraph_entry: | select_task_rq_fair() {
loadgen-2682 [003] 105.979473: funcgraph_entry: | select_idle_sibling() {
loadgen-2682 [003] 105.979473: funcgraph_entry: 0.071 us | idle_cpu();
loadgen-2682 [003] 105.979474: funcgraph_entry: 0.111 us | idle_cpu();
loadgen-2682 [003] 105.979474: funcgraph_entry: 0.056 us | idle_cpu();
loadgen-2682 [003] 105.979475: funcgraph_entry: 0.056 us | idle_cpu();
loadgen-2682 [003] 105.979475: funcgraph_exit: 2.324 us | }
loadgen-2682 [003] 105.979476: funcgraph_exit: 2.940 us | }
loadgen-2682 [003] 105.979476: funcgraph_entry: | set_task_cpu() {
loadgen-2682 [003] 105.979476: funcgraph_entry: | migrate_task_rq_fair() {
loadgen-2682 [003] 105.979476: funcgraph_entry: 0.080 us | remove_entity_load_avg();
loadgen-2682 [003] 105.979477: funcgraph_exit: 0.537 us | }
loadgen-2682 [003] 105.979477: funcgraph_entry: 0.042 us | set_task_rq_fair();
loadgen-2682 [003] 105.979478: funcgraph_exit: 1.463 us | }
彼らは、ネストされた関数呼び出しに費やした時間が含まれていますように、すべての機能の継続時間が怪しい見えます。たとえば、select_idle_sibling()
の所要時間は2.324 usで、idle_cpu()
コールの中で使用された.294 us(合計)が含まれています。同様に、私はselect_task_rq_fair()
がselect_idle_sibling()
の期間を含むと信じています。
私が尋ねるのは、これをオフにする方法がtrace-cmd内にある場合です。つまり、select_task_rq_fair()
は、呼び出した関数を除いてその持続時間を表示します。すなわちselect_task_rq_fair()
は、0.616μs(2.940μs〜2.324μs)の持続時間を示す。私はthe manpageにこの質問に対する答えを見つけることができませんでした。