设为首页 收藏本站
查看: 1052|回复: 0

[经验分享] 如何用正确的姿势查看 主机系统的CPU信息

[复制链接]

尚未签到

发表于 2017-6-21 17:34:41 | 显示全部楼层 |阅读模式
DSC0000.png

  一、关于CPU的几个概念
  CPU的作用
  计算机中的中央处理单元(CPU)执行基本的计算工作 -- 运行程序。但是,一个单核的CPU同一时间只能一次执行一个任务,为了提高计算机的处理能力,也就出现了多CPU,超线程(HT)和多核CPU的技术。
  大多数计算机只有一个物理CPU。单个CPU可能具有多个内核或超线程技术,但是仍然只有一个物理CPU插入主板上的单个CPU插槽。在超线程和多核CPU出现之前,人们试图通过添加额外的CPU,为计算机增加额外的处理能力。这需要一个带有多个CPU插槽的主板 --将多个CPU插入不同的插槽。主板还需要额外的硬件将这些CPU插槽连接到RAM和其他资源。这里有很多开销 -- 如果CPU需要相互通信,则会有额外的延迟,具有多个CPU的系统将消耗更多的电力,并且主板需要更多的插座和硬件以及电路。
  在个人pc上,有多颗cpu的不多,不过在如今的服务器上,物理cpu一般都是2颗标配。因为服务器需要更多的处理能力
  超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。
  CPU之超线程(HT)
  超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。CPU 仍然是单个CPU,而操作系统则看到了2个CPU,当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。
  多核CPU
  最初,CPU只有有一个核心。这意味着物理CPU有一个单一的中央处理单元。为了提高性能,制造商添加额外的“核心”或中央处理单元。双核CPU有两个中央处理单元,所以操作系统看起来是两个CPU。不同的进程可以同时使用每个核心。这样可以加快系统处理速度,因为这时的计算机可以同时执行多项任务。
  与超线程不同,双核CPU在 CPU 芯片上实际上有两个中央处理单元,四核CPU有四个中央处理单元,八核CPU有八个中央处理单元,等等。这有助于显著提高处理的性能,同时保持物理CPU单元的小型化,使其更适合单个插槽。只需要单个CPU插槽即可插入一个CPU单元 --- 而不是四个不同的CPU插槽,四个不同的CPU,每个都需要自己的电源,冷却和其他硬件的连接消耗。因为它们都在同一个芯片上,所有具有更少的延迟,核心可以更快的通信。
  本文属于原创内容,转载还请注明出处以及链接!飞走不可:http://www.cnblogs.com/hanyifeng/p/6556161.html
  二、如何正确查看主机上的cpu相关数量呢?
  总核心数 = 物理CPU颗数 * 每颗CPU上核心数
  总线程数逻辑CPU数) = 物理CPU颗数 * 每颗CPU上核心数 * 每颗核心数上的线程  或者 总线程数(逻辑CPU数) = 总核心数 * 每颗核心数上的线程
  注意:此处的 ‘线程’ 和 ‘操作系统内的线程’ 不是一回事,从cpu的角度来看,一个线程(“thread of execution”的简写)只是一个有序的指令序列,告诉计算机该做什么。
  第一种方式:
  查看主机上物理cpu的颗数



[iyunv@localhost ~]# cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l
2
  查看主机上每颗cpu上的核心数



[iyunv@localhost ~]# cat /proc/cpuinfo |grep "cpu cores"|sort -u
cpu cores    : 4
  查看主机上总逻辑CPU数量(方式1)



[iyunv@localhost ~]# cat /proc/cpuinfo |grep "core id"|wc -l
8
  快速查看主机上总逻辑CPU数量(方式2)



[iyunv@localhost ~]# nproc --all
8
  快速查看主机上总逻辑CPU数量(方式3)



[iyunv@localhost ~]# getconf _NPROCESSORS_ONLN
8
  快速查看主机上总逻辑CPU数量(方式4)



[iyunv@localhost ~]# cat /sys/devices/system/cpu/online
0-7
  备注:0-7 :  从第0个到第7个
  第二种方式:
  使用lscpu 命令



[iyunv@localhost ~]# lscpu
...省略输出
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
...省略输出
Model name:            Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz


  从上面可以看出以下信息:
  Socket(s) : 物理cpu 颗数  2颗
  Core(s) per socket : 每颗CPU上核心数   4个
  Thread(s) per core : 每个核心的线程数  1个
  CPU(s):总的逻辑CPU数
  所以该机器上最大的线程数(逻辑CPU数)就是: 2 CPU * 4 Cores * 1 threads = 8 threads
  上面是没有开启超线程技术,如果开启超线程(HT)后,则应该是 2 CPU * 4 Cores * 2 threads = 16 threads
下图是上述处理器的详细信息,如果你也对你的服务器核数不确定时,可以先去官网进行查询:
DSC0001.png

DSC0002.png

  另外补充下,如何在系统内判断主机是否开启了超线程(HT)技术呢?请继续往下看
  第一种方式:
  lscpu命令



[iyunv@localhost ~]# lscpu
...省略输出
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
...省略输出
  Thread(s) per core 为1 则表示禁用了超线程或者该CPU不支持超线程,如果为2 则表示启用了HT
  第二种方式



[iyunv@niunyun ~]# grep -E "cpu cores|siblings|physical id" /proc/cpuinfo |xargs -n 11 |sort -u
physical id : 0 siblings : 8 cpu cores : 4
physical id : 1 siblings : 8 cpu cores : 4
  从这里看下, siblings 是 cpu cores 的 2倍,这说明启用了超线程。如果没启用HT,则是相同的数字。
  本文只是浅谈了cpu如何查看核心数、线程数等方法,更深的还有线程SMP 、NUMA架构。如果文中有错别观点之处,还请大家及时指出,我会及时改正哈。希望有更深的探讨。文章有些参考内容均在文末有链接。
  本文属于原创内容,转载还请注明出处以及链接!飞走不可:http://www.cnblogs.com/hanyifeng/p/6556161.html
  文中参考链接:
  https://www.howtogeek.com/194756/cpu-basics-multiple-cpus-cores-and-hyper-threading-explained/
  https://arstechnica.com/business/2011/04/ask-ars-what-is-a-cpu-thread/
  http://insidehpc.com/2016/12/best-threads-per-core/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386375-1-1.html 上篇帖子: runv containerd 流程分析 下篇帖子: 运维学习笔记(一)之T01-01虚拟机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表