与服务器一起的日子

  • mysql
  • linux
  • 高可用
  • nginx
与服务器一起的日子
冰冷的机器也熄不灭火热的心
  1. 首页
  2. linux
  3. 正文

探索NUMA技术

2017年9月17日 534点热度 0人点赞 0条评论

学习服务器端不可避免需要去了解相关虚拟化技术,而虚拟化就需要去研究内存,CPU,硬盘的关系了。今天我们就初次探索一下最最初始的NUMA技术。

==========================分割线==========================

        NUMA(Non Uniform Memory Access Architecture)技术可以使众多服务器像单一系统那样运转,同时保留小系统便于编程和管理的优点。基于电子商务应用对内存访问提出的更高的要求,NUMA也向复杂的结构设计提出了挑战。

产生

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

基本概念

        现代计算机的处理速度比它的主存速度快不少。而在早期的计算和数据处理中,CPU通常比它的主存慢。但是随着超级计算机的到来,处理器和存储器的性能在二十世纪六十年代达到平衡。自从那个时候,CPU常常对数据感到饥饿而且必须等待存储器的数据到来。为了解决这个问题,很多在80和90年代的超级计算机设计专注于提供高速的存储器访问,使得计算机能够高速地处理其他系统不能处理的大数据集。
         限制访问存储器的次数是现代计算机提高性能的要点。对于商品化的处理器,这意味着设置数量不断增长的高速缓存和使用不断变得精巧复杂的算法以防止“缓存数据缺失(cache missed)”。但是操作系统和应用程序大小的明显增长压制了前述的缓存技术造成的提升。没有使用NUMA的多处理器系统使得问题更糟糕。因为同一时间只能有一个处理器访问计算机的存储器,所以在一个系统中可能存在多个处理器在等待访问存储器。
         NUMA通过提供分离的存储器给各个处理器,避免当多个处理器访问同一个存储器产生的性能损失来试图解决这个问题。对于涉及到分散的数据的应用(在服务器和类似于服务器的应用中很常见),NUMA可以通过一个共享的存储器提高性能至n倍,而n大约是处理器(或者分离的存储器)的个数。
         当然,不是所有数据都局限于一个任务,所以多个处理器可能需要同一个数据。为了处理这种情况,NUMA系统包含了附加的软件或者硬件来移动不同存储器的数据。这个操作降低了对应于这些存储器的处理器的性能,所以总体的速度提升受制于运行任务的特点。
         MPP模式则是一种分布式存储器模式,能够将更多的处理器纳入一个系统的存储器。一个分布式存储器模式具有多个节点,每个节点都有自己的存储器,可以配置为SMP模式,也可以配置为非SMP模式。单个的节点相互连接起来就形成了一个总系统。MPP体系结构对硬件开发商颇具吸引力,因为它们出现的问题比较容易解决,开发成本比较低。由于没有硬件支持共享内存或高速缓存一致性的问题,所以比较容易实现大量处理器的连接。
         可见,单一SMP模式与MPP模式的关键区别在于,在SMP模式中,数据一致性是由硬件专门管理的,这样做比较容易实现,但成本较高;在MPP模式中,节点之间的一致性是由软件来管理,因此,它的速度相对较慢,但成本却低得多。
         在美国某大学的研究项目中被提出来的NUMA模式,也采用了分布式存储器模式,不同的是所有节点中的处理器都可以访问全部的系统物理存储器。然而,每个处理器访问本节点内的存储器所需要的时间,可能比访问某些远程节点内的存储器所花的时间要少得多。换句话说,也就是访问存储器的时间是不一致的,这也就是这种模式之所以被称为“NUMA”的原因。简而言之,NUMA既保持了SMP模式单一操作系统拷贝、简便的应用程序编程模式以及易于管理的特点,又继承了MPP模式的可扩充性,可以有效地扩充系统的规模。这也正是NUMA的优势所在。

缓存相关

         几乎所有利用少量的极快的非共享的内存例如cache的CPU结构利用内存访问方法中引用的位置。使用NUMA的系统,在共享内存时维持高速缓存一致性的开销非常大。尽管设计与搭建更简单,但是非一致性高速缓存NUMA系统编程在冯诺依曼编程架构标准下变得非常复杂。
         典型的,ccNUMA在缓存控制器中使用处理器间通信,以此来保持稳定的存储器映像当多个缓存试图存储在同一个内存位置时。由于这个原因,当多处理器快速连续的尝试访问相同的内存区时ccNUMA可能表现比较差。支持NUMA的操作系统尝试通过以NUMA友好的方式分配处理器和内存,同时避免会使NUMA非友好方式成为必然的调度、锁定算法来降低这种类型访问的频率。另外,缓存一致性协议如MESIF协议试图减少需要维护缓存一致性的通信。可扩展一致性接口(SCI)是一个IEEE标准定义的一个基于目录的缓存一致性协议,以避免在早期的多处理器系统中发现的可扩展性限制。SCI被用作Numascale NumaConnect的基础技术。
——摘自《百度百科》
================================分割线================================
         阅读百度百科的介绍,我们知道NUMA就是为了解决多虚拟机的虚拟化造成的总线性能瓶颈问题,通过NUMA来分配离CPU最近的内存来加快CPU的计算,通过实现自己的io实现硬盘与内存的快速数据读取,不得不佩服人们以前的智慧。我等渣渣只能膜拜
         对于现代的虚拟化架构的实现,依然需要去理解和感谢NUMA思想对于我们的帮助,它帮我们实现了虚拟机集群化运行。提高了虚拟机的工作效率。
         摘抄了这么多(我没有水啊),就是为了以后讲清楚虚拟化相关的概念以及实现原理。
         如何在redhat系列的系统上面查看我们的机器是否支持NUMA呢?请执行命令
grep -i numa /var/log/dmesg
出现No NUMA configuration found,说明NUMA为disable,如果不是说明numa为enable。
标签: linux NUMA 虚拟化
最后更新:2017年9月17日

jhin

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 与服务器一起的日子. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang