CPU篇---理清"核"概念-01

  • 引言
  • 基础概念
  • 起源:单核CPU和超线程
  • 还有一个转折点:多核架构的出现
  • 1 LCPU = 1个线程
  • 逻辑CPU与虚拟CPU
    • 如何知道Linux系统有多少核心和处理器?
    • 获取逻辑cpu数量(包括超线程逻辑cpu数量):
    • 获得物理cpu/核心的数量:

引言

性能测试中当我们尝试使用 Linux 命令(如 nproc 或 lscpu )了解服务器CPU架构和性能参数时,我们经常发现我们无法正确解释其结果,因为我们混淆CPU、物理核、逻辑核概念等术语。


基础概念

  • CPU(Central Processing Unit): 中央处理单元,CPU不等于物理核,更不等于逻辑核。
  • 物理核(physical core/processor): 可以看的到的,真实的cpu核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。
  • 逻辑核(logical core/processor,LCPU): 在同一个物理核内,逻辑层面的核。(比喻,像动画片一样,我们看到的“动画”,其实是一帧一帧静态的画面,24帧/s连起来就骗过了人类的眼睛,看起来像动起来一样。逻辑核也一样,物理核通过高速运算,让应用程序以为有两个cpu在运算)。
  • 超线程(Hyper-threading,HT):超线程可以在一个逻辑核等待指令执行的间隔(等待从cache或内存中获取下一条指令),把时间片分配到另一个逻辑核。高速在这两个逻辑核之间切换,让应用程序感知不到这个间隔,误认为自己是独占了一个核。

关系: 一个CPU可以有多个物理核。如果开启了超线程,一个物理核可以分成n个逻辑核,n为超线程的数量。


起源:单核CPU和超线程

在多核,虚拟或逻辑cpu之类的概念之前,在奔腾处理器时代,大多数计算机安装在他们的主板上的单个芯片相当大,我们称之为微处理器、处理器或简称CPU。只有少数企业计算机或需要更多处理能力的大型服务器可以在同一块板上安装2个或更多这些芯片:它们是多处理器系统。

这些芯片通过连接器或插槽与其他主板元件通信。

计算很简单:这么多连接器或插槽有一主板,一台电脑最多只能有这么多cpu。如果你想要更多的处理能力,你只需要寻找一个拥有更多处理器的板,或者等待它们的发展来提供更高的性能。

但随后英特尔意识到多处理器系统的不同处理器之间的通信效率非常低,因为它们必须通过系统总线完成,而系统总线通常以低得多的速度工作。这通常导致出现瓶颈,使得无法充分利用每个CPU提供的计算能力。

为了改善这种情况,开发了超线程技术(HT)。HT是关于在相同的芯片中复制一些CPU内部组件,例如寄存器或一级缓存,以便在两个不同的执行线程之间共享信息,而不必通过具有相应瓶颈和速度损失问题的系统总线。这也允许如果一个进程必须等待中断,另一个进程可以继续使用CPU而不停止它。

这样就有可能加快数个计算过程,并开始提供比传统处理器性能更好的处理器。操作系统被欺骗了,因为它被提供了两个虚拟或逻辑cpu (LCPU),而不是单个cpu,因为它被允许“同时”执行两个进程。但是值得注意的是,不可能产生传统处理器两倍的处理能力,也不可能提供完全的并行处理能力。

因为一个core中只有一个ALU,传统core模型中,ALU每执行一条指令都需要等待下一条指令送达,这小段时间如果能够被利用起来,就可以提高ALU计算效率了,因此才有了一套ALU,两套寄存器架构的core。

因此,从Linux或其他操作系统的角度来看,一个只有一个核心处理器但HT的机器就像有两个cpu一样出现在我们眼前。但是这是在同一个物理cpu中运行的两个逻辑cpu。


还有一个转折点:多核架构的出现

但正如在上一节所述,尽管具有超线程的CPU提供了更多的处理能力,但它们无法作为2个完整且独立的处理器运行,因此决定进一步小型化所有处理器组件并将它们封装在单个芯片中 。这些封装处理器中的每一个都称为核心,它允许通过共享相同芯片的内部总线实现它们之间更快的通信。从那一刻起,不再需要转向系统总线,速度要慢得多。


