前言
在现有YARN的Container运行过程中,还没有考虑到计算机内存的访问模式。更进一步地来说,针对CPU处理器对于计算机内存的访问模式,YANR的Container执行在这方面还可以进一步优化。比如在多处理器情况下的计算机内存访问模式NUMA模式下,尽量减少跨内存区域的访问将会加速执行的速度。在早期的实现中,YARN并没有考虑到这些情况的。所以今天笔者带领大家了解一下NUMA架构体系以及YARN Container对于NUMA的感知执行。
NUMA架构体系
在阐述本文正文之前,可能有部分同学不了解什么是NUMA,所以这里做个简单地介绍。
NUMA,全称是Non-uniform memory access,用中文翻译为非一致性内存访问。现在的问题来了,NUMA架构是怎样的一种结构呢?它主要用来解决什么问题的呢?
下面笔者进行简单的解释。
其实在NUMA架构之前,内存是被处理器所共享的,然后通过总线方式进行数据的传输。随着处理器的增多,这里面处理器对于总线的竞争就会加剧。所以NUMA在这方面就做了改进,通过将内存分成多个小内存Node区域,每个小Node区域再被一部分处理器所共享。当然,这些处理器也可以访问别的Node区域的内存,只是说跨区域内存访问会慢于本地内存访问的速度。下面是NUMA架构体系。
P代表的是处理器。上图显示的左边为一个Node区域,一块内存被5个处理器