我的程序使用共享内存作为数据存储。该数据必须可供任何正在运行的应用程序使用,并且必须快速获取该数据。但有些应用程序可以在不同的 NUMA 节点上运行,它们的数据访问成本非常高。每个 NUMA 节点的数据复制是唯一的方法吗?
问问题
395 次
1 回答
5
有两个主要的减速来源可以归因于 NUMA。首先是远程访问的延迟增加,这可能因平台而异。在我使用的平台上,延迟大约有 30%。
性能损失的另一个来源可能来自 NUMA 节点之间的通信链路和控制器争用。
Linux 的默认分配方案是在创建数据的节点上分配数据。如果应用程序中的大部分数据由单个线程初始化,那么它将生成大量跨 NUMA 域流量和对该内存节点的争用。
如果您的数据是只读的,那么复制是一个很好的解决方案。
否则,在所有节点之间交错分配数据将在所有节点之间分配请求,并有助于缓解拥塞。
要交错数据,如果您使用的是 Linux ,则可以使用set_mempolicy()
from 。numaif.h
于 2012-02-21T03:55:15.007 回答