与 HT 技术不同,现在我们有多个完全独立的 CPU 用于所有意图和目的,每个核心一个。实际上,从性能的角度来看,拥有单个多核处理器比在同一块板上的同等数量的单核 CPU 更好。当然,拥有2个双核处理器仍然比单核处理器更好,但更好的是拥有一个四核处理器。

在操作系统级别,物理四核处理器将显示为4 cpu计算机。但这些将是4个逻辑CPU或非物理LCPU。如果处理器另外提供超线程技术,那么诸如 top 之类的命令将指示系统中有8个cpu,但是在没有超线程的情况下单个八核处理器性能高于8个Lcpu。


1 LCPU = 1个线程

最后,通常我们会发现具有4个线程的处理器,每个核心2个线程以及类似的东西。这只是可以同时运行的执行线程或处理作业的数量,这相当于 LCPU 提供的处理能力。如果处理器允许每个核2个线程,则意味着它是 HT 。否则,匹配线程的内核数量是正常的。


逻辑CPU与虚拟CPU

虚拟CPU术语与逻辑CPU相当,但它增加了一定的细微差别:它在计算虚拟化方面更加框架化。它指的是从底层主机硬件映射到虚拟机的那些cpus,可以是物理或逻辑cpus,HT。通常,来自主机服务器的1个逻辑cpu映射到虚拟机内的1个虚拟cpu,因此它们几乎是类似的术语。

如何知道Linux系统有多少核心和处理器?

查看Linux上存在的处理器数量的最简单和最短的方法,因为它是coreutils 的一部分而被广泛扩展:

~$ nproc --all
8

另一种获得相同结果的方法是lscpu命令,它也允许我们从处理器获取额外信息:

~$ lscpu | grep 'CPU(s)'
CPU(s):                8
On-line CPU(s) list:   0-7
NUMA node0 CPU(s):     0-7

或者我们可以查询/proc filesystem中的cpuinfo文件:

〜$ grep processor / proc / cpuinfo | wc - l8

/pro /cpuinfo文件中有关于这些处理器的许多其他详细信息,包括CPU型号和内核数

~$ cat /proc/cpuinfo | grep "model name"
model name  : Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
model name  : Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
~$ cat /proc/cpuinfo | grep "cpu cores"
cpu cores   : 4
cpu cores   : 4

如上,我们示例中的机器有2个处理器,每个处理器有4个核心。

由于HyperThreading技术和其他处理器增强功能,我们可能需要区分物理CPU和逻辑CPU:

获取逻辑cpu数量(包括超线程逻辑cpu数量):

~$ lscpu -p | egrep -v '^#' | wc -l
4

获得物理cpu/核心的数量:

~$ lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l
8

我们也可以使用其他工具来获取硬件信息,比如dmidecode,但是我们需要root权限:

~# dmidecode -t 4 | egrep 'Socket Designation|Count'Socket Designation: CPUSocketCore Count: 8Thread Count: 8

如果运行上述命令,您会发现系统中存在多个CPU或多个内核,您还需要确保当前的Linux内核具有多处理器支持(SMP,Symmetric MultiProcessing):

$ uname -a
Linux 7dgroup2 3.10.0-514.6.2.el7.x86_64 #1 SMP Thu Feb 23 03:04:39 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

最后,我们来看下查看cpu参数的命令

$ lscpu
Architecture:          x86_64  #架构
CPU op-mode(s):        32-bit, 64-bit #运行方式
Byte Order:            Little Endian  #字节顺序
CPU(s):                2  #逻辑cpu颗数
On-line CPU(s) list:   0,1  #在线CPU
Thread(s) per core:    2  #每个核心线程
Core(s) per socket:    1  #每个cpu插槽核数/每颗物理cpu核数
Socket(s):             1  #cpu插槽数
NUMA node(s):          1  #非统一内存访问节点
Vendor ID:             GenuineIntel  #cpu厂商ID
CPU family:            6   #cpu系列
Model:                 63  #型号编号
Model name:            Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz #型号名称
Stepping:              2  #步进
CPU MHz:               2494.222  #cpu主频
BogoMIPS:              4988.44
Hypervisor vendor:     KVM  #虚拟化架构
Virtualization type:   full  #cpu支持的虚拟化技术
L1d cache:             32K  #一级缓存(具体为L1数据缓存)
L1i cache:             32K  #一级缓存(具体为L1指令缓存)
L2 cache:              256K #二级缓存
L3 cache:              30720K #三级缓存
NUMA node0 CPU(s):     0,1

