用于高性能计算的 CPU 负载

asc*_*nts 4 linux central-processing-unit cpu-usage high-load load-average

在高性能计算的背景下,是否存在合理/安全的 CPU 负载水平?

我理解的意思平均负载在一般的服务器,但不知道会发生什么,建成并用于高性能计算服务器。

通常的约定是否load <= # of cores适用于这种环境?


鉴于我的系统特定详细信息,我很好奇,通常load >> # of cores每个节点:

  • 24 个物理内核,48 个虚拟内核的超线程(相对较新的硬件)
  • 平均负载:通常为 100-300

节点的正常运行时间很长,CPU 使用率/负载通常很高。很少有硬件故障,尤其是 CPU,但我不知道在给定高负载的节点的整个生命周期中会发生什么。

示例top输出:

top - 14:12:53 up 4 days,  5:45,  1 user,  load average: 313.33, 418.36, 522.87
Tasks: 501 total,   5 running, 496 sleeping,   0 stopped,   0 zombie
%Cpu(s): 33.5 us, 50.9 sy,  0.0 ni, 15.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 19650371+total, 46456320 free, 43582952 used, 10646443+buff/cache
KiB Swap: 13421772+total, 78065520 free, 56152200 used. 15164291+avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                       
 85642 user  20   0   36.5g   7.6g 245376 S  1566  4.0   1063:21 python                                                                                                                                        
 97440 user  20   0   33.1g   5.3g  47460 S  1105  2.8 512:10.86 python                                                                                                                                        
 97297 user  20   0   31.0g   4.0g  69828 S 986.4  2.1 430:16.32 python                                                                                                                                        
181854 user  20   0   19.3g   5.0g  19944 R 100.0  2.7   2823:09 python 
...
Run Code Online (Sandbox Code Playgroud)

iostat -x 5 3在同一台服务器上的输出:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          50.48    0.00   12.06    0.38    0.00   37.08

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda             350.41   705.68   58.12   22.24  2126.25  3393.61   137.36     6.02   74.93    9.10  246.94   1.19   9.56
dm-0              0.00     0.00    4.87    8.70   511.41   516.65   151.59     0.31   22.55   28.40   19.28   2.62   3.56
dm-1              0.00     0.00  403.67  719.23  1614.71  2876.92     8.00     8.83    7.10    7.38    6.95   0.08   9.05
dm-2              0.00     0.00    0.00    0.00     0.02     0.01    65.03     0.00    3.74    3.82    1.00   2.12   0.00

Run Code Online (Sandbox Code Playgroud)

Mir*_*ici 7

平均负载显示准备运行的线程队列。在 Linux 中,这也包括等待磁盘的线程。可能会发生损坏的 NFS 服务器可能会将平均负载增加到疯狂的数字。这并不意味着 CPU 被占用了。

所以平均负载只显示了故事的一方面,不能单独考虑,这就是我要求top输出的原因。

注意一些工作负载是可并行化的。这意味着所有步骤将一个接一个地在同一个核心上运行。实际问题通常是部分可并行化的。

在性能方面,您有一些目标和限制。像低延迟、吞吐量、成本(初始成本和运营成本)......

如果您对吞吐量和低成本感兴趣,那么排长队可能是正常的。您所有的 CPU 内核都将始终处于 100% 的使用率。