天天看点

NUMA与英特尔下一代Xeon处理器学习心得(4)

在传统SMP系统上,所有CPU都以同样的方式通过一个共享内存控制器来访问内存,各CPU之间也是通过它来进行交流,所以很容易造成拥堵。而一个内存控制器所能够管理的内存数量也是非常有限的。此外,通过唯一的hub访问内存造成的延迟也是非常高的。

在NUMA结构下,每个计算机不再只有唯一的内存控制器,而是把整个系统分成多个节点。每个节点分别有自己的处理器和内存。系统中所有的节点都通过全互联的方式连接。所以,每当在系统中增加新的节点,系统所能够支持的内存和带宽都会增加,具有非常好的扩展性。

下面就讲讲NUMA的内存组织

在NUMA系统中,每个CPU可以访问两种内存:本地内存(Local Memory)和远端内存(Remote Memory)。和CPU在同一个节点的内存称为本地内存,访问延迟非常低。和CPU在不同节点上的内存叫做远端内存,CPU需要通过节点互联方式访问,所以访问延迟要比访问本地内存长。

从软件的角度来看,远端内存和本地内存是以同样的方式访问的。理论上讲,NUMA系统可以被软件视为与SMP同样的系统,不区分本地和远端内存。但是如果追求更好的性能,这个区别还是需要被考虑的。

经实验,对于常规的内存操作,如清空(Memset),块复制(Memcpy),流读写(Stream),指针追溯(Pointer Chase)等操作来说,本地内存的访问速度要远远优于远端内存。

由于 NUMA 同时使用本地内存和远端内存,因此,访问某些内存区域的时间会比访问其他内存区域的要长。本地内存和远端内存通常用于引用当前正在运行的线程。本地内存是指与当前正在运行线程的 CPU 位于同一节点上的内存。任何不属于当前正在运行的线程所在的节点的内存均为远端内存。访问远端内存的开销与访问本地内存的开销比率称为 NUMA 比率。如果 NUMA 比率为 1,则它是对称多处理 (SMP)。比率越高,访问其他节点内存的开销就越大。不支持 NUMA 的 应用程序有时在 NUMA 硬件上的执行效果非常差。

由于访问本地内存和远端内存的开销是有区别的,所以在NUMA模式下,如果每个线程更多的是访问本地内存,那么性能相比而言会有一定提升。

本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130482,如需转载请自行联系原作者

继续阅读