CPU篇---理清“核“概念-01相关推荐

  1. CPU 主频,核数 参数解读 物理CPU,逻辑CPU,物理核 概念辨析

    Q1: CPU高主频好还是多核数好? 游戏需求 如果是主打游戏,由于游戏需要的是最简单粗暴的计算工作,这方面多核心有点无用武之地.因此,目前主流游戏都是双核心调用,四核或者更多核心的比较少. 也就是说 ...

  2. CPU、物理核、逻辑核概念与关系

    CPU.物理核.逻辑核概念与关系 文章将解答如下问题 一个物理核可以分成两个逻辑核,是吗? 我们常说的电脑是8核的,服务器是64核的,指的是逻辑核,还是物理核? 怎么查看Linux服务器的物理核.逻辑 ...

  3. Linux性能优化:CPU篇

    本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理. 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数. 可运行进程:使用 CPU 或等待使用 ...

  4. ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制

    ESP32双核CPU,利用核0实现蓝牙打印机打印,核1完成常规控制 目的 程序编制 总结 目的 开发一个仪表,在使用过程中发现用ESP32控制打印机和主控制有冲突,会造成数据采集流程慢.而控制蓝牙打印 ...

  5. Linux下cpu和绑核

    基本概念 cpu个数 是指物理上cpu的个数. cpu核心数是指物理上,也就是硬件上存在着几个核心.比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组. cpu ...

  6. 菜鸟学Linux 第107篇笔记 zabbix概念和安装

    菜鸟学Linux 第107篇笔记 zabbix概念和安装 内容总览 SNMP catti nagios zabbix Various Monitoring Functions Zabbix Agent ...

  7. 锐龙cpu可以无显卡装linux吗,AMD锐龙5 3400G实测:买CPU送的核显能吃鸡?但总体提升还是有限...

    原标题:AMD锐龙5 3400G实测:买CPU送的核显能吃鸡?但总体提升还是有限 Hello大家好,我是兼容机之家的咖啡. 在今年夏天的时候,AMD发布了锐龙3000系列处理器,除了几款不带集显的锐龙 ...

  8. CPU数,核心数,线程数的关系

    1.CPU数,核心数,线程数的关系 1.存在形式不同: (1)CPU数:独立的中央处理单元,体现在主板上就是有多少个CPU槽位 (2)CPU核心数(CPU cores):在每一个CPU上,都可能有多核 ...

  9. Java获取当前运行的CPU是几核的

    System.out.println(Runtime.getRuntime().availableProcessors());//获取CPU是几核的

最新文章

  1. hdu 2563(递推)
  2. [C++ STL] 各容器简单介绍
  3. 简单易懂的 pwnable.kr 第二题[collision]Writeupt
  4. C++数组(一维、二维、三维)的动态分配new、初始化memset和释放delete
  5. AT3950-[AGC022E]Median Replace【贪心,dp】
  6. mysql database table_mysqldump database table
  7. Spring集合类型属性注入
  8. 配置centos7下的Apache服务
  9. 进程缓存和缓存服务,如何抉择?
  10. Python游戏开发入门2 壁球小游戏与图像的基本使用
  11. Java基础,使用双循环嵌套,实现输出1-1000之间所有的素数,并统计有多少个
  12. axios 上传文件 封装_axios 封装上传文件的请求方法
  13. 遗传算法应用于随机森林的调参过程
  14. php二级分销数据表的设计,无限级分销系统数据库表设计
  15. 努力工作,却永不升职,是种怎样的体验?
  16. java -- 随机获取字母或者数字
  17. MySQL设置utf8mb4编码
  18. 数据分析1——系统认识数据分析
  19. mtk android平台学习,MTK平台的驱动学习——(阶段1规划篇)
  20. 一对一直播系统源码,一对一直播系统开发

热门文章

  1. 防摇控制matlab,基于MATLAB集装箱起重机防摇系统仿真
  2. JFinal的BaseDao
  3. 第3-7课:推箱子游戏
  4. 【嵌入式07】定时器amp;PWM练习
  5. 离散型调节变量——该如何设定模型?
  6. python定价_Python|机器学习与量化交易、定价高级训练营陆家嘴学
  7. DDR3L和LPDDR3区别
  8. java版京东抢购秒杀商品
  9. spotlight全屏弹窗图片幻灯片插件
  10. python爬虫基础(一)