最近在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。

2 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

处理器CPU概念及CPU多线程相关推荐

  1. 多线程与单核cpu,多核cpu概念

    1.多线程在单核和多核CPU上的执行效率问题的讨论  a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)  多个cpu的话就可以在两个cpu中同时执 ...

  2. 对多线程程序,单核cpu与多核cpu如何工作相关的探讨

    对多线程程序,单核cpu与多核cpu如何工作相关的探讨 我们程序员在编码的时候,涉及到技术方案时,往往会忽略掉代码对性能方面的影响,或者没有足够的敏感度来帮助自己判断自己的技术方案对系统性能造成的影响 ...

  3. 多核CPU,单核CPU,超线程技术,与多线程程序深入浅出

    CPU核心单元组 他只是CPU的一部分,不能称为CPU,它负责逻辑运算,是最重要的一部分. CPU CPU是CPU核心单元组(逻辑处理单元),时钟电路,高速缓存器等等组合的一个整体,其中CPU核心单元 ...

  4. 对于多线程程序,单核cpu与多核cpu是怎么工作的

    此文中的大部分资料来自于网络上,我只是觉得把有道理的整理一下,方便以后查阅. 1.多线程在单核和多核CPU上的执行效率问题的讨论 a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个 ...

  5. c语言如何多核运行程序,对于多线程程序,单核cpu和多核cpu如何工作?

    1. 单核和多核CPU上多线程执行效率的探讨 a1: 多线程实际上是在单个CPU中按顺序执行的,但是系统可以帮助您切换该执行,但是它不是很快的(相反,是缓慢的) 如果有多个cpus,则可以同时在两个c ...

  6. CPU,多核,多线程,并发,并行,计算效率

    计算机原理:CPU.并发.并行.多核.多线程.多进程 0.计算机工作流程 0.0 基础概念:计算机组成 0.1 CPU(Central Processing Unit) (1)控制单元 (2)运算单元 ...

  7. CPU 和 CPU Core 有啥区别?多核 CPU?多个 CPU?单核 CPU 为何也支持多线程呢?

    由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行.更多的线程意味着线程创建销毁开销加大.上下文非常频繁,你的程序反而不能支持更高的T ...

  8. 【C++多线程编程学习(1)】-CPU个数、CPU核心数、CPU线程数

    转自:CPU个数.CPU核心数.CPU线程数(by kimsimple) CPU个数即CPU芯片个数. CPU核心数是指物理上,也就是硬件上存在着几个核心.比如,双核就是包括2个相对独立的CPU核心单 ...

  9. java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

最新文章

  1. 今日看点:“靠脸进站”的刷脸系统究竟是如何实现的
  2. 马库斯开喷GPT-3:演员而已,它根本不知道自己在说什么
  3. 开发日记-20190914 关键词 汇编语言王爽版 第四章
  4. Win8 X64下JDK版本切换问题
  5. 2.Spring Cloud Alibaba教程:Linux安装Nacos1.3.1以及配置MySQL持久化
  6. hdu 1281(二分图匹配+增广路)
  7. 【C# 调用 Go 语言】0x2 参数、返回值与类型转换
  8. mysql8安装版安装教程_MySQL8.0版本安装教程
  9. galago 介绍_赢得预装Linux的System76 Galago Pro笔记本电脑
  10. 靠谱测试人员需具备解决问题能力
  11. 微信雄踞,头条社交梦破碎?| 畅言
  12. Echarts数据可视化event图表事件的相关操作,开发全解+完美注释
  13. mysql 交互式和非交互式操作(interactive_timeout和wait_timeout)
  14. 为-微软-重写-TechNet Library-中-Microsoft Lync Server 2010
  15. 腾讯魔镜壁纸所在位置
  16. 西门子PCS7常见报警及故障说明
  17. 【vue】ramda.js在vue中的使用
  18. 怎么在计算机登录VMware,vmware虚拟机怎么用,vmware虚拟机的使用方法
  19. 美光称对华为恢复部分芯片出货 股价一度上涨10%
  20. 如何消除文法的二义性

热门文章

  1. Python多分类问题pr曲线绘制(含代码)
  2. Macbook的常用快捷键
  3. 【云图】如何制作东莞酒店地图?
  4. 为什么笔记本电脑自动关机_为什么我要放弃笔记本电脑
  5. Android Studio如何查看自己创建的SQLite数据库
  6. 游戏思考系列02:技能伤害计算流程(不涉及buff)
  7. 使用 Karabiner 在 Mac 上配置非苹果键盘
  8. Android 用代码查看本机保存的Wifi密码
  9. 十二星座 谁是 “小笨猪” ?
  10. r34300u和r53500u 哪个好