处理器CPU概念及CPU多线程

最近在power下,用到SMT内容,得知老早用过的CPU超线程是SMT的一种,因此研究了一下相关的内容。

ppc64_cpu --smt=on/off  开启/关闭smt

1 socket, core, thread


(1)socket就是主板上插cpu的槽的数目,也即管理员说的”路“
    芯片厂商会把一个或多个Core封装在一个chip上,称作Socket(插槽)。假设一个插槽有两个Core,主板上插2个插槽,就是4核系统。
(2)core就是我们平时说的”核“,即双核,4核等。单核(single-core)和多核(multi-core)也称作uniprocessor和multiprocessor
(3)thread就是每个core的硬件线程数,即超线程
具体例子,某个服务器是:2路4核超线程(一般默认为2个线程),那么,通过cat /proc/cpuinfo看到的是2*4*2=16个processor,很多人也习惯成为16核了!

[root@x86 ~]# lscpu
Architecture:           x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:             Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:     2
Core(s) per socket:     8
Socket(s):             2
NUMA node(s):          2

Vendor ID:             GenuineIntel
CPU family:             6
Model:                 45
Model name:            Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz
Stepping:               7
CPU MHz:               2889.125
BogoMIPS:               5804.19
Virtualization:         VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:               256K
L3 cache:               20480K
NUMA node0 CPU(s):     0-7,16-23
NUMA node1 CPU(s):     8-15,24-31

该服务器有32个CPU,组成方式是:2个sockets,每个socket有8个core,每个core有2个thread。另外,这些CPU可以划分为2个NUMA node。

SMP、SMT、NUMA等概念

    core(或processor),是一个泛指,是从使用者(或消费者)的角度看计算机系统。因此,core,或者processor,或者处理器(CPU),都是逻辑概念,指的是一个可以独立运算、处理的核心。
而这个核心,可以以任何形式存在,例如:单独的一个chip(如通常意义上的单核处理器);一个chip上集成多个核心(如SMP,symmetric multiprocessing);一个核心上实现多个hardware context,以支持多线程(如SMT,Simultaneous multithreading);等等。这是从硬件实现的角度看的。
最后,从操作系统进程调度的角度,又会统一看待这些不同硬件实现的核心,如下所提及的CPU(32个CPUs),因为它们都有一个共同的特点:执行进程(或线程)。

在传统的单核时代,提升处理器性能的唯一手段就是提高频率。但受限于物理工艺,频率不能无限提高(例如散热问题等)。对多核处理器来说,可利用的空间增多,散热问题就比较容易解决。这就是multiprocessor诞生的背景。

(1)SMT,同时多线程Simultaneous multithreading,简称SMT。

SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。SMT最具吸引力的是只需小规模改变处理器核心的设计,几乎不用增加额外的成本就可以显著地提升效能。多线程技术则可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间。这对于桌面低端系统来说无疑十分具有吸引力。Intel从3.06GHz Pentium 4开始,所有处理器都将支持SMT技术。 Intel的hyper-threading其实就是 two-thread SMT.

(2)CMP, 片上多处理器(Chip multiprocessors,简称CMP)

CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。与CMP比较, SMT处理器结构的灵活性比较突出。但是,当半导体工艺进入0.18微米以后,线延时已经超过了门延迟,要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。相比之下,由于CMP结构已经被划分成多个处理器核来设计,每个核都比较简单,有利于优化设计,因此更有发展前途。目前,IBM 的Power 4芯片和Sun的 MAJC5200芯片都采用了CMP结构。多核处理器可以在处理器内部共享缓存,提高缓存利用率,同时简化多处理器系统设计的复杂度。

(3)SMP,对称多处理器(Symmetric Multi-Processors,简称SMP)

是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。像双至强,也就是我们所说的二路,这是在对称处理器系统中最常见的一种(至强MP可以支持到四路,AMD Opteron可以支持1-8路)。也有少数是16路的。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对于多数的用户来说已经够用了。在高性能服务器和工作站级主板架构中最为常见,像UNIX服务器可支持最多256个CPU的系统,其实qemu从代码设计上也是最大支持256个virtual cpu。

(4)NUMA(Non-uniform Memory Access)

Core之间会共享总线、memory等资源。如果Core的数量较少,则没什么问题,但随着Core的增多,对总线以及memory带宽的需求就会显著增大,最终总线和memory会成为系统性能的瓶颈。
某些Core之间,独享总线和memory,称作Node。正常情况下,Core只访问Node内的memory,因此可以减轻对总线和memory的带宽需求。但是,有些场景下,Core会不可避免的访问其它Node的memory,这会造成很大的访问延迟。
因此,
NUMA(Non-uniform Memory Access),以内存访问的不一致性为代价,减轻对总线和memory的带宽需求。这种结构对进程调度算法的要求较高,尽量减少跨Node的内存访问次数,以提升系统性能。

3 SMT

3.1 MT

MT,multithreading,多线程。指的是在单一核心上执行多个线程。MT技术有两种,TMD和SMT。

