【BIOS/UEFI硬件知识储备】内存——UMA和NUMA两种内存访问方式

        根据处理器对内存的访问方式,将共享存储器方式的计算机系统分为两大类,即UMA(Uniform Memory Access,统一内存访问)和NUMA(Non Uniform Memory Access,非统一内存访问)

UMA

        UMA是对称多处理器计算机采用的存储器架构。在对称多处理器架构下,系统中的每个处理器内核地位相同,它们都访问一个统一的存储器空间,这些存储器往往以多通道的方式组织。所有的内存访问都被传递到一个共享的内存总线上,不同的处理器访问存储器的延迟相同,任何一个进程或线程都可以被分配到任何一个处理器上运行。每个处理器还可以配备私有的Cache,外围设备也可以通过某种形式共享。因而UMA架构可以在操作系统的支持下达到非常好的负载均衡,让整个系统的性能、吞吐量有较大提升。

【BIOS/UEFI硬件知识储备】内存——UMA和NUMA两种内存访问方式_第1张图片

(图片来源网络) 

        因为多个核使用相同的总线访问内存,随着处理器内核数的增加,总线将成为系统性能提升的瓶颈。因而UMA架构只适用于处理器内核数量相对较少的情况。 

NUMA

        NUMA架构缓解了各个处理器内核竞争共享内存总线造成的访问瓶颈的影响。NUMA架构属于DSMDistributed Shared Memory,分布式共享存储)架构,存储器分布在不同节点上。

        NUMA是用于多进程计算中的存储设计,存储读取取决于当前存储器与处理器的关联。在NUMA技术下,处理器访问本地存储器比非本地存储器(另一个处理器的本地存储器或者处理器共享的存储器)要快。即NUMA架构中存储器访问周期是不固定的,取决于被访问存储器的物理位置。系统内的存储器访问延迟从高到低依次为:跨CPU访存、不跨CPU但跨NUMA域访存、NUMA域内访存。

        如下图(这里比较笼统),CPU0 CPU1分别和它左右两边的内存块组成一个NUMA Node。这里,CPU0 访问 Menary 0.1Memary0.2 的速度要比访问Menary 1.1Memary1.2的速度快。所以,在NUMA模式下,如果能保证节点内的CPU只访问本节点内的内存块,访问速度是最快的。

【BIOS/UEFI硬件知识储备】内存——UMA和NUMA两种内存访问方式_第2张图片

        NUMA适用于程序不占用大内存的情况,这样可以提高程序的运行效率。而不适用于占用大内存的情况,否则很容易遇到Numa陷阱。此时应该关闭Numa Node的限制(BIOS下和OS下都可关闭)。所谓Numa陷阱就是,在Numa模式下,如果一个进程(线程)过大,在使用完自己节点内的内存时,由于Numa Node 的限制不能使用其他节点的内存而只能选择 Swap本结点里的进程。这样就会出现明明还有内存空间,却要执行Swap操作,内存空间不能得到充分地利用,而且Swap是很耗时的。

UMA和NUMA适用场景

         如果一个CPU访问的数据量不大,本地内存就足够的话,那么NUMA架构的优势就可以发挥出来了,各个CPU可以并发的访问自己的内存;如果CPU访问的数据量大的话,那么CPU需要频繁的访问其他CPU的内存,内部互连的效率是要小于UMA总线的效率。所以NUMA的效率会低于UMA的。

你可能感兴趣的:(BIOS/UEFI硬件知识储备,硬件工程,驱动开发)