/ usr / bin / time shell 명령으로 % e 정밀도 향상


19

쉘에서 time 명령을 실행 time ./myapp하면 다음과 같은 출력이 나타납니다.

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

그러나 명령을 실행하면 \time -f %e ./myapp정밀도가 떨어지고 다음을 얻습니다.

2.01s

%E명령을 사용 하면 같은 방식으로 정밀도가 떨어집니다. 다시 정밀도를 높이려면 어떻게 초를 출력합니까?

나는이 Linux / Unix Command : 시간 과이 질문에 대한 연구를 기반 으로 했습니다.

답변:


21

이 두 명령이 다른 버전의 시간을 호출한다는 것을 이해하고 있다고 가정합니다.

bash의 내장 버전

% time

GNU 시간 일명. / usr / bin / 시간

% \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일반적으로 더 유용 내장보다.

정밀도 문제에 대해서는이 github gist 에서 구체적으로 설명합니다.

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

내장 된 bash 명령 시간은 밀리 초의 실행 정밀도를 제공하며 GNU 시간 (일반적으로 / usr / bin / time)은 센티 초 정밀도를 제공합니다. times (2) syscall은 시계로 시간을 제공하고 100 개 클럭 = 1 초 (보통)이므로 정밀도는 GNU 시간과 같습니다. 더 정확한 bash 시간은 무엇입니까?

배쉬 타임은 내부적으로 getrusage ()를 사용하고 GNU 타임은 times ()를 사용합니다. getrusage ()는 마이크로 초 해상도로 인해 훨씬 ​​정확합니다.

다음 예제에서 센티 초를 볼 수 있습니다 ( 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

bash time명령을 사용하면 더 많은 해상도를 얻을 수 있으며 해상도를 제어 할 수 있습니다.

# 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.

예, 나는 이미 그 모든 것을 알고있었습니다. 그래서 내가 원하는 것이 불가능하다는 결론을 내릴 수 있습니까? bash 시간 버전을 사용하고 3 자리 숫자로 실제 초 시간 만 가져 오는 방법이 있습니까?
Flame_Phoenix

내 업데이트를 참조하십시오. 변수 TIMEFORMAT을 사용하여 bash의 시간 명령을 제어 할 수 있습니다. 찾고 계십니까?
slm

야, 그게 다야, 고마워! 그래도 궁금합니다. 어떻게 파일에 추가합니까? % TIMEFORMAT = '% 3R'을 (를) 사용하려고합니다. time (sleep .22222) >> bla.txt하지만 작동하지 않습니다 : S Anyway, selected. 나는 당신에게 카르마 ++를 줄 수 있기를 바랍니다. 그러나 나는 15 카르마가 없습니다. -.- '
Flame_Phoenix

2
TIMEFORMAT = '% 3R'; 시간 (수면 .22222) 2 >> myFile.txt
Flame_Phoenix

둘 다 오랫동안 사용하고에 대해 알지 못했지만 TIMEFORMAT항상 sed를 사용하여 실시간을 추출했습니다. 감사! "마이크로 초 해상도로 인해." 진술 TIMEFORMAT=%6R은 작동 할 수있는 희망을 넣었 지만 정밀도 숫자는 0-3 일 수 있습니다.
mxmlnkn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.