01
问题
最近在搞Linux下性能评测,在做CPU评测时发现了个有意思的现象,因为uos系统是自带系统监视器的,在对输入法进程检测时,发现其CPU占用率为1%:
但是我用top命令查询时却发现它的CPU占用率为4%!
这是什么鬼?是输入法的bug?还是系统的bug?
02
问题查询
查询了资料才发现Linux下的CPU是区分物理CPU和逻辑CPU的,呼,好险,如果提了bug,估计开发就该疯了。。。
那么什么是物理CPU?什么是逻辑CPU?他们之间又有什么区别那?
03
物理CPU
实际机器中插槽上的CPU个数;物理cpu数量,可以通过命令数不重复的physical id有几个来查询。
查询命令:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc –l
这说明我的uos系统物理CPU只有1个。
04
CPU核数
一块物理CPU上能处理数据的芯片组数量。也就是说一个物理CPU上可能会有多个核心,日常中说的双核,四核就是指的CPU核心。可通过如下命令来查看CPU核心数:
cat /proc/cpuinfo | grep "cores" | uniq
05
逻辑CPU
逻辑CPU数量=物理cpu数量 x cpu cores x 2(如果支持并开启ht)。
一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT),可以在逻辑上再分一倍数量的cpu core出来;所以逻辑CPU的值理论上是可以超过100%的。
Ps:Linux下top查看的CPU也是逻辑CPU个数
查询命令:cat /proc/cpuinfo | grep "processor" | wc –l
根据换算公式:
逻辑CPU个数(4个)=物理cpu数量(1个) x cpu cores(4) x 1(不支持ht超线程技术)
这说明我的逻辑CPU个数是4个;怪不得我用top命令得出的结果是系统监视器的4倍!!!
最后,再简单说下超线程吧。
06
超线程
一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能。
Ps:一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术。
07
说在最后
在Linux下进行测试时要摒弃很多Windows的固有思维,如进程概念,Windows下关闭输入法相关进程后台会自动退出,但是Linux下后台进程是随着系统启动,除非强杀否则不会退出;同样,Linux下的CPU和内存机制与Windows也有着很大不同,尤其是内存的管理机制,感兴趣同学可以自行查询相关概念,相信一定会收益颇丰。