查看主机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的颗数

[[email protected] ~]# cat /proc/cpuinfo |grep "physical id" | sort -u |wc -l
2

查看主机上每颗cpu上的核心数

[[email protected] ~]# cat /proc/cpuinfo |grep "cpu cores"|sort -u
cpu cores    : 4

查看主机上总逻辑CPU数量(方式1)

[[email protected] ~]# cat /proc/cpuinfo |grep "core id"|wc -l
8

快速查看主机上总逻辑CPU数量(方式2)

[[email protected] ~]# nproc --all
8

快速查看主机上总逻辑CPU数量(方式3)

[[email protected] ~]# getconf _NPROCESSORS_ONLN
8

快速查看主机上总逻辑CPU数量(方式4)

[[email protected] ~]# cat /sys/devices/system/cpu/online
0-7

备注:0-7 :  从第0个到第7个

第二种方式:

使用lscpu 命令

[[email protected] ~]# 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命令

[[email protected] ~]# 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

第二种方式

[[email protected] ~]# 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架构。如果文中有错别观点之处,还请大家及时指出,我会及时改正哈。希望有更深的探讨。文章有些参考内容均在文末有链接。

时间: 2024-10-09 10:04:14

查看主机CPU信息的相关文章

CentOS中查看物理CPU信息的方法

CentOS中查看物理CPU信息的方法 1.概念 [1]物理CPU:实际Server中插槽上的CPU个数.物理cpu数量:可以数不重复的 physical id 有几个.[2]逻辑CPULinux用户对 /proc/cpuinfo 这个文件肯定不陌生. 它是用来存储cpu硬件信息的信息内容分别列出了processor 0 – n 的规格.这里需要注意,如果你认为n就是真实的cpu数的话, 就大错特错了一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一

查看Linux cpu信息

在linux系统下可以通过cat /proc/cpuinfo来查看本机上cpu的相关信息,通过processor可以判断逻辑cpu的个数,physical id可以判断物理cpu的个数,通过cpu cores来判断每个cpu内的核数,通过siblings和cpu cores的对比可以判断是否支持超线程. [[email protected] ~]$ cat /proc/cpuinfo |grep processor|wc -l 32 通过以上命令可以判断本机内的逻辑cpu个数为32 [[emai

(转)linux常用查看硬件设备信息命令

场景:在一篇博客中看到这些总结性命令,感觉很实用就转载,以后用到进行相关的整理 系统 # uname -a               # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue   # 查看操作系统版本# cat /proc/cpuinfo      # 查看CPU信息# hostname               # 查看计算机名# lspci -tv              # 列出所有PCI设备# lsusb -tv              #

linux常用查看硬件设备信息命令

linux常用查看硬件设备信息命令  系统  # uname -a # 查看内核/操作系统/CPU信息  # head -n 1 /etc/issue # 查看操作系统版本  # cat /proc/cpuinfo # 查看CPU信息  # hostname # 查看计算机名  # lspci -tv # 列出所有PCI设备  # lsusb -tv # 列出所有USB设备  # lsmod # 列出加载的内核模块  # env # 查看环境变量  资源  # free -m # 查看内存使用量

linux常用查看硬件设备信息命令(转载)

系统 # uname -a                                       # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue                              # 查看操作系统版本 # cat /proc/cpuinfo                                  # 查看CPU信息 # hostname                                            

查看硬件设备信息命令

uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # 查看计算机名 lspci -tv # 列出所有PCI设备 lsusb -tv # 列出所有USB设备 lsmod # 列出加载的内核模块 env # 资源: free -m # 查看内存使用量和交换区使用量 df -h # 查看各分区使用情况 du -sh <目录名> # 查看指定目录的大小 grep

获取CPU信息

1 查看手机CPU信息 cmd——adb shell——cd /proc------cat cpuinfo 2 获取cpu的是arm指令集,armv7指令集.还是neon指令集 /** * * [获取cpu类型和架构] * * @return * 三个参数类型的数组,第一个参数标识是不是ARM架构,第二个参数标识是V6还是V7架构,第三个参数标识是不是neon指令集 */ public static Object[] getCpuArchitecture() { if ((Integer) mA

ADB——查看手机设备信息

查看设备信息 查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery ''' Current Battery Service state: AC powered: false USB powered: true Wireless powered: false status: 2 health: 2 present: true level: 44 scale: 100 voltage: 3872 temp

Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数

文章转载:http://blog.snsgou.com/post-793.html 1.查看物理CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l1 2.查看逻辑CPU的个数 [[email protected] ~]# cat /proc/cpuinfo |grep "processor"|wc -l4 3.查看CPU是几核(即,核心数) [[em