服务器的cpu 核心、线程


此版本有大范围改动,因为cpu作为一个大脑,所以更细致的进行了,相关的分析和阐述。 
1、版本1. 2022.1.24
2、版本2: 2022.3.2

采集数据: ht2机器为物理机,cpu是4颗cpu,80核,126G内存。

1、dmidecode命令在Linux系统下获取有关硬件方面的信息
[root@ht2 src]# dmidecode | grep "Product Name"
Product Name: RH5885 V3 // RH5885 V3 智能服务器
Product Name: BC61BLCA  //板卡

  [root@fp-web-158 ~]# dmidecode -s processor-version | uniq

   Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz

2、cpu是 Intel(R) Xeon(R) CPU E7-4830 v2 @ 2.20GHz,启用超线程。
3、cpu 厂商信息:intel原厂
[root@ht2 src]# cat /proc/cpuinfo | grep  -e "vendor_id" | uniq
 vendor_id	: GenuineIntel

CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。
如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念

增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的, 一般情况下它们是1:1对应关系,也就是说四核CPU一般拥有四个线程。 但Intel引入超线程技术后,使核心数与线程数形成1:2的关系, 如四核intel 11 代酷睿H(35W)处理器支持4核8线程(或叫作八个逻辑核心),大幅提升了其多任务、多线程性能。
lscpu可以列出非常多的有用信息
[root@ht2 src]# lscpu
Architecture:          x86_64  //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
Thread(s) per core:    2   //每个核的线程数(每个 Core 的硬件线程数)
Core(s) per socket:    10  //多少核
Socket(s):             4   //插槽数量(cpu插在主板上的插槽)
NUMA node(s):          4
Vendor ID:             GenuineIntel  //cpu厂商ID
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E7-4830 v2 @ 2.20GHz  //型号
Stepping:              7
CPU MHz:               2180.664
CPU max MHz:           2700.0000
CPU min MHz:           1200.0000
BogoMIPS:              4389.73
Virtualization:        VT-x  //cpu支持的虚拟化技术,需要进入进入bios设置
L1d cache:             32K
L1i cache:             32K
 //L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1高速缓存的容量和结构对CPU的性能影响较大,
不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。
一般服务器CPU的L1缓存的容量通常在32—4096KB.通常L1 Cache离CPU核心需要数据的地方更近,而L2 Cache则处于边缓位置,访问数据时,
L2 Cache需要通过更远的铜线,甚至更多的电路,从而增加了延时。
L1 Cache分为ICache(指令缓存)和DCache(数据缓存),
指令缓存ICache通常是放在CPU核心的指令预取单远附近的,
数据缓存DCache通常是放在CPU核心的load/store单元附近。
而L2 Cache是放在CPU pipeline之外的。为什么不把L2 Cache也放在很近的地方呢?由于Cache的容量越大,面积越大,
相应的边长的就越长(假设是正方形的话),总有离核远的。
L2 cache: 256K 
L3 cache: 20480K //可参考 https://zhuanlan.zhihu.com/p/31875174
NUMA node0 CPU(s):     0-9,40-49     //0-9和40-49 是由numa node0 来管理的
NUMA node1 CPU(s):     10-19,50-59
NUMA node2 CPU(s):     20-29,60-69
NUMA node3 CPU(s):     30-39,70-79
Flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts 
rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3
cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm epb
tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm arat pln pts.
注意: 如果是 1个Sockets, 4个Cores,2 Thread(s) per core 1个cpu,4核8线程
关于numa 请看我的另一篇文档 https://www.cnblogs.com/aozhejin/p/15955554.html

 

这里借用一张图 :https://zhuanlan.zhihu.com/p/31875174

 

 


cpuinfo中关键字段信息解释
vendor id 如果处理器为Intel Processors,则字符串是 GenuineIntel。
processor 包括这一逻辑处理器的唯一标识符。
physical id 包括每个物理封装的唯一标识符。
core id 保存每个内核的唯一标识符。
siblings 列出了位于相同物理封装中的逻辑处理器的数量。
cpu cores 包含位于相同物理封装中的内核数量。
查看CPU型号
[root@ht2 src]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
     80  Intel(R) Xeon(R) CPU E7-4830 v2 @ 2.20GHz
