合 物理CPU、逻辑CPU、CPU核心、CPU线程等
Tags: OSCPU计算机硬件知识NUMA超线程物理CPU逻辑CPUCPU核心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 |