1. 程式人生 > >Erlang R15的記憶體delayed dealloc特性對訊息密集型程式的影響

Erlang R15的記憶體delayed dealloc特性對訊息密集型程式的影響

在新的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.

我們來嚐鮮演示下,首先設計個訊息密集型的程式:

抱歉由於剛才的POST測試案例設計不合理,重新設計過,敬請期待。。。