NUMA技术

NUMA(Non Uniform Memory AccessArchitecture)技术可以使众多服务器像单一系统那样运转,同时保留小系统便于管理和编程的优点。

            非统一内存访问是一种用于多处理器的电脑记忆体设计,内存访问时间取决于处理器的内存位置,在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。

            现代计算机处理速度比它的主存快不少,而在早期的计算和数据处理中,CPU通常比它的主存慢。从二十世纪六十年代,处理器和存储器的性能达到平衡。自那时起,CPU常常对数据感到饥饿而且必须等待处理器的数据到来。为了解决这个问题,8090年代的超级计算机设计专注于提供高速的存储器访问,使得计算机能够高速地处理其他系统不能处理的大数据集。

            没有使用NUMA技术的多处理器系统,在同一时间只能有一个处理器访问计算机的存储器,所以在一个系统中可能存在多个处理器在等待访问存储器。NUMA通过提供分离的存储器给各个处理器,避免多个处理器访问同一个存储器造成的性能损失,对于涉及到分散的数据的应用(在服务器和类似于服务器的应用中很常见),NUMA可以通过一个共享的存储器提高性能至n倍,而n大约是处理器(或者分离的处理器)的个数。当然,并不是所有的数据都局限于一个任务,所以多个处理器可能需要一个数据,为了处理这种情况,NUMA系统包含了附件的软件或者硬件来移动不同存储器的数据,这个操作降低了对于这些存储器的处理器的性能。

            当今数据计算领域的主要应用程序和模型可大致分为联机事务处理(OLTP)、决策支持系统(DSS)和企业信息通讯(BusinessCommunications)三大类。而小型独立服务器模式、SMP(对称多处理)模式、MPP(大规模并行处理)模式和NUMA模式。

NUMA模式采用分布式存储器模式,不同的是所有节点中的处理器可以访问全部系统物理存储器,然而每个处理器访问本节点内的存储器所需要的时间可能比访问某些远程节点内的存储器所花的时间要少得多,换句话说,访问存储器的时间是不一致的,这也是该模式被称为“NUMA”的原因。简而言之,NUMA既保持了SMP模式单一操作系统拷贝、简便的应用程序变成模式以及易于管理的特点,又继承了MPP模式的可扩充性,可以有效地扩充系统的规模,这也是NUMA的优势所在。【1

NUMA把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,内部节点使用共同的内存控制器,节点之间是通过互联模块进行连接和信息交互。因此节点的所有内存对于本节点的所有CPU都是等同的,对于其他节点中的所有CPU都不同,因此每个CPU可以访问整个系统内存,但是访问本节点内的内存速度最快(不经过互联模块),访问非本节点的内存速度较慢(需要经过互联模块),即CPU访问内存的速度和节点的距离有关,该距离成为NodeDistance

查看当前NUMA的节点情况;

numactl –hardware

或者

numactl –H


NUMA内存的分配策略有四种:

1)  缺省(default):总是在本地节点分配(当前进程运行的节点上)

2)  绑定(bind):强制分配到指定节点上

3)  交叉(interleavel):在所有节点或者指定节点上交叉分配内存

4)  优先(preferred):在指定节点上分配,失败则在其他节点上分配。

查看当前系统NUMA策略:

numactl –show

或者

numactl –s


因为分配策略是default,总是在进程所在的节点分配,可能导致不同节点间内存分配不均衡的现象,当某个CPU节点内存不足时,会导致swap产生(所谓swap,是指内存空间不够用时,将部分内存上的数据交换到swap空间上)。【2

NUMA的一些常用操作可以在numactl命令(http://linux.51yip.com/search/numactl)中找到

参考资料:

【1】       https://baike.baidu.com/item/NUMA/6906025

【2】       https://www.cnblogs.com/songyuejie/p/6795312.html

【3】       http://linux.51yip.com/search/numactl

猜你喜欢

转载自blog.csdn.net/chenmoshashou2/article/details/81059290