Way to the science

计算任务耗时较长原因总结

  • 核数 = 最大负载:在多核系统上,您的负载不应超过可用核数。
  • Core就是Core 的经验法则:CPU Core的性能与CPU上的分布方式无关。两个四核等于四个双核等于八个单核。它们的性能与八个Core的性能等同。

总结

我们来看一下uptime命令的输出:

~ $ uptime

23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核CPU的系统上运行的,所以,我们的负载还有很大的空闲资源。在负载达到并保持在1.4左右之前,不需要做处理。

现在,那三个数字的含义是什么?0.65是最近一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近十五分钟的平均值。这让我们想到一个问题:

我应该观察哪个平均值? 1、5或15分钟?

根据我们前面讨论过的处理规则(1.00 = 进行处理,依此类推),您应该查看五分钟或十五分钟的平均值。坦白说,若一分钟的CPU负载值达到1,还是可以接受的。但是若十五分钟的负载平均值都在1.0以上,则需要进行干预和处理。(当然,对于多核处理器的系统,该值将变为1.0 × CPU核心数目)。

因此,核数对于解释平均负载非常重要。我如何知道我的系统有多少个核?

运行以下命令可以获取系统的CPU信息:

cat /proc/cpuinfo

若只想得到CPU核数,可以运行:

grep 'model name' /proc/cpuinfo | wc -l

  • 1.00: 不紧急,需要处理。如果平均负载保持在1.00以上,需要查找问题原因并立即解决。否则,服务器可能随时出现性能问题。
  • 5.0: 紧急状态,立即处理。如果平均负载高于5.00,系统可能马上崩溃,可能出现挂机或死机。因此,需要立即处理这种情况,千万不要让系统负载达到5!

多处理器?CPU负载为3:但是运行良好!

对于四处理器系统,3.00的负载表示比较健康。

在多处理器系统上,负载是相对于可用处理器核心数量的。在单核系统上,”100% 利用率”表示负载为1.00;在双核系统上是2.00;在四核系统上是4.00,依此类推。

如果再回到交通问题上,”1.00″实际上意味着”一个车道的交通承载量”。在单车道上,这意味着已被填满;在双车道上,负载为1.00表示交通容量只有50%,即只有一个车道被占用,另一个车道仍可使用。

与CPU相同,单核服务器上1.00的负载表示CPU利用率为100%。而在双核服务器上,负载为2.00才代表100% CPU使用率。

多核(Multicore)与多处理器(Multiprocessor)

出于性能目的,具有单个双核处理器的计算机是否基本等同于具有两个单核处理器的计算机?大致上是一样的,但还有很多其他微妙之处,例如:高速缓存的数量、处理器之间的进程切换频率等。尽管多处理器有这些优点,但对于CPU负载值来说,CPU Core的总数是最重要的,因为无论如何,CPU Core是物理隔离的。

因此,我们需要添加两条新的CPU负载处理规则:

  • 核数 = 最大负载:在多核系统上,您的负载不应超过可用核数。
  • Core就是Core 的经验法则:CPU Core的性能与CPU上的分布方式无关。两个四核等于四个双核等于八个单核。它们的性能与八个Core的性能等同。

总结

我们来看一下uptime命令的输出:

~ $ uptime

23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核CPU的系统上运行的,所以,我们的负载还有很大的空闲资源。在负载达到并保持在1.4左右之前,不需要做处理。

现在,那三个数字的含义是什么?0.65是最近一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近十五分钟的平均值。这让我们想到一个问题:

我应该观察哪个平均值? 1、5或15分钟?

根据我们前面讨论过的处理规则(1.00 = 进行处理,依此类推),您应该查看五分钟或十五分钟的平均值。坦白说,若一分钟的CPU负载值达到1,还是可以接受的。但是若十五分钟的负载平均值都在1.0以上,则需要进行干预和处理。(当然,对于多核处理器的系统,该值将变为1.0 × CPU核心数目)。

因此,核数对于解释平均负载非常重要。我如何知道我的系统有多少个核?

运行以下命令可以获取系统的CPU信息:

cat /proc/cpuinfo

若只想得到CPU核数,可以运行:

grep 'model name' /proc/cpuinfo | wc -l

  • 1.00: 不紧急,需要处理。如果平均负载保持在1.00以上,需要查找问题原因并立即解决。否则,服务器可能随时出现性能问题。
  • 5.0: 紧急状态,立即处理。如果平均负载高于5.00,系统可能马上崩溃,可能出现挂机或死机。因此,需要立即处理这种情况,千万不要让系统负载达到5!

多处理器?CPU负载为3:但是运行良好!

对于四处理器系统,3.00的负载表示比较健康。

在多处理器系统上,负载是相对于可用处理器核心数量的。在单核系统上,”100% 利用率”表示负载为1.00;在双核系统上是2.00;在四核系统上是4.00,依此类推。

如果再回到交通问题上,”1.00″实际上意味着”一个车道的交通承载量”。在单车道上,这意味着已被填满;在双车道上,负载为1.00表示交通容量只有50%,即只有一个车道被占用,另一个车道仍可使用。

