Differences between physical CPU vs logical CPU vs Core vs Thread vs Socket
物理CPU (physical CPU)、 逻辑CPU(logical CPU)、虚拟CPU(virtual CPU)、核数(core)、线程数(thread)、颗数(socket)等。
- 多个 CPU 芯片插在插槽上,通过系统总线通信。慢!
- 为了解决 1 中问题,发明了 Hyper Threading(超线程技术),在 CPU 芯片内部具有多份其它计算资源(寄存器、缓存)供 CPU 能够准备多个工作,通信在 CPU 芯片内部,如果某个进程阻塞,那么换另一个进程占用 CPU 计算即可。(提供了两个虚拟或者lCPU,让人误以为“同时”执行两个进程,该技术无法提供两个 CPU 算力,也并非真正意义上的并行计算),超线程技术并不是两个独立的物理处理器。
因此,从Linux或者其他操作系统的角度来看:一个单核处理器却展现出拥有两个处理器的能力。 只不过这两个逻辑cpu运行在同一个物理cpu内部而已。
说一些对这张图的理解,在一个物理cpu内部,存在两组寄存器,分别属于一个逻辑CPU,但是只存在一组ALU(算数逻辑单元),如果每一个逻辑cpu上运行一个进程,那么这两个进程间的通信就完全在CPU内部,无需通过系统总线,但是从唯一的ALU上我们也能看出来实际上是无法真正意义上同时执行两个进程的,(因为运算单元只有一个)
- 实现在同一个芯片上存在多个处理器。在同一个芯片上的每一个处理器称之为 core,芯片内部存在总线沟通各个核。
注:我们常说的几颗几核的含义: Core(核)代表一个独立的cpu, Socket(颗) 本意是插槽,代表一个主板上的芯片,多核架构就是在一个芯片上放多个处理器,就像上面说的那样, 所以如果我们说2颗4核,代表主板上有2个芯片插槽,每个芯片上存在4个cpu,所以我们有8个物理cpu,如果存在超线程,我们还可能多出8个逻辑cpu,总共16个逻辑cpu。
从性能上来说, 一个一颗四核的处理器要更优于四个一颗一核(也就是传统的单核CPU)的处理器。
1 lCPU = 1 thread
有时候我们会发现处理器标称每核有4线程,2线程或类似的说法,简单来说这就是指每核cpu上能够“同时”运行的线程或进程数(注意同时依旧加了引号),基本上就是一个逻辑cpu(LCPU)能运行一个进程或线程。如果每核能执行2个或更多的线程,那么一定使用了超线程技术,否则每一核就只能运行一个线程或进程。
lCPU or vCPU
虚拟CPU基本等同于逻辑CPU,但是存在一点不同:虚拟CPU更多的是限定在计算虚机化的语境内。一个宿主机上的逻辑cpu就映射为一个虚拟机内部的虚拟CPU,所以他们基本上是同一个术语。
jiaming@jiaming-System-Product-Name:~$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1 # 每核可以运行1个超线程,即每个core对应1个lcpu
Core(s) per socket: 4 # 4 cores/颗 4个alu
Socket(s): 1 # 1 颗 (one chip)
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
Stepping: 9
CPU MHz: 838.802
CPU max MHz: 3800.0000
CPU min MHz: 800.0000
BogoMIPS: 6799.81
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-3
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 art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d