基本概念

  • 物理CPU:物理CPU就是插在主机上的真实的CPU硬件,在Linux下可以数不同的physical id 来确认主机的物理CPU个数。
  • 核心数:物理CPU下一层概念就是核心数,我们常常会听说多核处理器,其中的核指的就是核心数。在Linux下可以通过cores来确认主机的物理CPU的核心数。
  • 逻辑CPU:核心数下一层的概念是逻辑CPU,逻辑CPU跟超线程技术有联系,假如物理CPU不支持超线程的,那么逻辑CPU的数量等于核心数的数量;
    如果物理CPU支持超线程,那么逻辑CPU的数目是核心数数目的两倍。在Linux下可以通过 processors 的数目来确认逻辑CPU的数量。
  • 超线程:超线程是英特尔开发出来的一项技术,使得单个处理器可以象两个逻辑处理器那样运行,这样单个处理器以并行执行线程。
    这里的单个处理器也可以理解为CPU的一个核心;这样便可以理解为什么开启了超线程技术后,逻辑CPU的数目是核心数的两倍了。

在Linxu下查看物理cpu、核心数、逻辑CPU和是否支持超线程

关于CPU的一些信息可在 /proc/cpuinfo 这个文件中查看
cat /proc/cpuinfo
内容是以 processor (也就是逻辑CPU)为基本单元进行划分的,processor 下的 core id表示这个逻辑CPU属于哪个核心,而physical id则表示这个核心或者说逻辑CPU属于哪个物理CPU。
image.png

  • 查看物理CPU数量
    物理CPU就是不同的phycical id的个数,可通过下面命令实现:

cat /proc/cpuinfo | grep 'physical id' | uniq |wc -l
或者
grep 'physical id' /proc/cpuinfo |sort -u|wc -l
uniq是为了去掉多个逻辑CPU属于同一个物理CPU的重复记录。

  • 查看核心数
    核心数就是不同core id的个数,可通过下面的命令实现

cat /proc/cpuinfo | grep 'core id' | uniq |wc -l

  • 查看逻辑CPU数目
    逻辑CPU就是processor的数目

cat /proc/cpuinfo | grep 'processor' | wc -l
或者
grep -c processor /proc/cpuinfo
查看逻辑CPU时不需要去重

  • 查看是否支持超线程
    如果支持超线程就是说同一个core下会有两个processors,这样可以简单地观察/proc/cpuinfo中的内容,
    如果两个的processor下的core id相同,那么说明支持超线程。
    还有另外一种方法是查看siblings和cpu cores的数值是否一致,评判方法如下

如果”siblings”和”cpu cores”一致,则说明不支持超线程,或者超线程未打开。
如果”siblings”是”cpu cores”的两倍,则说明支持超线程,并且超线程已打开。

另外,top命令中看到的CPU数目是逻辑CPU(输入top后再按1)。

逻辑CPU个数

grep -c processor /proc/cpuinfo


物理CPU个数

grep 'physical id' /proc/cpuinfo |sort -u|wc -l


“siblings”指的是一个物理CPU有几个逻辑CPU

grep 'siblings' /proc/cpuinfo
grep "siblings" /proc/cpuinfo|uniq后面加个uniq计数的作用

”cpu cores“指的是一个物理CPU有几个核

grep 'cpu cores' /proc/cpuinfo
grep "cpu cores" /proc/cpuinfo|uniq 后面加个uniq计数的作用
image.png

例如,如果系统包含两个物理封装,每个封装中又包含两个支持超线程(HT)技术的处理器内核,则 /proc/cpuinfo 文件将包含此数据。(注:数据并不在表格中。)

processor 0 4 2 6 1 5 3 7
physical id 0 0 0 0 1 1 1 1
core id 0 0 1 1 2 2 3 3
siblings 4 4 4 4 4 4 4 4
cpu cores 2 2 2 2 2 2 2 2

此例说明:
1) 系统上有两个物理封装 physical id为0和1
2)一个物理封装有四个内核,即有4个逻辑处理器。
3)一个内核上有2个不同的processer,即系统支持超线程技术(HT)。
值得注意的是physical id和core id的编号可能是也可能不是连续的。系统上有两个物理封装并不罕见,而且physical id可能等于0和3。

检测CPU脚本

  1. !/bin/bash

  2. physicalNumber=0
  3. coreNumber=0
  4. logicalNumber=0
  5. HTNumber=0
  6. logicalNumber=$(grep “processor” /proc/cpuinfo|sort -u|wc -l)
  7. physicalNumber=$(grep “physical id” /proc/cpuinfo|sort -u|wc -l)
  8. coreNumber=$(grep “cpu cores” /proc/cpuinfo|uniq|awk -F’:’’{print $2}’|xargs)
  9. HTNumber=$((logicalNumber / (physicalNumber * coreNumber)))
  10. echo”** CPU Information **
  11. echo”Logical CPU Number : ${logicalNumber}”
  12. echo”Physical CPU Number : ${physicalNumber}”
  13. echo”CPU Core Number : ${coreNumber}”
  14. echo”HT Number : ${HTNumber}”

image.png