在linux输出命令: [root@ht2 cpu0]# cat /sys/devices/system/cpu/cpu 敲入tab 就会显示

  [root@ht2 ~]# cat /sys/devices/system/cpu/cpu
  cpu0/ cpu14/ cpu2/ cpu25/ cpu30/ cpu36/ cpu41/ cpu47/ cpu52/ cpu58/ cpu63/ cpu69/ cpu74/ cpu8/
  cpu1/ cpu15/ cpu20/ cpu26/ cpu31/ cpu37/ cpu42/ cpu48/ cpu53/ cpu59/ cpu64/ cpu7/ cpu75/ cpu9/
  cpu10/ cpu16/ cpu21/ cpu27/ cpu32/ cpu38/ cpu43/ cpu49/ cpu54/ cpu6/ cpu65/ cpu70/ cpu76/ cpuidle/
  cpu11/ cpu17/ cpu22/ cpu28/ cpu33/ cpu39/ cpu44/ cpu5/ cpu55/ cpu60/ cpu66/ cpu71/ cpu77/
  cpu12/ cpu18/ cpu23/ cpu29/ cpu34/ cpu4/ cpu45/ cpu50/ cpu56/ cpu61/ cpu67/ cpu72/ cpu78/
  cpu13/ cpu19/ cpu24/ cpu3/ cpu35/ cpu40/ cpu46/ cpu51/ cpu57/ cpu62/ cpu68/ cpu73/ cpu79/
  对比另一台机器8核 

  [root@fp-web-186 ~]# cat /sys/devices/system/cpu/cpu  
  cpu0/ cpu1/ cpu2/ cpu3/ cpu4/ cpu5/ cpu6/ cpu7/ cpuidle/
  //我们进入cpu0来看下

  [root@ht2 ~]# cd /sys/devices/system/cpu/cpu0
  [root@ht2 cpu0]# ll
  total 0
  drwxr-xr-x 6 root root 0 Feb 15 19:44 cache
  drwxr-xr-x 2 root root 0 Feb 15 19:44 cpufreq
  drwxr-xr-x 7 root root 0 Mar 2 15:59 cpuidle
  -r-------- 1 root root 4096 Mar 2 15:59 crash_notes
  -r-------- 1 root root 4096 Mar 2 15:59 crash_notes_size
  lrwxrwxrwx 1 root root 0 Mar 2 15:59 driver -> ../../../../bus/cpu/drivers/processor
  lrwxrwxrwx 1 root root 0 Mar 2 15:59 firmware_node -> ../../../LNXSYSTM:00/device:00/ACPI0004:00/LNXCPU:00
  drwxr-xr-x 2 root root 0 Mar 2 15:59 microcode
  lrwxrwxrwx 1 root root 0 Mar 2 15:59 node0 -> ../../node/node0
  -rw-r--r-- 1 root root 4096 Feb 15 19:43 online
  drwxr-xr-x 2 root root 0 Mar 2 15:59 power
  lrwxrwxrwx 1 root root 0 Mar 2 15:59 subsystem -> ../../../../bus/cpu
  drwxr-xr-x 2 root root 0 Feb 15 19:45 thermal_throttle
  drwxr-xr-x 2 root root 0 Feb 15 19:44 topology
  -rw-r--r-- 1 root root 4096 Feb 15 19:43 uevent 

  具体请看 

1、查看物理CPU个数

# 查看物理CPU个数
  [root@ht2 src]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
  4
 [root@ht2 src]# grep 'physical id' /proc/cpuinfo | sort -u
 physical id    : 0  //第1颗物理CPU,单个CPU的标号
 physical id    : 1  //第2颗物理cpu,单个CPU的标号
 physical id    : 2  //第3颗物理cpu,单个CPU的标号
 physical id    : 3  //第4颗物理cpu,单个CPU的标号

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 

# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 插槽上的CPU个数,物理cpu数量等于不同physical id的个数

 

2、看核数

查看每个物理CPU中core的个数(即核数)即查看是几核
[root@ht2 src]# cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores    : 10

3、是否启用超线程,这里core*2了

