浅谈大数据背景下的NUMA架构研究

来源:互联网 发布:淘宝网狗狗衣服 编辑:程序博客网 时间:2024/04/30 04:41

大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。大数据的4V特点:Volume、Velocity、Variety、Veracity。如今,大数据时代已经到来,面对各行各业日益增长的海量信息数据,我们应该如何去收集数据、存储数据(storing)、保留筛选数据、分析数据、以及根据数据分析的结果采取相应行动的一系列过程,在大数据背景下这些问题都面临着巨大的挑战。

这篇文章,主要从计算机体系结构中的NUMA架构的角度出发,讨论一下在如今的大数据背景下,应该从哪些方面着手进行研究,以便适应日益增长的大数据应用。


NUMA简介

NUMA,即非统一内存访问,是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。NUMA系统的节点通常是由一组CPU和本地内存组成。由于每个结点都有自己的本地内存,因此全系统的内存在物理上是分布的,每个结点访问本地内存和访问其它结点的远地内存的延迟是不同的。下图是一个简单的NUMA结构图。

图1 一个拥有四个节点的NUMA系统结构图

 

当今数据计算领域的主要应用程式和模型可大致分为联机事务处理(OLTP)、决策支持系统(DSS)和企业信息通讯(Business Communications)三大类。而小型单独服务器模式、SMP(对称多处理)模式、MPP(大规模并行处理)模式和NUMA模式,则是上述3类系统设计人员在计算平台的体系结构方面能够采用的选择。下面分别简述这三种模式,分析它们的特点,以及NUMA模式的必要性。

SMP模式将多个处理器和一个集中的存储器相连。在SMP模式下,任何处理器都能够访问同一个系统物理存储器,而且访问任意一块内存的时间相同。因此SMP系统有时也被称为一致存储器访问(UMA)结构体系。由于内存访问带宽限制,SMP的可伸缩性有限,在存储器接口达到饱和的时候,增加处理器并不能获得更高的性能。

MPP模式则是一种分布式存储器模式,能够将更多的处理器纳入一个系统的存储器。一个分布式存储器模式具备多个节点,每个节点都有自己的存储器,能够配置为SMP模式,也能够配置为非SMP模式。单个的节点相互连接起来就形成了一个总系统。MPP体系结构对硬件研发商颇具吸引力,因为他们出现的问题比较容易解决,研发成本比较低。由于没有硬件支持共享内存或高速缓存一致性的问题,所以比较容易实现大量处理器的连接。

NUMA模式也采用了分布式存储器模式,不同的是任何节点中的处理器都能够访问全部的系统物理存储器。NUMA最大的特点是存在本地和远端内存,多个内存访问控制器,processor访问这两类内存的开销是不一样的,访问local比remote要快很多。正是由于NUMA结构的特点,使得它具有很好的可扩展性。


NUMA体系的研究点和挑战

         NUMA体系的特点是,每个节点有自己的内存控制器,这样能够在一定程度上缓解内存访问竞争,但访问模式的“复杂化”,同时也给系统优化带来了很大的挑战。

         挑战一:如何合理的分配内存。前面说过,NUMA节点都有自己的本地内存,访问本地内存要比其他节点的内存快很多,这就涉及到内存位置摆放的问题。

         NUMA提供的内存分配机制包括4种:

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

2.   绑定(bind):分配到指定节点上;

3.   交织(interleave):在所有节点或者指定的节点上交织分配;

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

对于应用程序开发者来说,如果编写运行在NUMA系统上的程序,合理安排内存块的位置,可以极大的改善程序的性能。但这同时也增大了开发难度,而且需要开发者对于底层硬件有一个比较全面深入的了解;对于系统开发者而言,需要在底层对NUMA体系进行一些适当的优化,比如针对应用程序的特性,采取适当的内存管理机制来提高性能。

挑战二:如何减缓共享资源竞争。共享资源研究相对较多的是共享缓存,在NUMA体系中,同样存在。另外,NUMA体系中可能存在多个内存访问控制器,它们之间的竞争问题也是需要考虑在内的。目前在研究的针对NUMA架构的服务器上,对共享缓存的使用进行优化,调度系统中的任务,使各个NUMA节点的共享缓存能够更加合理的使用,提高系统的吞吐率。通过调度的方法解决共享缓存资源竞争的问题,已经是一个研究比较多的点了。从目前看,这种方式可以提高性能,但是有比较大的不确定性。并不是所有场景都能通过调度解决性能问题。在这个调度方法提出来之前,采用动态的缓存分块技术解决共享缓存资源利用问题的方法是一种研究比较成熟的技术。

另外,NUMA的内存分配策略对于进程(或线程)之间来说,并不是公平的。在现有的Redhat Linux中,localalloc是默认的NUMA内存分配策略,这个配置选项导致资源独占程序很容易将某个节点的内存用尽。而当某个节点的内存耗尽时,Linux又刚好将这个node分配给了某个需要消耗大量内存的进程(或线程),swap就会产生。尽管此时其他节点上还有很多空闲的内存块可以使用。

 

小结

总之,在大数据的背景下,如何对NUMA体系进行优化,从而有效提高程序性能,是一项很有意义同时也很有挑战的工作。NUMA体系的特点使其具有很好的可扩展性,但随之而来的内存分配和资源竞争问题,也不容忽视。对于这方面的研究,还是有必要进一步深入的。