摘要: 本文介绍了Erlang运行时ERTS中提供的各种原子操作,介绍了由于处理器乱序执行给多线程程序同步带来的问题和解决方法,分析了ERTS将原子操作和内存屏障结合的设计,最后简单地剖析了相关的API代码设计。 阅读全文
posted @ 2012-11-02 22:24 siyao 阅读(4459) 评论(0) 推荐(1) 编辑
摘要: 本文从源代码出发简单地分析从在控制台输入erl按下回车到init完成启动步骤的过程。 阅读全文
posted @ 2012-08-15 23:55 siyao 阅读(11276) 评论(4) 推荐(4) 编辑
摘要: Erlang R15的一项新特性是可以通过DTrace或Systemtap跟踪虚拟机中的各种行为(参见 http://blog.yufeng.info/archives/2198)。通过这些跟踪信息可以从旁观者的角度窥探到Erlang的工作原理。编写了一个小程序,把跟踪信息画出来,如下图所示。这个跟踪的跟踪对象是一个名为random的benchmark程序。random创建出N个进程,每个进程随机生成100000个整数,然后对这些整数进行排序,再将排序后的列表分为两半,将第二半的第一个数,即整个整数列表的中位数,通过消息发送给主进程。很明显这是一个并行度为N的计算密集型任务,每一个并行任务之间 阅读全文
posted @ 2012-06-12 22:46 siyao 阅读(1583) 评论(0) 推荐(1) 编辑
摘要: 介绍Intel Nehalem架构处理器内建了内存控制器,处理器之间通过QPI互联,是典型的NUMA系统。NUMA系统的特点是每一个节点都有自己的内存控制器,尽管每个节点都能访问所有节点上的内存,但是代价不一样,访问本地内存的速度比访问远程节点的速度要快。使用Intel Nehalem架构的处理器时,如果一个节点需要访问另一个节点的内存,那么数据需要通过CPU的QPI通道访问,因此会有一些延时。下面通过实验来测试内存带宽、QPI带宽以及访问远程节点和本地节点内存的性能差异。实验平台硬件:双Intel® Xeon® Processor E5606(8M Cache, 2.13 阅读全文
posted @ 2012-06-12 21:12 siyao 阅读(3365) 评论(2) 推荐(0) 编辑