如何计算多个参与者/进程涉及的elixir中的CPU时间?
问题描述:
假设我有一个通过产生多个进程来完成一些工作的函数。我想比较CPU时间与此功能实时性的比较。如何计算多个参与者/进程涉及的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时间/实时比率。
答
如果你只是想分析代码,而不是实现自己的分析框架,我会建议使用现有工具,如:
-
fprof
,这将给你有关的功能所花费的时间(实际和自己的信息) -
percept
将为您提供有关哪些进程在你的系统在任何给定的时间洁具工作,对什么样的信息 -
xprof
这是设计来帮助你找到它调用你的函数将导致它需要更多的时间(触发低效的代码分支)。
他们利用两个erlang:trace
的找出正在执行其功能多长时间和erlang:system_profile
与runnable_procs
以确定哪些进程正在运行。你可能会开始一个功能,打一个接收或被抢先重新安排,然后等待而不做任何实际的工作。将这两者结合起来可能会很复杂,我建议在尝试将自己的胶粘在一起之前使用已有的工具。