如何用正确的姿势查看 主机系统的CPU信息

一、关于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的颗数
[root@localhost ~]# cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l
查看主机上每颗cpu上的核心数
[root@localhost ~]# cat /proc/cpuinfo |grep "cpu cores"|sort -u
cpu cores :
查看主机上总逻辑CPU数量(方式1)
[root@localhost ~]# cat /proc/cpuinfo |grep "core id"|wc -l
快速查看主机上总逻辑CPU数量(方式2)
[root@localhost ~]# nproc --all
快速查看主机上总逻辑CPU数量(方式3)
[root@localhost ~]# getconf _NPROCESSORS_ONLN
快速查看主机上总逻辑CPU数量(方式4)
[root@localhost ~]# cat /sys/devices/system/cpu/online
-
备注:0-7 : 从第0个到第7个
第二种方式:
使用lscpu 命令
[root@localhost ~]# lscpu
...省略输出
CPU(s):
On-line CPU(s) list: -
Thread(s) per core:
Core(s) per socket:
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
下图是上述处理器的详细信息,如果你也对你的服务器核数不确定时,可以先去官网进行查询:


另外补充下,如何在系统内判断主机是否开启了超线程(HT)技术呢?请继续往下看
第一种方式:
lscpu命令
[root@localhost ~]# lscpu
...省略输出
CPU(s):
On-line CPU(s) list: -
Thread(s) per core:
Core(s) per socket:
Socket(s):
...省略输出
Thread(s) per core 为1 则表示禁用了超线程或者该CPU不支持超线程,如果为2 则表示启用了HT
第二种方式
[root@niunyun ~]# grep -E "cpu cores|siblings|physical id" /proc/cpuinfo |xargs -n |sort -u
physical id : siblings : cpu cores :
physical id : siblings : cpu cores :
从这里看下, 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/
如何用正确的姿势查看 主机系统的CPU信息的更多相关文章
- 如何查看linux系统的版本信息
前言 有时候需要查看linux系统的版本信息,本文将对此简单介绍. 方法 1.输入"uname -a ",可显示电脑以及操作系统的相关信息. 2.输入"cat /etc/ ...
- 查看Linux系统下Raid信息
软件raid:只能通过Linux系统本身来查看 cat /proc/mdstat 可以看到raid级别,状态等信息. 硬件raid: 最佳的办法是通过已安装的raid厂商的管理工具来查看,有cmdli ...
- linux系统下cpu信息的查看
在Linux系统中,提供了proc文件系统显示系统的软硬件信息. 如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到. 基于不同指令集(ISA)的CPU产生的/ ...
- 查看Linux系统相关版本信息
1.“uname -a” 查看电脑以及操作系统的相关信息 2.“cat /proc/version” 查看运行的内核版本 3."cat /etc/redhat-release", ...
- 查看Android系统中硬件信息的文件
文件目录: 使用Linux命令,进入到/proc目录 进入/proc目录,可以查看内存信息(memoinfo)或CPU信息(cpuinfo),使用cat命令
- 如何用正确的姿势编写jQuery插件
在园子里有很多关于jQuery插件的文章,尤其 以下2篇文章: 不定义JQuery插件,不要说会JQuery jQuery插件开发精品教程,让你的jQuery提升一个台阶 这2位大神基础讲的很清楚,在 ...
- 查看linux系统版本相关信息
1.查看内核版本:cat /proc/version A机器 root@debian:~# cat /proc/version Linux version -- (ty@debian) ( (Debi ...
- 查看ubuntu系统的版本信息
显示如下 Linux version 4.10.0-28-generic (buildd@lgw01-12) linux内核版本号 gcc version 5.4.0 20160609 gcc编译器版 ...
- linux系统物理cpu信息查询
1.查看CPU型号 cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 2.查看物理CPU的个数 ca ...
随机推荐
- Tomcat使用常见问题
1,启动服务器,闪退问题 原因:tomcat软件是用java语言开发的,软件启动时,会默认到系统环境变量中查找一个名叫JAVA_HOME的变量.这个变量的作用是找到tomcat启动所需的JVM. ...
- 《Effective Objective-C 2.0》 读后总结
感觉自己最近提升很慢了.然后去找了一些面试题看看.发现自己自大了.在实际开发中,让我解决bug.编写功能,我有自信可以完成.但是对项目更深层的思考,我却没有.为了能进到自己的目标BAT.也为了让自己更 ...
- int装箱比较
看过Effctive-java 这本书的人多少都会记得,int类型的值,-128到127之间的数,会进行缓存. 所以在心间装箱对象 new Integer()的时候,如果在此范围则不会新建对象而是使用 ...
- android之intent显式,显式学习
intent,意图 当从一个Activity到另一个Activity时调用,这里重点学习显式,隐式的使用 使用语句上的区别: 隐式意图: 显式意图: setAction ...
- 关于post与get请求参数存在特殊字符问题
遇到项目中存在文本编辑框输入特殊字符 比如:# ? & 空格 , 导致后台接受不到参数问题,对可能存在特殊字符的参数进行encodeURIComponent; C#后台接受参数不需要解码 也可 ...
- 2017年2月16日 分析下为什么spring 整合mybatis后为啥用不上session缓存
因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...
- phpcms如何做企业站--> 替换首页最初操作
首先用一个静态首页的模板,通过cms进行替换做成一个有后台的 首页的替换流程首先要先把静态网页做出来,拿这个页面去替换 页面所有的文件都在这,做静态页面的文件 现在要做的是把这些文件复制一下拿到php ...
- AOP的简单练习
---恢复内容开始--- 1.AOP的主要作用及概念简介 AOP最大的用处在于事务处理上,业务层在项目中主要负责以下的操作: ·调用数据层进行处理: ·进行事务的处理: ·关闭数据库的连接操作: 但在 ...
- 丘吉尔,最后一次演讲-Never Give Up
丘吉尔一生最精彩的演讲,也是他最后一次演讲.在剑桥大学的一次毕业典礼上,整个会堂有上万个学生,他们正在等待丘吉尔的出现.正在这时,丘吉尔在他的随从陪同下走进了会场并慢慢走向讲台,他脱下他的大衣交给随从 ...
- [译]如何在Web开发中使用Python
[译]如何在Web开发中使用Python 原文:HOWTO Use Python in the Web 摘要 这篇文档展示了Python如何融入到web中.它介绍了几种Python结合web服务器的方 ...