# 查看逻辑CPU的个数
[root@ht2 src]# cat /proc/cpuinfo| grep "processor"| wc -l
80
//查看是否启用超线程

  [root@ht2 src]# cat /proc/cpuinfo |grep siblings
  siblings : 20  //单个物理CPU逻辑物理核数

  //查看是否启用超线程

  [root@ht2 src]# cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
  cpu cores : 10  (每颗物理cpu内部有10个核心)
  siblings : 20

  这里siblings是cpu cores的两倍,说明超线程打开。

   一般,物理CPU个数 X cpu cores = 逻辑CPU的个数。如果不相等的话,则表示服务器的CPU支持超线程技术


4、查看几核(逻辑cpu), 输出CPU型号
[root@ht2 src]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
     80  Intel(R) Xeon(R) CPU E7-4830 v2 @ 2.20GHz  //查询E7-4830 cpu芯片信息,支持有最大cpu配置为4颗,最大内存容量32g,超线程技术支持,支持64bit

5、查看CPU的主频
[root@ht2 src]# cat /proc/cpuinfo |grep MHz|uniq  //该机器是80核,一共是80个
cpu MHz        : 1214.468
cpu MHz        : 1248.500
cpu MHz        : 1241.109
cpu MHz        : 1272.992
cpu MHz        : 1299.546
.... 省略了一共80个

//物理id,一共80个
//具有相同物理id的cpu都是同一物理套接字中的线程或内核(cpu执行是以线程为单位)

[root@ht2 src]# cat /proc/cpuinfo | grep physical | uniq -c
... 省略
1 physical id    : 0
      1 address sizes    : 46 bits physical, 48 bits virtual
      1 physical id    : 01 physical id    : 1
      1 address sizes    : 46 bits physical, 48 bits virtual
      1 physical id    : 1
      1 address sizes    : 46 bits physical, 48 bits virtual1 physical id    : 2
      1 address sizes    : 46 bits physical, 48 bits virtual1 physical id    : 3
      1 address sizes    : 46 bits physical, 48 bits virtual
......  省略
[root@ht2 src]# cat /proc/cpuinfo | grep physical | wc -l
160

 [root@ht2 src]# grep 'physical id' /proc/cpuinfo | sort -u
 physical id : 0
 physical id : 1
 physical id : 2
 physical id : 3

 

计算下我们能有多少个线程使用

 逻辑CPU数量 = 物理cpu数量 x cpu cores这个规格值 x siblings/cpu cores(如果支持并支持超线程,此值大于1)
 逻辑CPU数量 = 4 x 10 x 2
逻辑cpu即我们说的线程,线程(lwp,轻量级进程)是linux执行的基本单位,也是cpu执行的基本单位。
相关聚焦

1、逻辑CPU个数:

[root@ht2 src]# cat /proc/cpuinfo | grep "cpu cores" | wc -l

80

2、物理CPU个数:

[root@ht2 src]#  cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

4

3、每个物理CPU中Core的个数:

[root@ht2 src]# cat /proc/cpuinfo | grep "cpu cores" | wc -l

80

 

 

如何查看Linux相关信息

参看linux版本
uname -a cat /proc/version

如何查看linux 系统版本
[root@ht2 src]# cat /etc/redhat-release
[root@ht2 src]# lsb_release -a
[root@ht2 src]# cat /etc/issue

如何查看linux 系统内存大小的信息,可以查看总内存,剩余内存,可使用内存等信息 
cat /proc/meminfo

查看系统运行在多少位模式。例如:64位系统或32位系统。

[root@ht2 src]# getconf LONG_BIT
64

//getconf PAGE_SIZE 得到系统配置信息,这个getconf很有用

写个查看cpu的shell脚本,保存为cpu.sh ,执行 sh cpu.sh

#!/bin/bash
#1.查看物理cpu个数
physical=`cat /proc/cpuinfo |grep 'physical id'|sort -u|wc -l`
echo 物理cpu个数: "$physical"
#2.查看核心数量
core=`grep 'core id' /proc/cpuinfo | sort -u | wc -l`
echo 核心数: "$core"
#3.查看线程数
processor=`grep 'processor' /proc/cpuinfo | sort -u | wc -l`
echo 线程数:"$processor"
#4.查看cpu型号
cpu=`dmidecode -s processor-version`
echo -e 'cpu型号:\n'"$cpu"

 

