从系统架构来看,目前的商用服务器大体可以分为三类
共享存储型多处理机有两种模型
根据多核处理器内的cache配置情况,可以把多核处理器的组织结构分成以下四种:
存取速度比较:L1缓分成两种,一种是指令缓存,一种是数据缓存。L2缓存和L3缓存不分指令和数据。L1和L2缓存在第一个CPU核中,L3则是所有CPU核心共享的内存。L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢。再往后面就是内存,内存的后面就是硬盘。我们来看一些他们的速度:
多核处理器片内的多个处理器内核虽然各自执行各自的代码,但是处理器内核之间需要进行数据的共享和同步,因此多核处理器硬件结构必须支持高效的核间通信,片上通信结构的性能也将直接影响处理器的性能
1)总线共享Cache结构
2)交叉开关互连结构
3)片上网络结构
在多核系统设计时必须考虑多级Cache的一致性(Cache Coherency)问题。对内存的基本操作包括读操作和写操作。Cache一致性问题产生的原因是:
维护Cache一致性的关键在于跟踪每一个Cache块的状态,并根据处理器的读写操作及总线上的相应事件及时更新Cache块的状态。一般来说,导致多核处理器系统中Cache内容不一致的原因如下:(1)可写数据的共享:某个处理器采用全写法或写回法修改某一个数据块时,会引起其他处理器的Cache中同一副本的不一致。(2)I/O活动:如果I/O设备直接连接在系统总线上,I/O活动也会导致Cache不一致。(3)核间线程迁移:核间线程迁移就是把一个尚未执行完的线程调度到另一个空闲的处理器内核中去执行。为提高整个系统的效率,有的系统允许线程核间迁移,使系统负载平衡。但这有可能引起Cache的不一致。对于I/O活动和核间线程迁移而导致的Cache不一致,可以分别通过禁止I/O通道与处理器共享Cache以及禁止核间线程迁移简单解决。因而多处理器中的Cache一致性问题主要是针对可写数据的共享。
所谓对称多处理器结构,是指服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个 CPU访问内存中的任何地址所需时间是相同的,因此UMA也被称为对称多处理器结构(SMP:Symmetric Multi-Processor)。对UMA服务器进行扩展的方式包括增加内存、使用更快的CPU、增加CPU、扩充I/O(槽口数与总线数)以及添加更多的外部设备(通常是磁盘存储)。
在对称多处理器架构下,系统中的每个处理器内核地位相同,其看到的存储器和共享硬件也都是相同的。在UMA架构的多处理器系统中,所有的处理器都访问一个统一的存储器空间,这些存储器往往以多通道的方式组织。在UMA架构下,所有的内存访问都被传递到相同的共享内存总线上,不同的处理器访问存储器的延迟时间相同,任何一个进程或线程都可以被分配到任何一个处理器上运行。每个处理器还可以配备私有的Cache,外围设备也可以通过某种形式共享。因而UMA架构可以在操作系统的支持下达到非常好的负载均衡效果,让整个系统的性能、吞吐量有较大提升。
但从存储器访问的角度看,对称多处理器架构的缺点是可伸缩性较差。这是因为多个核使用相同的总线访问内存,随着处理器内核数的增加,总线将成为系统性能提升的瓶颈。因而UMA架构只适用于处理器内核数量相对较少的情况,不适用于系统中配置数十个甚至数百个处理器内核的情况。
NUMA 的主要优点是伸缩性。NUMA 体系结构在设计上已超越了 SMP 体系结构在伸缩性上的限制。通过 SMP,所有的内存访问都传递到相同的共享内存总线。这种方式非常适用于 CPU 数量相对较少的情况,但不适用于具有几十个甚至几百个 CPU 的情况,因为这些 CPU 会相互竞争对共享内存总线的访问。NUMA 通过限制任何一条内存总线上的 CPU 数量并依靠高速互连来连接各个节点,从而缓解了这些瓶颈状况。
系统内的存储器访问延时从高到低依次为:跨CPU访存、不跨CPU但跨NUMA域访存、NUMA域内访存。因此,在应用程序运行时应尽可能避免跨NUMA域访问存储器,这可以通过设置线程的CPU亲和性(affinity)来实现。
NUMA架构既可以保持对称多处理器架构的单一操作系统、简便的应用程序编程模式及易于管理的特点,又可以有效地扩充系统的规模。NUMA架构能够为处理器访问本地存储器单元提供高速互连机制,同时为处理器访问远程存储器单元提供较为经济但延迟时间更高的连接通道,因而NUMA架构的系统通常比UMA架构的系统更加经济且性能更强大。
在NUMA架构中,有一种类型应用特别普遍,即CC-NUMA(Cache Coherent Non-Uniform Memory Access,缓存一致性非统一内存访问)系统。缓存一致性问题是由于多个处理器共享同一个存储空间而引起的,而CC-NUMA是指通过专门的硬件保持Cache中的数据和共享内存中的数据的一致性,不需要软件来保持多个数据副本之间的一致性。当某个存储单元的内容被某个处理器改写后,系统可以很快地通过专用硬件部件发现并通知其他各个处理器。因此。在CC-NUMA系统中,分布式内存储器被连接为单一内存空间,多个处理器可以在单一操作系统下使用与对称多处理器架构中一样的方式完全在硬件层次实现管理。
由于 snooping 使用了广播会占用总线带宽,一般认为 snooping 扩展性不如 directory-based,但是在带宽足够的前提下,snooping 会更快。
下一节,我们将聊聊linux上numa架构的一些知识。