多核“假象”

作者: yanfeizhang | 来源:发表于2019-08-05 18:36 被阅读0次

提到CPU核数,相信绝大部分的同学想到的都是top命令,直接到自己的服务器上看一下是多少个核。看到的核越多,貌似笑的越开心。比如说说我的CPU,用top命令展开以后,看到了有24核。那么事实真是你想象的这么美好吗?

# top
top - 17:04:51 up 882 days,  1:16,  1 user,  load average: 0.05, 0.05, 0.00  
Tasks: 596 total,   1 running, 595 sleeping,   0 stopped,   0 zombie  
Cpu0  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu6  :  0.0%us,  0.0%sy,  0.7%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu7  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu8  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu9  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu10 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu11 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu12 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu13 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu14 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu15 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu16 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu17 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu18 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu19 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu20 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu21 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu22 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  
Cpu23 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st  

那么是否就说明我的机器安装的CPU真的有24核?其实不是的,我们通过top命令看到的CPU核也叫做逻辑核。 说到这里我们先来普及一下基本概念:

  • 物理CPU:主板上真正安装的CPU的个数,通过physical id可以查查看
  • 物理核:一个CPU会集成多个物理核心,通过core id可以查看到物理核的序号
  • 逻辑核: intel运用了超线程技术,一个物理核可以被虚拟出来多个逻辑核,processor是逻辑核序号

好了,我们了解完cpu的基本概念后,来找一台机器真正看一下。在linux系统下,通过 cat /proc/cpuinfo可以看到CPU更为详细的信息,在操作系统的视角看来是有24个逻辑核,但是在物理上很有可能多个逻辑核对应的是同一个物理核。如下所示例子:

  • 查看物理CPU
#cat /proc/cpuinfo | grep "physical id" | sort | uniq  
physical id     : 0  
physical id     : 1  

可以看出,该实机有两个物理CPU。

  • 物理核
#cat /proc/cpuinfo| grep "cpu cores"| uniq  
cpu cores       : 6  

cpu cores表示每个cpu有6个物理核心,因为有2个物理CPU,所以该机器总共只有12个物理核。而不是top命令里看到的24个,整整少了一半。 Intel是通过超线程技术把一个物理核虚拟出来了多个,故而操作系统层面看到的比实际的物理核要多。我们寻找一下证据

  • 查看逻辑CPU
#cat /proc/cpuinfo  | grep -E "core id|process|physical id"  
processor       : 0  
physical id     : 0  
core id         : 0  
......  
processor       : 12  
physical id     : 0  
core id         : 0  
......  
processor       : 23  
physical id     : 1  
core id         : 10  

processor就是逻辑核的序号,可以看出该机器总共有24个逻辑核。大家注意看processor 0和processor 12的physical id、core id都是一样的,也就说他们他们也处在同一个物理核上。但是他们的processor编号却不一样,一个是0,一个是12。这就是说,这两个核实际上是一个核,只是通过虚拟技术虚拟出来的而已。

  • 超线程作用
    超线程里的2个逻辑核实际上是在一个物理核上运行的,模拟双核心运作,共享该物理核的L1和L2缓存。物理计算能力并没有增加,超线程技术只有在多任务的时候才能提升机器核整体的吞吐量。而且据Intel官方介绍,相比实核,平均性能提升只有20-30%左右。也就是说,在我刚才的机器上看到的24核的处理能力,整体上只比不开超线程的12核性能高30%。让我们再用开发者使用的进程来看,由于你的进程被其它进程分享了L1、L2,这就导致cache miss变多,性能会比不开超线程要差。

所以说,操作系统看到的24核只是一个“假象”

个人公众号“开发内功修炼”,打通理论与实践的任督二脉。

参考文献

相关文章

  • 多核“假象”

    提到CPU核数,相信绝大部分的同学想到的都是top命令,直接到自己的服务器上看一下是多少个核。看到的核越多,貌似笑...

  • Python多核Multiprocessing

    多核介绍 多核Queue 多核pool 效率对比 共享内存shared memory Lock锁

  • 多核碳源

    多核碳源是采用多种不同分子量和结构的碳源,辅以益生元和促生因子等组成的微生态调节剂。多核碳源更适合有益微生物生长和...

  • 多核CPU

    多核处理器把多个CPU(核心)集成到单个集成电路芯片(integrated circuit chip)中。一个双核...

  • 单CPU多核 和 多CPU多核

    CPU的核心和线程数是没有关系的。 支持超线程技术的CPU,单个核心可以同时并发两个线程进行协同工作,相比单线程效...

  • 囚笼之徒 ——培根与他的四假象说

    人的一生都生活在假象之中。 什么是四假象?种族假象、洞穴假象、市场假象、剧场假象。这四种假象,一环扣一环,一层叠一...

  • 为什么哲学家会认为我们通常的思维方式只不过是一群不自知的傻瓜?

    弗朗西斯培根说:人全部陷入四种假象,这四种假象叫种族假象、洞穴假相、市场假象、剧场假象。 种族假象,就是人这种动物...

  • cpu、java内存模型

    多核心CPU和多个CPU 多核CPU多核CPU即1个CPU有多个核心,可以理解为是多个CPU,这些CPU集成在一个...

  • 假象,真相

    假象,真相 这个世界需要假象也需要真相 没有假象真相就没有存在的意义 只有存在假象,穿越假象,真相才有意义 在准备...

  • 单核与多核

    如题,我认为没有一定的优劣,都是相对的。特定场景下,各得其所。对答如流和大智若愚其实都是可以的。精雕细琢和大巧若拙...

网友评论

    本文标题:多核“假象”

    本文链接:https://www.haomeiwen.com/subject/dekvdctx.html