windows上我们查看机器cpu信息方式如下:

C:\Users\qingshuic>wmic
wmic:root\cli>cpu get Name //cpu的芯片信息
Name
Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
//core个数
wmic:root\cli>cpu get NumberOfCores
NumberOfCores
2
//线程数
wmic:root\cli>cpu get NumberOfLogicalProcessors NumberOfLogicalProcessors 4
wmic:root\cli>cpu get AddressWidth Architecture Availability Caption ConfigManagerErrorCode ConfigManagerUse 64 9 3 Intel64 Family 6 Model 78 Stepping 3

 

windows也可以通过systeminfo命令查看相关硬件信息

主机名:           QGSHUIC
OS 名称:          Microsoft Windows 7 专业版 
OS 版本:          6.1.7601 Service Pack 1 Build 7601
OS 制造商:        Microsoft Corporation
OS 配置:          独立工作站
OS 构件类型:      Multiprocessor Free
注册的所有人:     lenovo
注册的组织:       
产品 ID:          00371-8992671-00004
初始安装日期:     2016-03-18, 14:30:07
系统启动时间:      2022-02-25, 10:27:42
系统制造商:       LENOVO
系统型号:         20ETA00ECD
系统类型:         x64-based PC
处理器:           安装了 1 个处理器。
                  [01]: Intel64 Family 6 Model 78 Stepping 3 GenuineIntel ~2301 Mhz
BIOS 版本:        LENOVO R00ET37W (1.12 ), 2016-01-17
Windows 目录:     C:\Windows
系统目录:         C:\Windows\system32
启动设备:         \Device\HarddiskVolume1
系统区域设置:     zh-cn;中文(中国)
输入法区域设置:   zh-cn;中文(中国)
时区:             (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐
物理内存总量:     15,860 MB
可用的物理内存:   1,646 MB
虚拟内存: 最大值: 31,718 MB
虚拟内存: 可用:   12,282 MB
虚拟内存: 使用中: 19,436 MB
页面文件位置:     D:\pagefile.sys
域:               WORKGROUP
登录服务器:       \\QINGSHUIC
修补程序:         安装了 110 个修补程序。
                  [01]: KB2849697
                  [02]: KB2849696
                  [03]: KB2841134
                   ......
网卡:             安装了 10 个 NIC。
                  [01]: Bluetooth 设备(个人区域网)
                      连接名:      Bluetooth 网络连接
                      状态:        没有硬件
                  [02]: Intel(R) Ethernet Connection I219-V
                      连接名:      本地连接
                      状态:        媒体连接已中断
                  [03]: VMware Virtual Ethernet Adapter for VMnet1
                      连接名:      VMware Network Adapter VMnet1
                      状态:        没有硬件
                  [04]: Intel(R) Dual Band Wireless-AC 3165
                      连接名:      1111
                      启用 DHCP:   是
                      DHCP 服务器: 132.11.101.1
                      IP 地址
                        [01]: 172.55.11.11
                        [02]: fe50::d77:658c:116a:7b4b
                  [05]: VMware Virtual Ethernet Adapter for VMnet8
                      连接名:      VMware Network Adapter VMnet8
                      状态:        没有硬件
                  [06]: Microsoft Virtual WiFi Miniport Adapter
                      连接名:      无线网络连接 211111
                      状态:        没有硬件
                  [07]: Microsoft Virtual WiFi Miniport Adapter
                      连接名:      无线网络连接 31111
                      状态:        没有硬件
                  [08]: TAP-Windows Adapter V9
                      连接名:      本地连接 3
                      启用 DHCP:   是
                      DHCP 服务器: 11.2.0.53
                      IP 地址
                        [01]: 10.2.0.54
                        [02]: fe80::245e:2e7:134b:71a0
                  [09]: VirtualBox Host-Only Ethernet Adapter
                      连接名:      VirtualBox Host-Only Network
                      状态:        没有硬件
                  [10]: VirtualBox Host-Only Ethernet Adapter
                      连接名:      VirtualBox Host-Only Network #2
                      状态:        没有硬件

 

posted @ 2022-01-26 11:29  jinzi  阅读(1521)  评论(0编辑  收藏  举报