Erlang VM:调度程序运行时信息

时间:2011-11-25 17:40:38

标签: erlang profiling scheduler

我正在寻找一种方法来检索有关在程序执行期间如何完成调度的信息:哪些进程在哪个调度程序中,如果它们发生更改,哪个进程在每个调度程序处于活动状态,每个调度程序是否在一个内核中运行等...

任何想法或相关文档/文章/任何内容?

2 个答案:

答案 0 :(得分:5)

我建议您查看以下跟踪/分析选项:

erlang:system_profile/2

它具有监视调度程序和运行队列(runnable_procs)活动的选项。 调度程序选项将报告

{profile, scheduler, Id, State, NoScheds, Ts}

州将告诉您它是否有效。 NoScheds报告当前活动的调度程序的数量(如果我没记错的话)。

runnable_procs选项将通知您是否将进程放入特定调度程序的运行队列或从中删除。

答案 1 :(得分:4)

如果您的系统支持DTrace,则可以使用正在开发的erlang dtrace探针来确切了解进程调度事件的发生时间。

例如,我写了一个simple one-liner,它显示了在向进程发送消息和调度接收进程之间传递的纳秒数(跨核时钟差异为±几纳秒)和过程等)。