Erlang调度器一窥

Erlang R15的一项新特性是可以通过DTrace或Systemtap跟踪虚拟机中的各种行为(参见 http://blog.yufeng.info/archives/2198)。通过这些跟踪信息可以从旁观者的角度窥探到Erlang的工作原理。

编写了一个小程序,把跟踪信息画出来,如下图所示。这个跟踪的跟踪对象是一个名为random的benchmark程序。random创建出N个进程,每个进程随机生成100000个整数,然后对这些整数进行排序,再将排序后的列表分为两半,将第二半的第一个数,即整个整数列表的中位数,通过消息发送给主进程。很明显这是一个并行度为N的计算密集型任务,每一个并行任务之间没有任何依赖性。这个跟踪在一个8核机器上创建了9个计算进程。如图所示,横轴上的数字表示自程序开始运行的时间,纵轴的数字表示处理器内核的编号,除了最后一行之外每一行表示一个处理器核心上的进程运行情况。

从图中可以看出,处理器1上创建出了9个进程,然后有7个进程分别被调度器迁移到了其他7个处理器上。剩下的两个进程在处理器1上round robin调度。处理器7执行完了唯一的进程之后,从处理器1上窃取了一个进程。处理器1继续执行剩下的那个进程。处理器7上执行的这个进程之后又被迁移到了处理器0上。这个图缩小了很多倍适合一个屏幕显示,其实每一个处理器上的进程执行被切断为很多时间片(也就是reduction片),只不过缩小了之后看不出来时间片之间的调度器开销了。放大的片段如下图所示:

从中可以看出在处理器1上两个进程的交替执行。色块和色块之间的白色间隙就是调度的开销。

转载于:https://www.cnblogs.com/zhengsyao/archive/2012/06/12/2546862.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值