cpu使用100%-CPU使用率到100%了?

图片[1]-cpu使用100%-CPU使用率到100%了?-OK资源网

来源丨经授权转自涛歌依旧(ID:AI_taogeyijiu_2021)

作者丨涛歌依旧

最近,一位同事急匆匆跑过来跟我说:糟糕了,服务器cPU的使用率达100%了。

我心想不可能啊,cPU有那么多核,怎会跑满?于是看了一眼,结果虚惊一场。

这位同事看到的100%,并非指整个cPU使用率到了100%,而是指cPU某些核的使用率到了100%.

趁此机会,我来聊聊与cPU相关的概念,对很多软件开发和运维人员来说,这些概念是必须要掌握的:

以一款cPU为例,看下具体参数

图片[2]-cpu使用100%-CPU使用率到100%了?-OK资源网

cPU主频(时钟频率)

在上面这些参数中,人们最熟知的是cPU主频(时钟频率)。买电脑时,肯定需要看cPU主频是多少。

我们知道:cPU时钟越快,产生上升沿/下降沿的速度就越快,就能更快地迫使其它器件做相应工作

cPU的时钟,就像龙舟比赛的击鼓人,击鼓频率越快,就迫使划船的人跟上节奏,结果龙舟也越快。

图片[3]-cpu使用100%-CPU使用率到100%了?-OK资源网

cPU参数可以看到,该cPU有12个物理核,每个物理核对应2个逻辑核(超线程技术)。所以,从外部看,该cPU有24个核(逻辑核)。

也就是说,该cPU有12个物理上的运算器&控制器,有24个逻辑上的运算器&控制器。

多个cPU

我们看linux命令lscpu给出的信息

%ignoRe_pRe_1%

可以看到,在这台服务器上,总共插了2个cPU, 这2个cPU是物理上的cPU, 人眼可以看到,手也可以触摸到:

图片[4]-cpu使用100%-CPU使用率到100%了?-OK资源网

多核cPU

我们看linux命令lscpu给出的信息

%ignoRe_pRe_2%

可以看到,针对每一个物理cPU而言,内部有12个物理核。也就是说,在一个物理cPU内,有12个物理层面的运算器&控制器,它们是实实在在存在的。

很霸气的感觉,12个物理核如下图所示

图片[5]-cpu使用100%-CPU使用率到100%了?-OK资源网

逻辑核(超线程)

我们看linux命令lscpu给出的信息

%ignoRe_pRe_3%

由于Intel采用了超线程技术,所以每个物理核对应2个逻辑核:

图片[6]-cpu使用100%-CPU使用率到100%了?-OK资源网

要注意,在物理上看来,只有一个核,但采用了超线程技术,在使用时,实际效果是2个核在同时并行(不是同步并发)工作,也即有2个逻辑核,如下图所示

图片[7]-cpu使用100%-CPU使用率到100%了?-OK资源网

那么,在上面这台服务器中,有多少个逻辑核呢?

服务器中插有2个物理cPU, 每个物理cPU有12个物理核,每个物理核有2个逻辑核,故总共48个逻辑核。

因此,当操作系统俯视cPU硬件时,它看到的是,在计算机中,有48个核,即有48个运算器&控制器。

对于操作系统而言,它可以认为有48个cPU核在同时并行(不是同步并发)为它提供服务,lscpu查出信息如下:

%ignoRe_pRe_4%

这里的48个cPU(s), 其实就是48个逻辑核。有时,我们也可以说,这台服务器有48个核。

这台服务器有2个cPU, 针对其中一个cPU,我们也可以说,它是”12核24线程”。

操作系统对核的分配

需要注意的是,如上的服务器有2个cPU, 每个cPU有12物理核,每个物理核有2个逻辑核,这仅仅是针对特定服务器cPU的。

其他计算机或者cPU, 就不一定如此了。来看我的另外一台服务器配置略微寒酸:总共只有1个cPU, 1个物理核,1个逻辑核:

%ignoRe_pRe_5%

如果在这个单核服务器上,运行如下的死循环程序,会如何呢?

%ignoRe_pRe_6%

观察top命令给出的结果,可以看到,1个进程就消耗了大约99.0%的cPU,整个cPU的使用率达到99.7%:

图片[8]-cpu使用100%-CPU使用率到100%了?-OK资源网

那么,如果开启2个进程并发执行呢?可以看到,每个进程几乎都是占用49.x%的cPU,整个cPU的使用率达到99.7%:

图片[9]-cpu使用100%-CPU使用率到100%了?-OK资源网

那么,如果开启3个进程并发执行呢?可以看到,每个进程几乎都是占用32.x%的cPU,整个cPU的使用率达到98.7%:

图片[10]-cpu使用100%-CPU使用率到100%了?-OK资源网

可以看到,整个cPU几乎被瓜分殆尽。这种调度和分配,是由操作系统完成的。

再来看多核cPU的情况,我找了另一台服务器,有32个逻辑核,简称32个核。运行一下死循环进程,用top命令来分析。

可以看到,1个进程占满1个核,使用率100%, 而服务器32个核的使用率是3.6%:

图片[11]-cpu使用100%-CPU使用率到100%了?-OK资源网

运行2个进程,可以看到,2个进程都占用99.7%的核,而服务器32个核的使用率是6.5%:

图片[12]-cpu使用100%-CPU使用率到100%了?-OK资源网

运行3个进程,可以看到,3个进程都占用100%的核,而服务器32个核的使用率是9.8%:

图片[13]-cpu使用100%-CPU使用率到100%了?-OK资源网

看到使用率为100%时,不要紧张,不要以为cPU就用完了,这台服务器有32个核呢(拥有3200%的能力)。

来看下3个进程时,每个核的具体使用情况(3个进程,总共大概占用300%的核):

图片[14]-cpu使用100%-CPU使用率到100%了?-OK资源网

这些值会动态地变化,而且不一定是消耗在某些固定的核上。核的调度和资源分配,由操作系统来完成:

图片[15]-cpu使用100%-CPU使用率到100%了?-OK资源网

cPU大小端

最后,来看一个大小端的问题,看lscpu命令的信息

%ignoRe_pRe_7%

它的含义是: cPU是小端模式。相信几乎所有的程序员都听说过这个概念,我们具体来测试一下。

下面是在Intel cPU + Windows + Vc++6.0上的测试结果,可以看到:低位的0x78存储在地址较小的位置(小端模式):

图片[16]-cpu使用100%-CPU使用率到100%了?-OK资源网

下面是对8051单片机进行的仿真测试,可以看到:高位的0x12存储在地址较小的位置(大端模式):

图片[17]-cpu使用100%-CPU使用率到100%了?-OK资源网

至此为止,我们对cPU的基本参数有了大致了解,这也是linux相关的开发、运维人员必须掌握的。

以后也可以谈笑风生地聊多个cPU、多核cPU、逻辑核和大小端了,而不是一如既往地一知半解。

图片[18]-cpu使用100%-CPU使用率到100%了?-OK资源网

1、

2、

3、

4、

图片[19]-cpu使用100%-CPU使用率到100%了?-OK资源网

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 共1条