解释多线程程序的Linux时间命令结果(%CPU> 100)

时间:2013-02-23 10:31:35

标签: linux time benchmarking blast

我想在服务器上对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和我输入的大小的输入是不现实的。

我需要的信息是用户时间,但我不确定如何解释它。

有关结果解释的任何建议吗?

1 个答案:

答案 0 :(得分:3)

从联机帮助页(取自here):

The default format is:

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

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

正如迪特里希·艾普在评论中指出的那样,看着已经过去的时间,他们匹配, 6:37:53 397.8833 分钟。

Here'suser/system/real(elapsed)时间之间差异的一个很好的解释:

  

真实是挂钟时间 - 从通话开始到结束的时间。这是所有经过的时间,包括其他进程使用的时间片   并且该过程花费的时间被阻止(例如,如果它正在等待   I / O完成)。

     

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

     

Sys是进程内核中花费的CPU时间。这意味着执行在系统调用中花费的CPU时间   内核,而不是仍在运行的库代码   用户空间。与'user'一样,这只是进程使用的CPU时间。   有关内核模式的简要说明,请参见下文(也称为   '主管'模式)和系统调用机制。