Archive

Posts Tagged ‘R15’

Erlang R15的内存delayed dealloc特性对消息密集型程序的影响

November 21st, 2011 1 comment

在新的NUMA体系结构下,每个CPU都有自己的本地内存,如果要访问其他CPU的内存,那算remote了,要走CPU之间的QPI通道,通常这样速度会有40%的下降。
那么对于多线程的程序来讲,这个硬件的变化对软件也有很大的影响。在多线程程序里面,通常一个线程会为一个对象分配内存,然后把这个对象传递到不同的线程去使用,最后由其他线程释放内存。而这二个线程可能在不同的CPU上运行,这个场景很普遍,比如说Erlang的消息机制。如果谁创建谁释放对象,提高内存倒腾的效率,那么对于消息密集型程序会有很多帮助。

R15的最大的运行期优化见: 这里
这个特性也就是之前声称的delayed dealloc特性
对照下OTP团队之前的规划:

目前规划里面的1,2,3,4在R15里面都已经实现了。

Optimize memory allocation

A number of memory allocation optimizations have been implemented. Most
optimizations reduce contention caused by synchronization between
threads during allocation and deallocation of memory. Most notably:
* Synchronization of memory management in scheduler specific allocator
instances has been rewritten to use lock-free synchronization.
* Synchronization of memory management in scheduler specific
pre-allocators has been rewritten to use lock-free synchronization.
* The ‘mseg_alloc’ memory segment allocator now use scheduler specific
instances instead of one instance. Apart from reducing contention
this also ensures that memory allocators always create memory
segments on the local NUMA node on a NUMA system.

我们来尝鲜演示下,首先设计个消息密集型的程序:
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Erlang探索, 调优 Tags: ,

Erlang R15最大的卖点Native Process

July 21st, 2011 34 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Erlang R15最大的卖点Native Process

R15最激动人心的东西就是这个Native Process,请参看Rickard Green写的Future Extensions to the Native Interface:看 这里

我来blabla下。 做过Erlang规模程序的人都知道有个痛, Erlang的公平调度引起的痛。 举个例子,比如说日志服务。当我们的系统有成千上万的进程需要日志服务的时候,我们通常会把日志的内容发给一个日志进程由它来负责持久化。这是个典型的模块划分方法,我们之前的c程序也都是这么干的。但是在erlang下这样很容易有问题。大家知道Erlang讲究公平,进程调度是公平的,port调度是公平的,bif使用是公平的,甚至ets这样的模块使用也是公平的。那么我们就可以这么理解。如果一个系统里面有N个进程需要服务,那么总进程数目是N+1, 平均来分配时间片。反过来说就是这个日志进程只能分的整个系统的1/(N+1)的cpu计算能力,但是要干N个活。后果就是这个进程忙不过来,导致消息队列不停的加大,消息队列需要堆内存,这个内存需求越来越大,最后系统分配不出内存,最终vm挂掉了。
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Erlang探索 Tags: ,