1

サーバーで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 とそれに入れたサイズの入力には非現実的です。

必要な情報はユーザー時間ですが、それを解釈する方法がわかりません。

結果の解釈について何か提案はありますか?

4

1 に答える 1

3

マンページから(およびここから取得):

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分です。

user/system/real(elapsed)時間の違いのわかりやすい説明は次のとおりです。

Real は実時間です。通話の開始から終了までの時間です。これは、他のプロセスによって使用されるタイム スライスと、プロセスがブロックされている時間 (たとえば、I/O の完了を待機している場合) を含むすべての経過時間です。

ユーザーは、プロセス内のユーザー モード コード (カーネルの外部) で費やされた CPU 時間の量です。これは、プロセスの実行に使用される実際の CPU 時間のみです。他のプロセスとプロセスがブロックされた時間は、この数値にはカウントされません。

Sys は、プロセス内のカーネルで費やされた CPU 時間の量です。これは、ユーザー空間でまだ実行されているライブラリ コードとは対照的に、カーネル内のシステム コールで費やされた CPU 時間を実行することを意味します。「ユーザー」と同様に、これはプロセスによって使用される CPU 時間のみです。カーネル モード (「スーパーバイザー」モードとも呼ばれます) とシステム コール メカニズムの簡単な説明については、以下を参照してください。

于 2016-09-06T10:22:01.173 に答える