說明
查看這些之前我想說一下 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 ~]#