3.1.1 TMD,Temporal multithreading

时分多线程。类似于作业系统的的分时多任务。一段时开只执行一个线程,多个线程交替执行。

TMD技术适用于RISC架构的CPU,在服务器上被普遍采用。
TMD的分时有两种调度方式。CMT和FMT。
CMT,Coarse-grained multithreading。CMT的思路是,执行线程1,当线程1等待指令时,切换到线程2。
FMT,Fine-grained multithreading。FMT的思路是,平均调度。


在简单结构的RISC CPU中,像MIPS指令集的CPU,FMT很有优势。FMT是RISC架构最常用的MT技术。
在较复杂的RISC CPU中,FMT并不一定有优势,采用CMT的CPU也有。

3.1.2 SMT,Simultaneous Multithreading

并发多线程。所有的指令混在一起执行。
SMT技术适用于CISC架构的CPU,在桌面和低端伺服器上,已经intel采用。

3.2 SMT

        同步多线程(SMT)是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上, 同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)的方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(CPI)计数较高的工作负载创造性能优势。 处理器采用超标量结构,最适于以并行方式读取及运行指令。同步多线程使您可在同一处理器上同时调度两个应用程序,从而利用处理器的超标量结构性质。

任何单个应用程序都不能完全使该处理器达到满负荷。当一个线程遇到较长等待时间事件时,同步多线程还允许另一线程中的指令使用所有执行单元。例如,当一个线程发生高速缓存不命中,另一个线程可以继续执行。同步多线程是 POWER5? 和 POWER6? 处理器的功能,可与共享处理器配合使用。

  SMT 对于商业事务处理负载的性能优化可达30%。在更加注重系统的整体吞吐量而非单独线程的吞吐量时,SMT 是一个很好地选择。

  但是并非所有的应用都能通过SMT 取得性能优化。那些性能受到执行单元限制的应用,或者那些耗尽所有处理器的内存带宽的应用,其性能都不会通过在同一个处理器上执行两个线程而得到提高。

        SMT可通过复制处理器上的结构状态, 让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。

        SMT最具吸引力的是只需小规模改变处理器核心的设计,几乎不用增加额外的成本就可以显著地提升效能。多线程技术则可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间。这对于桌面低端系统来说无疑十分具有吸引力。Intel从3.06GHz Pentium 4开始,所有处理器都将支持SMT技术。



4 IBM Power处理器的SMT、HMT、HT技术


SMT并发多线程是Power5以后芯片的新技术,它支持一个CPU内核同时处理两条指令,因此可以最高达到单一CPU两倍的处理速度。平均而言,打开SMT支持比关闭SMT能提升30%的CPU处理能力。SMT的能力来源于CPU中有许多寄存器,但是由于CPU通常每一时间点只能执行一条指令,即使是流水线方式,某个时间点真正执行占据运算器的也只有一条指令,其他并行的指令只能处于解码、寻址等状态。因此大部分寄存器都没有工作,处于闲置。

针对这种情况,IBM特别设计了一种寄存器结构,能够对CPU的处理状态进行跟踪,当发现有闲置的寄存器,而此时另一个线程又可以使用它的时候,就在保持当前进程的前提下,让另一个线程同时执行,就这样在同一时间,一个CPU可以处理两个线程的指令。实际上并非如此简单,因为一个RISC CPU通常用超流水线的方式同时执行多条指令,因此实现SMT需要进行比较复杂的判断,而且也并不能保证CPU永远可以执行两个线程。所以通常SMT并不能将性能翻倍,而只是提高30%左右。

与SMT类似, HMT硬件多线程技术,也是试图同时实行多条指令线程的一种技术,但 与SMT不同的是,在HMT必须等当前指令流空闲下来,才能切换到另一条指令线程执行。在CPU 执行指令发生中断的时候,就是当前指令流空闲的时候,通常可能原因是指令/数据缓存未命中(由于跳转和地址越界,缓存中,没有当前需要执行的指令)。由于HMT对指令是否并行执行的要求更为苛刻,对性能的提高并不十分显著。

IBM的Power系列CPU支持HMT,到Power5开始增添了对SMT的支持,其中HMT是无条件使用,而SMT则可能通过操作系统开关控制使用和关闭。

SMT技术不仅需要AIX操作系统支持,更需要power芯片硬件的支持,这种技术允许在一颗物理 CPU(core)上并发的的执行两个线程,通过这种技术可以大大提高CPU处理单元的利用率,一般可以使系统(CPU成为瓶颈的系统)性能提高30%以上,下面用图示做一下对比:
--SMT关闭的情况下,CPU在一个CPU Cycle情况下处理单元的利用率


--SMT开启的情况下,CPU在一个CPU Cycle情况下处理单元的利用率




参考:

1 处理器概念: http://labs.chinamobile.com/mblog/854855_199265

2 Topology: http://www.wowotech.net/pm_subsystem/cpu_topology.html

3 http://www.itpux.com/thread-256-1-1.html

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值