当涉及多个演员/进程时,如何计算灵丹妙药中的CPU时间?

时间:2017-09-15 20:59:30

标签: erlang elixir

假设我有一个函数可以通过生成多个进程来完成一些工作。我想比较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时间/实时比率。

1 个答案:

答案 0 :(得分:3)

如果您只是尝试分析代码而不是实现自己的分析框架,我建议使用现有的工具,如:

  • fprof,它会为您提供有关在功能上花费的时间(真实和自己的)的信息
  • percept,它将为您提供有关系统软件中任何特定时间工作的信息以及
  • 的信息
  • xprof旨在帮助您找到对您的函数的哪些调用将导致它花费更多时间(触发低效的代码分支)。

他们利用erlang:trace来确定正在执行哪个函数以及erlang:system_profilerunnable_procs一起确定哪些函数正在运行。您可以启动一个功能,点击接收或重新安排重新安排,等待而不做任何实际工作。将这两者结合起来可能很复杂,我建议在尝试将自己的工具粘合在一起之前使用已有的工具。

如果您正在寻找更多视觉效果,您还可以查看erlgrindeflame等工具。