当前位置: 首页 > Linux

你觉得你的多核CPU是真的吗?多核“错觉”

时间:2023-04-07 01:27:19 Linux

说到CPU核心数,相信大部分同学都会想到top命令,直接去自己的服务器看看有多少个核心。你看到的核心越多,你似乎笑得越开心。比如我的CPU,用top命令展开后,看到有24个核心。那么它真的有你想象的那么好吗?#toptop-17:04:51向上882天,1:16,1个用户,平均负载:0.05、0.05、0.00任务:总共596个,运行1个,睡眠595个,停止0个,僵尸0个Cpu0:0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,0.0%stCpu1:0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%嗨,0.0%si,0.0%stCpu2:0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,0.0%stCpu3:0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,0.0%stCpu4: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数量,可以通过physicalid查看物理核心:一个CPU会集成多个物理核心,可以查看物理核心通过coreid逻辑核心的序号:Intel采用超线程技术。一个物理内核可以虚拟化为多个逻辑内核。在Linux系统中,通过cat/proc/cpuinfo可以看到更详细的CPU信息。从操作系统的角度来看,有24个逻辑核心,但物理上很可能多个逻辑核心对应同一个物理核心。例子如下:实际查看你的CPU,查看物理CPU#cat/proc/cpuinfo|grep“物理ID”|排序|uniqphysicalid:0physicalid:1可见真机有两个物理CPU。查看物理核心#cat/proc/cpuinfo|grep“cpu核心”|uniqcpucores:6cpucores表示每个cpu有6个物理核心,因为有2个物理CPU,所以机器一共只有12个物理核心。而不是top命令中看到的24,它少了一半。英特尔使用超线程技术虚拟化多个物理内核,因此操作系统看到的不仅仅是实际的物理内核。找证据查看逻辑CPU#cat/proc/cpuinfo|grep-E"coreid|process|physicalid"处理器:0物理id:0核心id:0......处理器:12物理id:0核心id:0......处理器:23物理id:1coreid:10processor是逻辑核心的序号,可以看出机器一共有24个逻辑核心。请注意,处理器0和处理器12的physicalid和coreid是相同的,也就是说,它们也在同一个物理core上。但是它们的处理器编号不一样,一个是0,一个是12。也就是说,这两个核心其实是一个核心,只是通过虚拟技术虚拟出来的。超线程中的两个逻辑核心实际上运行在一个物理核心上,模拟双核运行,共享物理核心的一级缓存和二级缓存。物理计算能力并没有增加,超线程技术只能提高多任务处理时机器核心的整体吞吐量。而根据Intel官方介绍,与真核相比,平均性能提升只有20-30%左右。也就是说,我刚才在机器上看到的24核的处理能力,只比没有超线程的12核高了30%。我们再来看看开发者使用的流程。因为你的进程被L1和L2的其他进程共享,这会导致更多的缓存未命中,性能会比没有超线程差。因此,操作系统看到的24个核心只是一种“错觉”。练内功专用CPU:1、你以为你的多核CPU是真核生物吗?多核“错觉”2、听说你只知道内存,不知道缓存?CPU表示很伤心!3.TLB缓存是个鬼,如何查看TLBmiss?4、进程/线程切换需要多少开销?5、协程比线程好在哪里?6.softirq会吃掉多少CPU?7、一次系统调用的开销是多少?8、一个简单的php请求redis的开销是多少?9、函数调用过多会不会有性能问题?我的公众号是“练内功练功”。在这里,我不是简单地介绍技术理论,也不是只介绍实践经验。而是理论联系实际,用实践加深对理论的理解,用理论提高技术实践能力。欢迎大家关注我的公众号,分享给你的朋友们~~~本文由博客群发、多发等运营工具平台OpenWrite发布。