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