【问题标题】:Interpreting Linux time command result for a multi-threaded program (%CPU > 100)解释多线程程序的 Linux 时间命令结果 (%CPU > 100)
【发布时间】:2013-02-23 10:31:35
【问题描述】:

我想在我的服务器上对 BLAST 运行时间进行基准测试,因此我启动了 time 命令。 服务器有 16 个 CPU,我正在运行 BLAST 16 线程。在我进行分析时,可能还有其他应用程序在并行运行。

输出如下:

184255.45user 458.23system 6:37:54elapsed 773%CPU (0avgtext+0avgdata 83504272maxresident)k
294680inputs+10029344outputs (1799major+149694417minor)pagefaults 0swaps

将用户时间解释为 CPU 运行我的应用程序所花费的秒数,我得到的时间超过了总时间。我看到有人告诉我应该用 %CPU 来划分时间,但我只得到了 3 分钟,这对于 BLAST 和我放入的大小的输入是不现实的。

我需要的信息是用户时间,但我不知道如何解释。

对结果的解释有什么建议吗?

【问题讨论】:

  • 完全相切(但可能相关)的问题:这是一个集群吗?
  • 你做错了数学。 184255.45 ÷ 773% = 23800,或大约 400 分钟。
  • 仅供记录(除了@DietrichEpp 的评论):您必须将百分比除以100,否则您无法使用它们进行计算。 184,255.45s ÷ (773% ÷ 100) ≈ 23,836.41s23,836.41s ÷ 60 ≈ 400min

标签: linux time benchmarking blast


【解决方案1】:

来自手册页(取自here):

The default format is:

    %Uuser %Ssystem %Eelapsed %PCPU (%Xtext+%Ddata %Mmax)k
    %Iinputs+%Ooutputs (%Fmajor+%Rminor)pagefaults %Wswaps

因此,184255 秒在用户空间中花费,458 秒在内核空间中,6 小时 37 分 54 秒经过了“真实”时间.

正如 Dietrich Epp 在他的评论中指出的那样,看看经过的时间,他们匹配,6:37:53397.8833 分钟。

Here's 很好地解释了user/system/real(elapsed) 时间的区别:

Real 是挂钟时间 - 从通话开始到结束的时间。这是所有经过的时间,包括其他进程使用的时间片 以及进程阻塞的时间(例如,如果它正在等待 I/O 完成)。

User 是进程内用户模式代码(内核外部)所花费的 CPU 时间量。这只是实际使用的 CPU 时间 执行过程。其他流程和流程花费的时间 被阻止不计入这个数字。

Sys 是进程内在内核中花费的 CPU 时间量。这意味着执行系统调用所花费的 CPU 时间 内核,而不是仍在运行的库代码 用户空间。像“用户”一样,这只是进程使用的 CPU 时间。 请参阅下面的内核模式的简要说明(也称为 'supervisor'模式)和系统调用机制。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2023-03-05
    • 2013-10-17
    • 1970-01-01
    相关资源
    最近更新 更多