마이크로초 분해능으로 시스템 시간을 얻는 방법

마이크로초 분해능으로 시스템 시간을 얻는 방법

현재 시스템 시간(마이크로초 분해능)을 알고 싶습니다. date +%s에포크(1-1-1970) 이후의 시간을 초 단위로 반환합니다. 마이크로초 단위로 시간 해상도를 어떻게 얻을 수 있나요? 이 값을 쿼리할 때 지연이 얼마나 되나요? 대기 시간이란 t쿼리 시점의 초 단위를 의미합니다 . 이는 나에게 t + t'어떤 가치를 제공합니까 t'?
내 사용 사례: 여러 개의 Raspberry Pi를 동시에 사용하여 동영상을 녹화합니다. 이제 비디오의 각 프레임에 타임스탬프를 추가하여 정렬할 수 있습니다. 현재 타임스탬프에는 시작 시간(시작 이후 시간)이 사용됩니다. 부팅 시간은 정확하지만 각 라즈베리파이의 부팅 시간은 다릅니다. 모든 Pi를 NTP 서버로 구성하여 모두 동일한 시스템 시간을 갖도록 했습니다. 그래서 기본적으로 부팅 시간보다는 시스템 시간의 타임스탬프를 원합니다. 어떻게 해야 하나요?

답변1

date +%s%N

에포크 이후 나노초를 제공합니다. 마이크로초를 얻으려면 평가를 수행하세요.

expr `date +%s%N` / 1000

답변2

date모든 명령(심지어 명령 포함)을 실행하는 데 최소한 수백 마이크로초가 걸린다는 점을 고려하면 쉘 스크립트에서 이러한 종류의 정밀도를 요구하는 것은 별 의미가 없습니다.

특히 명령을 사용하여 date이 정밀도로 명령 실행 시간을 측정할 수는 없습니다.

이를 위해서는 time명령이나 키워드를 사용하는 것이 좋습니다.

일부 구현에서는 다음을 제공하기 위해 형식을 변경할 수 있습니다.과거시간의 정확도는 1초 미만입니다.

$ bash -c 'TIMEFORMAT=%3R; time date +%s'
1432210052
0.001

$ ksh -c 'TIMEFORMAT=%3R; time date +%s'
1432210094
0.001

$ zsh -c 'TIMEFMT=%*E; time date +%s'
1432210123
0.001

다양한 셸에는 시간을 확보할 수 있는 다양한 내장형(따라서 최소한의 지연) 방법이 있습니다.

ksh93그리고 유형을 다음으로 변경하면 1초 미만의 정확도를 제공하는 변수가 zsh있습니다.$SECONDS뜨다:

$ zsh -c 'typeset -F SECONDS=0; date; echo "$SECONDS"'
Thu 21 May 13:09:37 BST 2015
0.0012110000
$ ksh -c 'typeset -F SECONDS=0; date; echo "$SECONDS"'
Thu 21 May 13:09:42 BST 2015
0.0010249615

zsh특수 변수 가 있습니다 $EPOCHREALTIME(모듈에서 사용 가능 zsh/datetime):

$ zsh -c 'zmodload zsh/datetime; echo $EPOCHREALTIME; date; echo $EPOCHREALTIME'
1432210318.7319943905
Thu 21 May 13:11:58 BST 2015
1432210318.7333047390

ksh93최신 버전은 내장 형식을 지원하지만 ( bashGNU 확장임에도 불구하고) 표현 방법에 동의하지 않습니다 .%(format)Tprintfbash%N지금.

$ ksh -c 'printf "%(%s.%N)T\n" now;printf "%(%s.%N)T\n" now'
1432210726.203840000
1432210726.204068000

(보시다시피 내장 명령 호출 사이에는 여전히 228마이크로초가 있습니다.)

답변3

말씀하신 대로 date +%s에포크 이후의 초 수를 반환합니다. 그래서,

date +%s%N초와 현재 나노초를 반환합니다.

date +%s%N마이크로초 단위의 값을 얻으려면 값을 1000으로 나눕니다 . 즉.

echo $(($(date +%s%N)/1000))

답변4

나는 보통 date +%s%6N마이크로초를 얻는 데 사용합니다. 아래 표는 각 타임스탬프에 대한 빠른 치트 시트입니다.

타임스탬프 유형 타임스탬프를 가져오는 명령 예시 값
date +%s 1698581801
밀리초 date +%s%3N 1698581813630
마이크로초 date +%s%6N 1698581885706258
나노초 date +%s%N 1698581886792509947

관련 정보