2017-06-27 3 views
2

私は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にこの質問に対する答えを見つけることができませんでした。

答えて

0

この問題に少し時間を費やした後、私はその答えがほぼ確実に「いいえ」と言うことができます。あなたが内の任意のネストされた関数に費やされた時間の排他的である関数の内部で費やした時間を計算したい場合は、あなたが必要となります。

  • 行うコール(すなわち、funcgraph_entriesを入れ子になっていますfuncgraph_entriesを押し、スタックを指定された期間を持たない)、エントリの対応するfuncgraph_exitコールを見るとポップする
  • ネストされたコールの持続時間を追跡して、ターゲットのfuncgraph_exit行にリストされている期間から合計期間を差し引くことができる方法

これはいくつかの方法で実行できますが、単純なクラス

class FunctionDuration: 
    def __init__(self, function_name): 
     name = function_name 
     nested_call_duration = 0 
     duration = 0 
関連する問題