物理CPU、逻辑CPU、CPU核心、CPU线程等
Tags: CPUCPU核心CPU线程NUMAOS物理CPU计算机硬件知识超线程逻辑CPU
概念
CPU(Central Processing Unit)是中央处理单元, 一个物理CPU可以有1个或者多个物理内核, 一个物理内核可以作为1个或者2个逻辑CPU。
如果计算机有一个物理CPU,是双核的,且支持超线程。那么这台计算机就是双核四线程。实际上几核几线程中的线程数就是逻辑CPU数。
对于两路四核超线程计算机,两路指计算机有2个物理CPU,每颗CPU中有4个物理内核,CPU支持超线程,就有2*4*2
=16个逻辑CPU,
这就是通常所谓的16核计算机。如下图所示,实际能看到的2个物理CPU:
实现16个逻辑CPU的原理图:
查看cpu情况可以使用cat /proc/cpuinfo
或lscpu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | [root@lhrblog ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz stepping : 4 microcode : 0x1 cpu MHz : 2499.996 cache size : 33792 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 22 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat spec_ctrl intel_stibp bogomips : 4999.99 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz stepping : 4 microcode : 0x1 cpu MHz : 2499.996 cache size : 33792 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 22 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat spec_ctrl intel_stibp bogomips : 4999.99 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: |
vendor id 如果处理器为英特尔处理器,则字符串是 GenuineIntel。
processor 包括这一逻辑处理器的唯一标识符。
physical id 包括每个物理封装的唯一标识符。
core id 保存每个内核的唯一标识符。
siblings 列出了位于相同物理封装中的逻辑处理器的数量。
cpu cores 包含位于相同物理封装中的内核数量。
1.拥有相同 physical id 的所有逻辑处理器共享同一个物理插座,每个 physical id 代表一个唯一的物理封装。
- Siblings 表示位于这一物理封装上的逻辑处理器的数量,它们可能支持也可能不支持超线程(HT)技术。
- 每个 core id 均代表一个唯一的处理器内核,所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上。简单的说:“siblings”指的是一个物理CPU有几个逻辑 CPU,”cpu cores“指的是一个物理CPU有几个核。
- 如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。
- 如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id不同,则说明这是一个多内核处理器。cpu cores条目也可以表示是否支持多内核。
物理CPU(physical cpu)
指实际服务器中插槽上的CPU硬件个数(socket),主板上实际插入的cpu数量。
由于在主板上引入多个 cpu 插槽需要更复杂的硬件支持(连接不同插槽的 cpu 到内存和其他资源),通常只会在服务器上才这样做。在家用电脑中(例如自己的办公笔记本),一般主板上只会有一个 cpu 插槽。
物理cpu数量,可以数不重复的 physical id 有几个。
以下命令都可以查看物理CPU的个数:
1 2 | cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l lscpu | grep Socket |
例如:
1 2 3 4 5 6 | [root@cictrsdb-dg ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 2 [root@cictrsdb-dg ~]# lscpu | grep Socket Socket(s): 2 [root@cictrsdb-dg ~]# |
说明有2个物理CPU。
例2:
1 2 3 4 | [root@oracle-rac1 ~]# cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 1 [root@oracle-rac1 ~]# lscpu | grep Socket Socket(s): 1 |
说明有1个物理CPU。
CPU核心数(core)
一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术。若支持超线程的话,则需要再乘以2才是逻辑CPU的个数。
在CPU发展初期,每个物理 cpu 上只有一个核心(a single core),对操作系统而言,也就是同一时刻只能运行一个进程/线程。 为了提高性能,cpu 厂商开始在单个物理 cpu 上增加核心(实实在在的硬件存在),也就出现了双核心 cpu(dual-core cpu)以及多核心 cpu(multiple cores),这样一个双核心 cpu 就是同一时刻能够运行两个进程/线程的。
以下命令可以查看CPU的核数:
1 2 | cat /proc/cpuinfo |grep "cores"|uniq lscpu | grep "Core(s) per socket" |
例1:
1 2 3 4 | [root@cictrsdb-dg ~]# cat /proc/cpuinfo |grep "cores"|uniq cpu cores : 14 [root@cictrsdb-dg ~]# lscpu | grep "Core(s) per socket" Core(s) per socket: 14 |
例2:
1 2 3 4 | [root@oracle-rac1 ~]# cat /proc/cpuinfo |grep "cores"|uniq cpu cores : 4 [root@oracle-rac1 ~]# lscpu | grep "Core(s) per socket" Core(s) per socket: 4 |
超线程(Hyper-Threading)
多线程技术(simultaneous multithreading/SMT)和 超线程技术(hyper–threading/HT)
SMT是AMD 和其他 cpu 厂商的称呼。 hyper–threading 是 Intel 的称呼,可以认为 hyper–threading 是 SMT 的一种具体技术实现。
1 2 3 | [root@lhr ~]# lscpu | grep Thread Thread(s) per core: 2 [root@lhr ~]# |
可以看出,以上CPU是双线程的。
CPU之所以要增加线程数,是源于多任务处理的需要。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。 因此,线程数是一种逻辑的概念,简单地说,就是模拟出的 CPU 核心数。一个核心最少对应一个线程,但英特尔有个超线程技术可以把一个物理线程模拟出两个线程来用,充分发挥 CPU 性能,即一个核心可以有两个到多个线程。
逻辑CPU
Linux用户对/proc/cpuinfo 这个文件肯定不陌生.它是用来存储cpu硬件信息的
信息内容分别列出了processor 0 – n 的规格。这里需要注意的是,这里的n为逻辑CPU个数
一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT),可以在逻辑上再分一倍数量的cpu core出来逻辑CPU数量=物理cpu数量 * cpu cores 这个规格值 x 2(如果支持并开启ht)
命令查看:
1 2 | cat /proc/cpuinfo |grep "processor"|wc -l lscpu | grep "CPU(s)" |
例1:
1 2 3 4 5 6 7 8 | [root@cictrsdb-dg ~]# cat /proc/cpuinfo |grep "processor"|wc -l 56 [root@cictrsdb-dg ~]# lscpu | grep "CPU(s)" CPU(s): 56 On-line CPU(s) list: 0-55 NUMA node0 CPU(s): 0-13,28-41 NUMA node1 CPU(s): 14-27,42-55 |
说明有56个逻辑CPU。
例2:
1 2 3 4 5 6 | [root@oracle-rac1 ~]# cat /proc/cpuinfo |grep "processor"|wc -l 8 [root@oracle-rac1 ~]# lscpu | grep "CPU(s)" CPU(s): 8 On-line CPU(s) list: 0-7 NUMA node0 CPU(s): 0-7 |
说明有8个逻辑CPU。
备注一下:Linux下top查看的CPU也是逻辑CPU个数,用top命令,然后输入1就可以查看逻辑CPU:
虚拟CPU(vCPU)
虚拟cpu是我们在做虚拟化时候,利用虚拟化技术,虚拟出来的CPU。讨论vCPU离不开VM,因此vCPU的讨论都是在虚拟化时候,划分cpu才会讨论的问题。
内存分配中的NUMA
参考:https://www.xmmup.com/neicunfenpeizhongdenuma.html
Windows查看
若是linux,可以直接查看:
1 2 3 4 5 6 | [root@lhr ~]# lscpu | grep -iE 'socket|Thread|CPU\(s\):' CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 [root@lhr ~]# |
使用cpuid软件可以看到我的笔记本的情况:
也可以在任务管理器中直接查看:
可以看到,我的笔记本有1个物理CPU,有4个核心,每个核心2个线程(支持超线程),所以共有8个线程数,可以认为总共有8个逻辑CPU。
另外,也可以使用命令来查看。在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中分别输入“cpu get Name”,“cpu get NumberOfCores”,“cpu get NumberOfLogicalProcessors”即可查看物理CPU数、CPU核心数、线程数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | C:\Users\lhrxxt>wmic wmic:root\cli>cpu get Name Name Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz wmic:root\cli>cpu get NumberOfCores NumberOfCores 4 wmic:root\cli>cpu get NumberOfLogicalProcessors NumberOfLogicalProcessors 8 wmic:root\cli>cpu get * AddressWidth Architecture AssetTag Availability Caption Characteristics ConfigManagerErrorCode ConfigManagerUserConfig CpuStatus CreationClassName CurrentClockSpeed CurrentVoltage DataWidth Description DeviceID ErrorCleared ErrorDescription ExtClock Family InstallDate L2CacheSize L2CacheSpeed L3CacheSize L3CacheSpeed LastErrorCode Level LoadPercentage Manufacturer MaxClockSpeed Name NumberOfCores NumberOfEnabledCore NumberOfLogicalProcessors OtherFamilyDescription PartNumber PNPDeviceID PowerManagementCapabilities PowerManagementSupported ProcessorId ProcessorType Revision Role SecondLevelAddressTranslationExtensions SerialNumber SocketDesignation Status StatusInfo Stepping SystemCreationClassName SystemName ThreadCount UniqueId UpgradeMethod Version VirtualizationFirmwareEnabled VMMonitorModeExtensions VoltageCaps 64 9 None 3 Intel64 Family 6 Model 158 Stepping 9 252 1 Win32_Processor 2808 10 64 Intel64 Family 6 Model 158 Stepping 9 CPU0 100 198 1024 6144 0 6 GenuineIntel 2808 Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz 4 4 8 None FALSE BFEBFBFF000906E9 3 CPU TRUE None U3E1 OK 3 Win32_ComputerSystem LHR 8 52 TRUE TRUE |
Name:表示物理CPU数
NumberOfCores:表示CPU核心数
NumberOfLogicalProcessors:表示CPU线程数
注释:VM虚拟机中的CPU选择的核心数实际是代表线程数。
2.在cmd命令中输入“systeminfo”,以下信息表示物理CPU有1个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | C:\Users\lhrxxt>systeminfo 主机名: LHR OS 名称: Microsoft Windows 10 教育版 OS 版本: 10.0.17134 暂缺 Build 17134 OS 制造商: Microsoft Corporation OS 配置: 独立工作站 OS 构件类型: Multiprocessor Free 注册的所有人: ThinkPad 注册的组织: 产品 ID: 00328-10000-00001-AA965 初始安装日期: 2018/8/14, 12:11:04 系统启动时间: 2021/8/12, 8:17:51 系统制造商: LENOVO 系统型号: 20J6A00AHH 系统类型: x64-based PC 处理器: 安装了 1 个处理器。 [01]: Intel64 Family 6 Model 158 Stepping 9 GenuineIntel ~2808 Mhz BIOS 版本: LENOVO R0FET37W (1.17 ), 2017/9/28 Windows 目录: C:\Windows 系统目录: C:\Windows\system32 启动设备: \Device\HarddiskVolume6 系统区域设置: zh-cn;中文(中国) 输入法区域设置: zh-cn;中文(中国) 时区: (UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐 物理内存总量: 32,604 MB 可用的物理内存: 18,935 MB 虚拟内存: 最大值: 34,652 MB 虚拟内存: 可用: 19,237 MB 虚拟内存: 使用中: 15,415 MB 页面文件位置: C:\pagefile.sys 域: WORKGROUP 登录服务器: \\LHR 修补程序: 安装了 13 个修补程序。 [01]: KB4534130 [02]: KB4343669 [03]: KB4346084 [04]: KB4456655 [05]: KB4465663 [06]: KB4477137 [07]: KB4485449 [08]: KB4486153 [09]: KB4486155 [10]: KB4497398 [11]: KB4497932 [12]: KB4516115 [13]: KB4499167 网卡: 安装了 16 个 NIC。 [01]: Intel(R) Ethernet Connection (5) I219-V 连接名: 以太网 状态: 媒体连接已中断 .... Hyper-V 要求: 虚拟机监视器模式扩展: 是 固件中已启用虚拟化: 是 二级地址转换: 是 数据执行保护可用: 是 |
VMware Workstation 中的CPU处理器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@rhel6lhr ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 6 On-line CPU(s) list: 0-5 Thread(s) per core: 1 Core(s) per socket: 3 Socket(s): 2 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 158 Stepping: 9 CPU MHz: 2808.000 BogoMIPS: 5616.00 Hypervisor vendor: VMware Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 6144K NUMA node0 CPU(s): 0-5 |
可知,在这里使用VMware Workstation虚拟出来了2个虚拟的物理CPU,每个CPU有3个核,则一共有6个逻辑CPU。