与CPU相同,单核服务器上1.00的负载表示CPU利用率为100%。而在双核服务器上,负载为2.00才代表100% CPU使用率。

多核(Multicore)与多处理器(Multiprocessor)

出于性能目的,具有单个双核处理器的计算机是否基本等同于具有两个单核处理器的计算机?大致上是一样的,但还有很多其他微妙之处,例如:高速缓存的数量、处理器之间的进程切换频率等。尽管多处理器有这些优点,但对于CPU负载值来说,CPU Core的总数是最重要的,因为无论如何,CPU Core是物理隔离的。

因此,我们需要添加两条新的CPU负载处理规则:

  • 核数 = 最大负载:在多核系统上,您的负载不应超过可用核数。
  • Core就是Core 的经验法则:CPU Core的性能与CPU上的分布方式无关。两个四核等于四个双核等于八个单核。它们的性能与八个Core的性能等同。

总结

我们来看一下uptime命令的输出:

~ $ uptime

23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核CPU的系统上运行的,所以,我们的负载还有很大的空闲资源。在负载达到并保持在1.4左右之前,不需要做处理。

现在,那三个数字的含义是什么?0.65是最近一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近十五分钟的平均值。这让我们想到一个问题:

我应该观察哪个平均值? 1、5或15分钟?

根据我们前面讨论过的处理规则(1.00 = 进行处理,依此类推),您应该查看五分钟或十五分钟的平均值。坦白说,若一分钟的CPU负载值达到1,还是可以接受的。但是若十五分钟的负载平均值都在1.0以上,则需要进行干预和处理。(当然,对于多核处理器的系统,该值将变为1.0 × CPU核心数目)。

因此,核数对于解释平均负载非常重要。我如何知道我的系统有多少个核?

运行以下命令可以获取系统的CPU信息:

cat /proc/cpuinfo

若只想得到CPU核数,可以运行:

grep 'model name' /proc/cpuinfo | wc -l

计算任务耗时较长的原因往往有很多,例如:

1. 任务是IO密集型计算,需要频繁读写磁盘,磁盘读写速度是计算速度的瓶颈

按照软件说明书,减小多进程并行计算参数(每个进程都会有一份缓存文件,并会单独占据一部分内存),可以避免此情况发生。

2. 任务并行计算参数设置不合理,Slurm脚本申请的CPU数目跟软件输入文件不匹配

具体表现为,CPU负载远超过CPU数,或者正在工作的CPU核心数不多,但CPU负载很高。

Slurm会根据脚本文件限制每个任务使用的资源。如果计算软件的输入文件需要调用18个CPU进行计算,而Slurm脚本中限制为4个,则本该另外14个CPU进行的任务会排队等待,依次进行。这种情况会使计算效率降低数十倍。保持其余参数不变,将计算软件中请求的18个CPU改为4个,则可以正常发挥4个CPU并行计算的性能。

3. 软件优化问题

大多数计算软件都有多线程(较少会进行针对性优化)或是多进程并行优化(较普遍,因MPI对分布式计算支持较好)。具体计算效果因软件开发人员的水平和算法设计有关。根据软件说明书,合理进行多线程和多进程并行参数设定即可。

4. 计算的体系较大

调整体系大小。

5. 主机硬件规格

CPU架构、代次以及主频,指令集支持对计算性能有极大影响。例如,二十年前的100个CPU核心,甚至比不上现代计算机1个核心的计算速度。

我们集群目前最强的处理器都在Nabula分区,AMD Zen3架构 5950x CPU,32个逻辑CPU,主频能飙到5GHz。就CPU单核性能而言:node[4-7] > node3 > node1 > node2。

各位软件负责人在测试参数时,注意横向对比(例如,将作业同时放在Nabula分区计算)。

把2号节点的CPU单核能力比作火车,4-7节点的就好比高铁,相同路程下,4-7号节点跑得更快。当然,还跟指令集有关,有些对AVX512针对优化的软件对Intel CPU更友好,大家简单理解即可,不必深究。

6. 部分云超算为何不需设定某些参数?

某些商业云超算服务为了业绩和效益,一般都是默认独占节点,所以默认配置里没有限制CPU数目。

而我们自己的集群则不同,没有了利益的考量,完全是为了更高效地利用现有资源。因此需要使用相关参数让Slurm对所需计算资源进行分配。

彻底理解CPU Load——这一篇就够了

吕信 关注

102019.10.30 10:11:11 字数 1,856 阅读 24,356

我们经常查看Linux的平均负载。通过uptime或者top命令可以显示出,平均负载的内容如下:

load average: 0.09, 0.05, 0.01

大多数人对平均负载有一定了解:三个数字分别代表了一分钟、五分钟和十五分钟三个时间段内的CPU负载的平均值,数字越低越好,表示系统没有出现问题或过载。数字越高则表示系统可能存在问题或机器过载。但负载值多少才最合适?这因情况而异,无法一概而论。

