当前位置: 首页 > 科技观察

一篇文章带你学习CPU架构知识

时间:2023-03-17 23:00:01 科技观察

Part1架构概述从系统架构来看,目前的商用服务器大致可以分为三种:对称多处理器(SMP:SymmetricMulti-Processor)非统一存储访问结构(NUMA:Non-UniformMemoryAccess)大规模并行处理结构(MPP:MassiveParallelProcessing)。共享内存多处理器有两种模型:统一内存访问(UMA)模型和非统一内存访问(NUMA)模型。多核系统的存储结构基于多核处理器根据内部缓存配置,多核处理器的组织结构可分为以下四种:片上私有一级缓存结构:一个简单的多核计算机的缓存结构由两级组成,L1和L2。处理器芯片中的多个核心中的每一个都有自己私有的一级缓存,一般分为指令一级(L1-I)缓存和数据一级(L1-D)缓存。多核共享二级缓存存在于处理器芯片之外。片上私有二级缓存结构:处理器芯片中的多个核心仍然保留自己的私有指令一级缓存和数据一级缓存,但二级缓存移至处理器芯片,二级缓存为每个核心私有。多个内核共享处理器芯片外部的主内存。片上共享二级缓存结构:该结构类似于片上私有二级缓存的多核结构,都是片上二级缓存结构。不同的是,处理器芯片中的私有二级缓存变成了多核共享二级缓存。多个内核仍然共享处理器芯片外的主内存。对于处理器的每个内核,片上私有二级缓存的访问速度更高。但是,使用处理器芯片中的共享二级缓存来代替每个核心的私有二级缓存,可以提高系统的整体性能。片上共享三级缓存结构:随着处理器芯片上可用内存资源的增加,高性能处理器甚至将三级缓存从片外移到了片上。在片上私有二级缓存结构的基础上增加片上多核共享三级缓存,大大提高了存储系统的性能。下图给出了这种结构的示意图。访问速度比较:L1缓存分为两种,一种是指令缓存,一种是数据缓存。二级缓存和三级缓存不分离指令和数据。L1和L2缓存在第一个CPU内核中,L3是所有CPU内核共享的内存。L1、L2、L3离CPU越近,速度越小,速度越快,离CPU越远,速度越慢。后面是内存,内存后面是硬盘。让我们看看它们的一些速度:L1访问速度:4个CPU时钟周期L2访问速度:11个CPU时钟周期L3访问速度:39个CPU时钟周期RAM内存访问速度:107个CPU时钟周期多核的内核间通信机制处理器虽然多核处理器芯片中的多个处理器内核执行各自的代码,但处理器内核之间需要进行数据共享和同步,因此多核处理器的硬件结构必须支持高效的内核间通信,性能片上通信结构的优劣将直接影响处理器的性能。输出接口和主存储器接口通过连接处理器内核的总线进行通信。这种方法的优点是结构简单,易于设计和实现,通信速度快,缺点是总线结构的可扩展性差,只适用于处理器核数较少的情况。2)crossbar的互连结构传统的总线结构采用时分复用的工作方式,因此同一时刻只能在同一条总线上进行一个相互通信过程。交叉开关(CrossbarSwitch)互连结构可以有效提高数据交换的带宽。交叉开关是一项经典技术,已在传统电话交换机中使用了几十年。它可以按任意顺序连接输入线和输出线。3)片上网络结构片上网络(NoC;On-chipNetwork)技术借鉴并行计算机的互连网络结构,将大量的计算资源集成在单个芯片上,以及连接这些的片上通信网络资源。每个处理器核都有一个独立的处理单元及其私有的Cache,并通过片上通信网络连接在一起。处理器核之间采用消息通信机制,用路由和包交换技术代替传统的片上总线来完成通信任务,从而解决总线互联带来的各种瓶颈问题。片上网络与传统的分布式计算机网络有很多相似之处,但片上资源有限,设计时需要考虑更多的开销约束,针对时延、功耗、面积等性能指标进行优化设计,以实现高-性能片上系统提供高效的通信支持。多核处理器的缓存一致性设计多核系统时必须考虑多级缓存一致性(CacheCoherency)问题。对内存的基本操作包括读操作和写操作。Cache一致性问题产生的原因是:在一个处理器系统中,同一数据的多份副本可能存放在不同的Cache和主存空间,这些副本在写操作时可能存在潜在的不一致。在单处理器系统中,Cache一致性问题主要表现在内存写操作过程中如何保持各级Cache中的数据副本与主存内容一致。更好的解决Cache一致性问题。在多核系统中,多个核可以写入内存,Cache层级也更多。同一数据的多份副本可能同时存储在多个Cache内存中,而某个核的私有Cache只能由核自身访问。即使采用全写方式,也只能保持一个Cache与主存的一致性,不能自动更新其他处理器核心的私有Cache中的同一份副本。这些因素无疑增加了Cache一致性问题的复杂性,同时影响了多核系统存储系统的整体设计。保持Cache一致性的关键是跟踪每个Cache块的状态,根据处理器的读写操作和总线上相应的事件及时更新Cache块的状态。一般而言,多核处理器系统中Cache内容不一致的原因有以下几点:(1)可写数据的共享:当一个处理器使用fullwrite方式或writeback方式修改一个数据块时,它会导致其他处理器修改它。缓存中相同副本的不一致。(2)I/O活动:如果I/O设备直接连接在系统总线上,I/O活动也会造成Cache不一致。(3)核间线程迁移:核间线程迁移是将一个未完成的线程调度到另一个空闲的处理器核上执行。为了提高整个系统的效率,有些系统允许在线程和核心之间进行迁移,以平衡系统负载。但是这可能会导致Cache不一致。I/O活动和内核间线程迁移导致的缓存不一致可以通过禁止I/O通道与处理器共享缓存和禁止内核间线程迁移轻松解决。因此,多处理器中的Cache一致性问题主要针对可写数据的共享。UMA(Uniform-Memory-Access)和SMP(SymmetricMulti-Processor)所谓的对称多处理器结构,是指服务器中多个CPU对称工作,没有主次或从属关系。每个CPU共享同一块物理内存,每个CPU访问内存中任意地址所需的时间是相同的,所以UMA也称为对称多处理器结构(SMP:SymmetricMulti-Processor)。扩展UMA服务器的方法包括增加内存、使用更快的CPU、增加CPU、扩展I/O(插槽和总线的数量)以及添加更多外部设备(通常是磁盘存储)。在对称多处理器体系结构中,系统中的每个处理器内核都具有相同的状态,并看到相同的内存和共享硬件。在采用UMA架构的多处理器系统中,所有的处理器都访问一个统一的内存空间,而这些内存往往以多通道的方式组织起来。在UMA架构下,所有的内存访问都传递到同一个共享内存总线上,不同处理器访问内存的延迟时间是一样的,任意进程或线程都可以分配到任意处理器上运行。每个处理器还可以配备一个私有的Cache,外围设备也可以某种形式共享。因此,UMA架构在操作系统的支持下可以达到非常好的负载均衡效果,极大地提升了整个系统的性能和吞吐量。但从内存访问的角度来看,对称多处理器架构的缺点是可扩展性差。这是因为多个内核使用相同的总线访问内存。随着处理器核心数量的增加,总线将成为系统性能提升的瓶颈。因此,UMA架构只适用于处理器核心数比较少的情况,不适用于系统中配置几十甚至上百个处理器核心的情况。NUMA(非统一内存访问)NUMA的主要优点是可扩展性。NUMA架构旨在超越SMP架构的可扩展性限制。使用SMP,所有内存访问都被路由到同一个共享内存总线。这种方法适用于相对较少数量的CPU,但不适用于具有数十个甚至数百个CPU的情况,因为CPU将相互竞争以访问共享内存总线。NUMA通过限制任何一条内存总线上的CPU数量并依靠高速互连来连接各个节点来缓解这些瓶颈。系统内存访问延迟从高到低的顺序是:跨CPU内存访问、不跨CPU但跨NUMA域内存访问、NUMA域内内存访问。因此,在应用程序运行时,应尽可能避免跨NUMA域访问内存,这可以通过设置线程的CPU亲和性(affinity)来实现。NUMA架构既能保持对称多处理器架构的单一操作系统、应用程序编程方式简单、易于管理的特点,又能有效地扩展系统的规模。NUMA架构可以为处理器访问本地内存单元提供高速互连机制,同时为处理器访问远程内存单元提供更经济但延迟更高的连接通道。因此,NUMA架构系统通常比UMA架构系统更经济高效。性能更强大。CC-NUMA(CacheCoherentNon-UniformMemoryAccess)在NUMA架构中,有一类应用尤为普遍,即CC-NUMA(CacheCoherentNon-UniformMemoryAccess,缓存一致性非均匀内存访问)系统。Cache一致性问题是由多个处理器共享同一个存储空间引起的,而CC-NUMA是指通过特殊的硬件来维护Cache中的数据和共享内存中的数据的一致性,不需要软件来维护多个一致性数据副本之间。当一个存储单元的内容被处理器改写时,系统可以通过专用硬件组件快速发现并通知其他处理器。所以。在CC-NUMA系统中,分布式内存连接成一个单一的内存空间,可以像对称多处理器架构一样,在单一操作系统下对多个处理器进行硬件层面的管理。目录协议。这种方法的典型实现是设计一个集中式控制器,它是主内存控制器的一部分。其中之一是存储在主内存中的目录,其中包含有关各种本地缓存内容的全局状态信息。当单个CPUCache发出读取或写入请求时,此集中式控制器会检查并发出必要的命令,以在主存和CPUCache之间或CPUCache本身之间同步和传输数据。史努比协议。该协议更像是一种用于数据通知的总线型技术。CPUCache可以通过这个协议识别其他Cache上的数据状态。如果有数据共享,可以通过广播机制将共享数据的状态通知给其他CPUCache。该协议要求每个CPUCache都可以“窥探”数据事件的通知并做出相应的响应。由于snooping使用广播来占用总线带宽,所以一般认为snooping的可扩展性不如directory-based,但是如果带宽足够的话snooping会更快。本文转载自微信公众号《运维开发故事》,可通过以下二维码关注。转载本文请联系运维开发故事公众号。