%e 정밀도를 높이려면 /usr/bin/time 쉘 명령을 사용하십시오.

%e 정밀도를 높이려면 /usr/bin/time 쉘 명령을 사용하십시오.

셸에서 time 명령을 실행하면 time ./myapp다음과 같은 출력이 표시됩니다.

real    0m0.668s
user    0m0.112s
sys     0m0.028s

그러나 명령을 실행하면 \time -f %e ./myapp정밀도가 떨어지고 다음과 같은 결과가 나타납니다.

2.01s

해당 명령을 사용하면 %E같은 방식으로 정밀도가 떨어집니다. 더 높은 정밀도를 얻으려면 어떻게 변경해야 하지만 여전히 초만 출력합니까?

내 연구는 이것에 기초하고 있습니다.Linux/Unix 명령: 시간등.이 문제

답변1

두 명령이 서로 다른 버전을 호출하는 것을 이해했다고 가정합니다. 그렇죠?

Bash 내장 버전

% time

GNU 시간이라고도 불립니다. /usr/빈/시간

% \time

내장 명령은 여기에서 읽을 수 있습니다 time:bash

% help time
time: time [-p] PIPELINE
    Execute PIPELINE and print a summary of the real time, user CPU time,
    and system CPU time spent executing PIPELINE when it terminates.
    The return status is the return status of PIPELINE.  The `-p' option
    prints the timing summary in a slightly different format.  This uses
    the value of the TIMEFORMAT variable as the output format.

GNU time, /usr/bin/time는 내장된 것보다 더 유용한 경우가 많습니다.

정확성에 대한 질문은 이 섹션에서 다룹니다.깃허브 필수사항, 구체적으로:

Bash 시간이 GNU 시간보다 더 정확한 이유는 무엇입니까?

내장된 bash 명령 시간은 밀리초 수준의 실행 정확도를 제공하는 반면, GNU 시간(일반적으로 /usr/bin/time)은 센티초 수준의 정확도를 제공합니다. times(2) 시스템 호출은 시간을 시계 단위로 제공하므로 100시계 = 1초(보통)이므로 정밀도는 GNU 시간과 유사합니다. bash 시간은 무엇을 더 정확하게 사용합니까?

Bash 시간은 내부적으로 getrusage()를 사용하고, GNU 시간은 내부적으로 times()를 사용합니다. getrusage()는 마이크로초 해상도로 인해 더 정확합니다.

다음 예시를 통해 100분의 1초를 확인할 수 있습니다(출력의 5번째 줄을 참조하세요.):

% /usr/bin/time -v sleep .22222
    Command being timed: "sleep .22222"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.22
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1968
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 153
    Voluntary context switches: 2
    Involuntary context switches: 1
    Swaps: 0
    File system inputs: 0
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

time아래와 같이 bash 명령을 사용하여 더 높은 해상도를 얻을 수 있으며 해상도를 제어할 수 있습니다.

# 3 places 
% TIMEFORMAT='%3R'; time ( sleep .22222 )
0.224

~에서Bash 변수 매뉴얼:

TIMEFORMAT
The value of this parameter is used as a format string specifying how the timing information for pipelines prefixed with the time reserved word should be displayed. The ‘%’ character introduces an escape sequence that is expanded to a time value or other information. The escape sequences and their meanings are as follows; the braces denote optional portions.

%%
A literal ‘%’.

%[p][l]R
The elapsed time in seconds.

%[p][l]U
The number of CPU seconds spent in user mode.

%[p][l]S
The number of CPU seconds spent in system mode.

%P
The CPU percentage, computed as (%U + %S) / %R.

The optional p is a digit specifying the precision, the number of fractional digits after a decimal point. A value of 0 causes no decimal point or fraction to be output. At most three places after the decimal point may be specified; values of p greater than 3 are changed to 3. If p is not specified, the value 3 is used.

The optional l specifies a longer format, including minutes, of the form MMmSS.FFs. The value of p determines whether or not the fraction is included.

If this variable is not set, Bash acts as if it had the value

$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
If the value is null, no timing information is displayed. A trailing newline is added when the format string is displayed.

관련 정보