说明
查看这些之前我想说一下 lscpu 命令 ,因为用一堆命令筛选出来的结果 lscpu 基本上都有,而且 还有些服务器只有用 lscpu才能看到结果,筛选的看不到,下面到时候会有说明!
[root@controller01 ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 80 # 总cpu数量
On-line CPU(s) list: 0-79 # 在线的cpu数量 有些时候为了省电或者过热的时候,某些CPU会停止运行
Off-line CPU(s) list: # 并不是每台服务器都有,这是不在线cpu,也就是未使用的cpu,如果有参数 便是不在线的 cpu号 (这部分是vios中经过多线程技术,未分配给本分区的cup数量。)
Thread(s) per core: 2 # 每个核心的线程数
Core(s) per socket: 10 # 每个cpu插槽核数/每颗物理cpu核数
Socket(s): 4 # cpu插槽数 如这就是有4颗物理cpu
NUMA node(s): 4
Vendor ID: GenuineIntel # cpu厂商ID
CPU family: 6 # cpu系列
Model: 63 # 型号
Model name: Intel(R) Xeon(R) CPU E7-4820 v3 @ 1.90GHz # 型号名
Stepping: 4 # #步进
CPU MHz: 1899.925 # cpu主频
BogoMIPS: 3798.76
Virtualization: VT-x # cpu支持的虚拟化技术
L1d cache: 32K # 一级高速缓存 dcache 用来存储数据
L1i cache: 32K # 一级高速缓存 icache 用来存储指令
L2 cache: 256K
L3 cache: 25600K # 缓存速度上 L1 > L2 > L3 > DDR(内存) 内存的理论速度在几十g一秒
查看逻辑CPU个数
- 对应 lscpu 的CPU(s)
[root@controller01 ~]# cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
80
[root@controller01 ~]#
查看物理CPU个数
由于有 超线程技术 所以有必要查看一下物理CPU个数:
超线程技术:通过此技术,英特尔实现在一个实体CPU中,提供两个逻辑线程。之后的Pentium D纵使不支持超线程技术,但就集成了两个实体核心,所以仍会见到两个线程。超线程的未来发展,是提升处理器的逻辑线程。英特尔于2016年发布的Core i7-6950X便是将10核心的处理器,加上超线程技术,使之成为20个逻辑线程的产品。
- 对应lscpu的Socket(S)
[root@controller01 ~]# grep "physical id" /proc/cpuinfo|sort -u|wc -l
4
[root@controller01 ~]#
查看每个物理CPU内核个数
- 对应lscpu的Core(S) per socket
[root@controller01 ~]# grep "cpu cores" /proc/cpuinfo|uniq
cpu cores : 10
[root@controller01 ~]#
查看每个物理CPU上逻辑CPU个数
对应lscpu的:总cpu(CPU(s)) / 物理cpu个数(Socket(s))
[root@controller01 ~]# grep "siblings" /proc/cpuinfo|uniq
siblings : 20
[root@controller01 ~]#
脚本一次性查看上面4个信息
- 脚本内容
#!/bin/bash
physicalNumber=0
coreNumber=0
logicalNumber=0
HTNumber=0
logicalNumber=$(grep "processor" /proc/cpuinfo|sort -u|wc -l)
physicalNumber=$(grep "physical id" /proc/cpuinfo|sort -u|wc -l)
coreNumber=$(grep "cpu cores" /proc/cpuinfo|uniq|awk -F':' '{print $2}'|xargs)
HTNumber=$((logicalNumber / (physicalNumber * coreNumber)))
echo "****** CPU Information ******"
echo "Logical CPU Number : ${logicalNumber}"
echo "Physical CPU Number : ${physicalNumber}"
echo "CPU Core Number : ${coreNumber}"
echo "HT Number : ${HTNumber}"
echo "*****************************"
- 运行结果
[root@controller01 ~]# ./cpuinfo # cpuinfo是自定义名称
****** CPU Information ******
Logical CPU Number : 80
Physical CPU Number : 4
CPU Core Number : 10
HT Number : 20
判断是否开启了超线程
如果多个逻辑CPU的"physical id"和"core id"均相同,说明开启了超线程
或者换句话说
逻辑CPU个数 > 物理CPU个数 * CPU内核数 开启了超线程
逻辑CPU个数 = 物理CPU个数 * CPU内核数 没有开启超线程
建议使用lscpu看信息
最开始说到了 有些服务器通过命令筛选是没有结果的,但能通过 lscpu 查看,如下图:
[root@node-55 ~]# grep "cpu cores" /proc/cpuinfo|uniq
[root@node-55 ~]#
[root@node-55 ~]# grep "siblings" /proc/cpuinfo|uniq
[root@node-55 ~]#
[root@node-55 ~]# lscpu
Architecture: ppc64le
Byte Order: Little Endian
CPU(s): 80
On-line CPU(s) list: 0,8,16,24,32,40,48,56,64,72
Off-line CPU(s) list: 1-7,9-15,17-23,25-31,33-39,41-47,49-55,57-63,65-71,73-79
Thread(s) per core: 1
Core(s) per socket: 10
Socket(s): 1
NUMA node(s): 1
Model: 2.0 (pvr 004d 0200)
Model name: POWER8 (raw), altivec supported
L1d cache: 64K
L1i cache: 32K
L2 cache: 512K
L3 cache: 8192K
NUMA node0 CPU(s): 0,8,16,24,32,40,48,56,64,72
[root@node-55 ~]#