【问题标题】:Spacing process virtual memory pages evenly accross interleaved memory在交错的内存中均匀地间隔进程虚拟内存页面
【发布时间】:2014-07-09 22:16:25
【问题描述】:

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

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

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

我发现我可以在我的板上添加一个额外的 RAM。我可能会得到我的同事。通过告诉他们我也打算将每条内存的大小减半来筹集资金,但是我怎样才能让内核为我分配保证均匀分布在两个内存中的内存?

非常感谢您的回答!

附:我使用的是 linux 内核版本 2.6.34。

【问题讨论】:

  • 这可能更适合superuser.com
  • 好的。有什么办法可以将它迁移到那里?
  • 必须是副本吗?如果是移动,您可以在不接触数据的情况下使用页表并移动数据。不久前我有一个问题:stackoverflow.com/q/2679065/321772。如果需要复制,也许您可​​以在该架构上进行写时复制?
  • @Adam,是的,我担心它必须是一个副本。不过,我明白你的意思 - 比如将物理内存重新映射到进程执行空间中的不同虚拟地址?跨度>
  • 你明白了。可以将单个物理页面映射到多个虚拟页面。

标签: linux multithreading memory memory-management powerpc


【解决方案1】:

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

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

可用的策略是页面交错(即,在一个 来自所有节点或子集的循环方式 系统),首选节点分配(即,最好在一个 特定节点),本地分配(即在节点上分配 任务当前正在执行的任务),或仅在特定的分配 节点(即,在可用节点的某个子集上分配)。这是 也可以将任务绑定到特定节点。

【讨论】:

  • 谢谢。我对 NUMA 不是很熟悉,但我想这对我来说是 rtfm :)
  • 是的,我认为我的主板确实支持 NUMA。
  • @AnirbanGhoshal 如果这确实对您有所帮助,请务必标记答案,并可能对您的问题进行一些编辑,以准确显示您如何使用它来解决问题,以便人们在有同样问题的未来可以找到你的解决方案。
  • 对不起,我是个破坏者,但似乎是我的同事。毕竟不允许我使用双内存库。看来他们已经预购了大量带有单组内存的板子,所以这个已经过时了。谢谢大家的建议,不过,至少我通过这种方式了解了一些关于 NUMA 的知识!
猜你喜欢
  • 2020-05-21
  • 2011-12-27
  • 1970-01-01
  • 2016-09-26
  • 2013-12-13
  • 2012-04-04
  • 1970-01-01
  • 2016-04-28
  • 2023-03-17
相关资源
最近更新 更多