NUMA 会影响内存带宽,还是只是延迟?
Posted
技术标签:
【中文标题】NUMA 会影响内存带宽,还是只是延迟?【英文标题】:Does NUMA impact memory bandwidth, or just latency? 【发布时间】:2020-08-14 17:21:35 【问题描述】:我有一个内存带宽有限的问题——我需要从 RAM 中顺序读取大量(许多 GB)数据,进行一些快速处理并将其顺序写入 RAM 中的不同位置。内存延迟不是问题。
将工作分配给不同 NUMA 区域的两个或多个内核有什么好处?同样,跨区域工作会减少可用带宽吗?
【问题讨论】:
答案是“视情况而定”,您必须以实际工作量为基准来回答这个问题。 @MaximEgorushkin 你能提供更多信息吗?例如,它可能依赖于什么? 【参考方案1】:对于带宽受限的多线程代码,NUMA 系统中的行为将主要取决于每个线程的数据访问的“本地”程度,其次取决于远程访问的详细信息。
在典型的 2 插槽服务器系统中,两个 NUMA 节点可用的本地内存带宽是单个节点可用的两倍。 (但请记住,可能需要在多个内核上运行多个线程才能达到每个套接字的渐近带宽。)
例如,STREAM Benchmark 通常在允许来自每个线程的几乎所有访问都是“本地”的配置中运行。这是通过假设“第一次接触”NUMA 位置来实现的——当第一次写入分配的内存时,操作系统必须创建从进程虚拟地址空间到物理地址的映射,并且(默认情况下)操作系统选择位于与执行存储指令的内核相同的 NUMA 节点。
大多数系统中的“本地”带宽(到 DRAM)是近似对称的(用于读取和写入)并且相对容易理解。 “远程”带宽对于读取和写入来说更加不对称,并且在芯片之间传输的读/写命令与芯片之间移动的数据之间通常存在严重的争用。本地带宽与远程带宽的总体比率在不同代处理器之间也存在显着差异。对于某些处理器(例如,至强 E5 v3 和可能的 v4),互连速度相对较快,因此局部性较差的作业通常可以在两个插槽之间交错的所有内存的情况下运行。 从那时起,本地带宽显着增加,更新的处理器通常强烈支持本地访问。
来自 Intel Xeon Platinum 8160 的示例(芯片之间的 2 个 UPI 链接):
本地读取带宽(每个插槽)~112 GB/s 远程读取带宽(一次一个方向)~34 GB/s 本地带宽在双插槽系统中可以完美扩展,而远程带宽在使用两个插槽时也可以很好地扩展(每个插槽从另一个插槽读取数据)。套接字之间的组合读写流量变得更加复杂,因为从节点 0 到节点 1 的读取流量与从节点 1 到节点 0 的写入流量等竞争。
1R:1W(每个套接字)的本地带宽 ~101 GB/s(由于读/写调度开销而降低) 1R:1W 的远程带宽(一次运行一个插槽)~50 GB/s -- 更多带宽可用,因为正在使用两个方向,但这也意味着如果两个插槽都在做同样的事情,那么会有冲突。当两个套接字同时运行 1R:1W 远程时,我发现聚合不到 60 GB/s。当然,本地访问与远程访问的不同比例会改变缩放比例。时间也可能是一个问题——如果线程同时进行本地访问,然后同时进行远程访问,那么远程访问部分将会有更多的争用(与线程正在执行它们的情况相比)在不同时间进行远程访问)。
【讨论】:
以上是关于NUMA 会影响内存带宽,还是只是延迟?的主要内容,如果未能解决你的问题,请参考以下文章