首先,我们从最简单的单核处理器系统进行说明。

CPU负载有点类似于交通拥堵程度

单核CPU就像一条单行道。想象您是一名交警,有时这条单行道太忙了,汽车在排队等待通行。最直接的指标就是在特定时间内,道路上等待的汽车数量。如果没有汽车在等待,驾驶员便知道可以马上驶过。如果有汽车在排队等待,则驾驶员知道需要耽误时间。

因此,交警同志,您应该如何定义交通拥堵程度?可以按照以下规则:

  • 0.00 表示路上根本没有车。实际上,介于0.00和1.00之间都表示没有交通拥堵,到达的汽车可以直接通行。
  • 1.00 表示道路完全处于满负荷状态。一切都还不错,但是如果再增加一辆汽车,将会产生交通堵塞。
  • 超过1.00 表示有交通堵塞。2.00意味着当前的汽车总量需要两条车道才能保证不堵塞。3.00意味着当前的汽车总量需要三条车道才能保证不堵塞。

这基本上就是CPU负载的含义。“汽车”指的是使用CPU时间(“通行”)或排队使用CPU的进程。Unix将CPU负载定义为运行队列的长度:当前正在运行的进程数与正在等待(排队)的进程数之和。

就像交警一样,您希望您的汽车/进程永远不会等待。因此,理想情况下,您的CPU负载应保持在1.00以下。如果系统的负载暂时高于1.00还可以接受,但是如果负载始终高于1.00,则需要进行处理。

CPU Load的理想值是1.0?

其实不然,当CPU的Load为1.00时,系统处于满负荷运转,再增加一个进程,Load将高于1.00,系统性能会下降。因此,系统没有“余粮”。在实际工作中,许多系统管理员认为比较理想的CPU负载应该是0.7。因此,我们针对线上CPU负载的处理规则如下:

  • 0.70: 需要注意并排查原因。如果平均负载保持在> 0.70以上,应在情况变得更糟之前进行调查。
  • 1.00: 不紧急,需要处理。如果平均负载保持在1.00以上,需要查找问题原因并立即解决。否则,服务器可能随时出现性能问题。
  • 5.0: 紧急状态,立即处理。如果平均负载高于5.00,系统可能马上崩溃,可能出现挂机或死机。因此,需要立即处理这种情况,千万不要让系统负载达到5!

多处理器?CPU负载为3:但是运行良好!

对于四处理器系统,3.00的负载表示比较健康。

在多处理器系统上,负载是相对于可用处理器核心数量的。在单核系统上,”100% 利用率”表示负载为1.00;在双核系统上是2.00;在四核系统上是4.00,依此类推。

如果再回到交通问题上,”1.00″实际上意味着”一个车道的交通承载量”。在单车道上,这意味着已被填满;在双车道上,负载为1.00表示交通容量只有50%,即只有一个车道被占用,另一个车道仍可使用。

与CPU相同,单核服务器上1.00的负载表示CPU利用率为100%。而在双核服务器上,负载为2.00才代表100% CPU使用率。

多核(Multicore)与多处理器(Multiprocessor)

出于性能目的,具有单个双核处理器的计算机是否基本等同于具有两个单核处理器的计算机?大致上是一样的,但还有很多其他微妙之处,例如:高速缓存的数量、处理器之间的进程切换频率等。尽管多处理器有这些优点,但对于CPU负载值来说,CPU Core的总数是最重要的,因为无论如何,CPU Core是物理隔离的。

因此,我们需要添加两条新的CPU负载处理规则:

  • 核数 = 最大负载:在多核系统上,您的负载不应超过可用核数。
  • Core就是Core 的经验法则:CPU Core的性能与CPU上的分布方式无关。两个四核等于四个双核等于八个单核。它们的性能与八个Core的性能等同。

总结

我们来看一下uptime命令的输出:

~ $ uptime

23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36

这是在双核CPU的系统上运行的,所以,我们的负载还有很大的空闲资源。在负载达到并保持在1.4左右之前,不需要做处理。

现在,那三个数字的含义是什么?0.65是最近一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近十五分钟的平均值。这让我们想到一个问题:

我应该观察哪个平均值? 1、5或15分钟?

根据我们前面讨论过的处理规则(1.00 = 进行处理,依此类推),您应该查看五分钟或十五分钟的平均值。坦白说,若一分钟的CPU负载值达到1,还是可以接受的。但是若十五分钟的负载平均值都在1.0以上,则需要进行干预和处理。(当然,对于多核处理器的系统,该值将变为1.0 × CPU核心数目)。

因此,核数对于解释平均负载非常重要。我如何知道我的系统有多少个核?

运行以下命令可以获取系统的CPU信息:

cat /proc/cpuinfo

若只想得到CPU核数,可以运行:

grep 'model name' /proc/cpuinfo | wc -l

Leave a comment

Your email address will not be published. Required fields are marked *

One thought on “计算任务耗时较长原因总结”