2017-09-15 7 views
2

私は、複数のプロセスを産み出すことによっていくつかの仕事をする機能を持っているとしましょう。私は、CPU時間とこの機能によって取られたリアルタイムを比較したい。エリクサーで複数のアクター/プロセスが関与している場合のCPU時間の計算方法は?

def test do 

    prev_real = System.monotonic_time(:millisecond) 

    # Code to complete some task 
    # Spawn different processes & give each process some task 
    # Receive result 
    # Finish task 

    current_real = System.monotonic_time(:millisecond) 
    diff_real = current_real - prev_real 

    IO.puts "Real time " <> to_string(diff_real) 

    IO.puts "CPU time ?????" 

end 

特定の関数で必要なCPU時間を計算するにはどうすればよいですか? CPU時間/リアルタイム比率の計算に興味があります。

答えて

3

あなたはちょうど私がように、既存のツールを使用することをお勧めしますあなたのコードをプロファイリングするのではなく、独自のプロファイリングのフレームワークを実装しようとしている場合:あなたの関数で費やされた時間(現実と自分についての情報を提供します

  • fprofあなたの任意の時点で、それはより多くの時間がかかるようになりますあなたの関数に呼び出す見つけるのに役立つデザインが何であるかを
  • xprofに取り組んであなたのシステムウェアで処理するかについての情報を提供します)
  • percept (コードの非効率な分岐を引き起こす)。

彼らは、現在実行しているプロセスを決定するためにrunnable_procsで実行し、どのくらいの時間とerlang:system_profileのためにされている機能を把握するために、両方のerlang:traceを利用します。ファンクションを開始したり、受信をヒットしたり、事前にスケジュールを変更したりして、実際の作業をせずに待機することもできます。これらの2つを組み合わせることは複雑になる可能性があります。あなた自身で接着剤を試す前に、既存のツールを使用することをお勧めします。

あなたの電話のより視覚的な表現を探しているなら、erlgrindeflameのようなツールを見ることもできます。

関連する問題