间隔过程虚拟内存页面均匀地交叉存储

时间:2014-07-09 22:16:26

标签: linux multithreading memory memory-management powerpc

这个问题是关于DRAM速度和内存交错。我有一个非常具体的问题。我正在使用基于电源的架构板(减去AltiVec),我希望在我的进程的地址空间中的两个区域之间复制大段内存(虚拟连续)。为了抵消我的核心的缓慢,我在两个cpu上添加了两个线程,这使得复制更快。

然而,这仍然不够快。所以我添加了第三个线程,复制时间没有任何区别。我对此做了更多研究,发现我的主板配备了单个DDR3内存(速度1600 MB / s),并且它已经非常接近最大可达速度。

[这里有一些解释:只有2个线程,我正在复制,说大约4K的5500页大约16.5毫秒。如果你做一个简单的计算,似乎理论上你可以计时的最短时间(禁止所有预取和东西)是13.75毫秒。 ]

我发现我可以在我的电路板上添加额外的RAM。哪个我可以得到我的合作。通过告诉他们我还打算将每一块内存的大小减半,但是我如何让内核为我分配内存保证均匀分布在两个内存中?

非常感谢您的回答!

P.S。我使用的是Linux内核版本2.6.34。

1 个答案:

答案 0 :(得分:0)

查看您的Linux /板组合是否支持NUMA(非统一内存访问)扩展。您可以通过libnuma指定交错策略:

  

libnuma库为NUMA提供了一个简单的编程接口   Linux内核支持(非统一内存访问)策略。在一个   NUMA架构有些内存区域有不同的延迟或   带宽比其他。   

  可用的策略是页面交错(即在a中分配)   来自全部或部分节点的循环方式   系统),优选的节点分配(即,最好在a上分配)   特定节点),本地分配(即,在节点上分配)   任务当前正在执行),或仅在特定的情况下分配   节点(即,在可用节点的某个子集上分配)。它是   也可以将任务绑定到特定节点。