查看主机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,每个都需要自己的电源,冷却和其他硬件的连接消耗。因为它们都在同一个芯片上,所有具有更少的延迟,核心可以更快的通信。
二、如何正确查看主机上的cpu相关数量呢?
总核心数 = 物理CPU颗数 * 每颗CPU上核心数
总线程数(逻辑CPU数) = 物理CPU颗数 * 每颗CPU上核心数 * 每颗核心数上的线程 或者 总线程数(逻辑CPU数) = 总核心数 * 每颗核心数上的线程
注意:此处的 ‘线程’ 和 ‘操作系统内的线程’ 不是一回事,从cpu的角度来看,一个线程(“thread of execution”的简写)只是一个有序的指令序列,告诉计算机该做什么。
第一种方式:
查看主机上物理cpu的颗数
- [root@localhost ~]# cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l
- 2
查看主机上每颗cpu上的核心数
- [root@localhost ~]# cat /proc/cpuinfo |grep "cpu cores"|sort -u
- cpu cores : 4
查看主机上总逻辑CPU数量(方式1)
- [root@localhost ~]# cat /proc/cpuinfo |grep "core id"|wc -l
- 8
快速查看主机上总逻辑CPU数量(方式2)
- [root@localhost ~]# nproc --all
- 8
快速查看主机上总逻辑CPU数量(方式3)
- [root@localhost ~]# getconf _NPROCESSORS_ONLN
- 8
快速查看主机上总逻辑CPU数量(方式4)
- [root@localhost ~]# cat /sys/devices/system/cpu/online
- 0-7
备注:0-7 : 从第0个到第7个
第二种方式:
使用lscpu 命令

- [root@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
下图是上述处理器的详细信息,如果你也对你的服务器核数不确定时,可以先去官网进行查询:
另外补充下,如何在系统内判断主机是否开启了超线程(HT)技术呢?请继续往下看
第一种方式:
lscpu命令

- [root@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
第二种方式
- [root@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架构。如果文中有错别观点之处,还请大家及时指出,我会及时改正哈。希望有更深的探讨。文章有些参考内容均在文末有链接。
查看主机CPU信息的更多相关文章
- windows上用命令行我们查看机器cpu信息(使用计算器-程序员模式-四字时,查看系统类型)
查看系统是64位还是32位 C:\Users\qingshuic>wmic os get osarchitecture OSArchitecture 64-bitC:\Users\qingshu ...
- CentOS中查看物理CPU信息的方法
1.概念 [1]物理CPU:实际Server中插槽上的CPU个数.物理cpu数量:可以数不重复的 physical id 有几个.[2]逻辑CPULinux用户对 /proc/cpuinfo 这个文件 ...
- Android Studio 查看手机CPU信息
在Android开发中,我们想要获取手机是什么CPU架构,可以通过下面方式: 1.进入adb 终端 adb shell 2.进入proc目录 cd /proc/ 3.查看cpu信息 cat cpuin ...
- linux查看系统cpu信息
# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即 ...
- 查看手机cpu信息
adb shell getprop ro.product.cpu.abi
- Linux下 查看CPU信息
参考: Linux和Windows下查看cpu和core个数 Linux下 查看CPU信息 1.查看完整CPU信息: $ cat /proc/cpuinfo 2.查看逻辑cpu个数: $ cat /p ...
- linux常用查看硬件设备信息命令
转载:http://blog.chinaunix.net/uid-26782198-id-3242120.html # uname -a # 查看内核/操作系统/CPU信息 ...
- linux常用查看硬件设备信息命令(转载)
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue ...
- 转 linux常用查看硬件设备信息命令
转载自:http://blog.chinaunix.net/uid-26782198-id-3242120.html 系统 # uname -a # 查看内核/操作系统/C ...
随机推荐
- websocket练习
html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- qt5-QPushButton按钮
Win::Win(QWidget *parent) //构造函数体 : QWidget(parent) //执行父类初始化操作 { //创建按钮方式一 ,);//重置窗口大小 this->set ...
- Python前端HTML
一.web标准介绍 web标准: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web标准规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...
- 用CSS如何实现单行图片与文字垂直居中
图片样式为 以下为引用的内容:.style img{vertical-align:middle;.....} 如果STYLE中有其它如INPUT或其它内联元素可写成 以下为引用的内容:.style i ...
- Angular 主从组件
此刻,HeroesComponent 同时显示了英雄列表和所选英雄的详情. 把所有特性都放在同一个组件中,将会使应用“长大”后变得不可维护. 你要把大型组件拆分成小一点的子组件,每个子组件都要集中精力 ...
- Poj 3057 未AC http://poj.org/showsource?solution_id=15175171
<span style="font-size:18px;">#include <iostream> #include <cstdio> #inc ...
- centos 中 redis 的安装
安装流程 Wget http://download.redis.io/releases/redis-5.0.4.tar.gz tar xzf redis-5.0.4.tar.gz mv redis-5 ...
- Spring boot之JPA/Hibernate/Spring Data
1.什么是JPA? JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA(Java Per ...
- SpringBoot 单文件和多文件上传
单.多文件上传:单文件上传使用upload.html ,多文件上传使用uploads.html 创建一个Springboot application, POM 中加入 spring-boot-star ...
- linux输出与查看的几种方式
输出的几种方式:echo/ tee echo "postgres install Failed !!!!!!" | tee -a "$Install_log"# ...