시스템 서비스와 관련하여 타임스탬프 단조성은 무엇을 의미합니까?

시스템 서비스와 관련하여 타임스탬프 단조성은 무엇을 의미합니까?

다음 명령을 실행할 때

systemctl show --all tomcat

"ActiveEnterTimestampMonotonic"과 같은 속성을 포함하여 많은 속성을 얻습니다. 이 속성의 값은 "14786979371795"와 같이 매우 큽니다. 이는 서비스가 활성화된 이후의 에포크 이후의 밀리초 수를 나타내기에는 너무 큰 것 같습니다. 이 또한 서비스가 활성화된 이후 나노초만큼 작은 것으로 보입니다. 그래서 그것은 무엇입니까? "타임스탬프 단조성"이란 무엇입니까?

답변1

freedesktop.org의 systemd D-Bus ABI에 대한 설명타임스탬프는 다음과 같이 설명됩니다.

InactiveExitTimestamp,InactiveExitTimestampMonotonic,ActiveEnterTimestamp,ActiveEnterTimestampMonotonic,ActiveExitTimestamp,ActiveExitTimestampMonotonic,InactiveEnterTimestamp,InactiveEnterTimestampMonotonic장치가 마지막으로 비활성 상태로 유지되거나, 활성 상태로 전환되거나, 활성 상태로 전환되거나, 비활성 상태로 들어간 시간의 CLOCK_REALTIME 및 CLOCK_MONOTONIC 64비트 usec 타임스탬프를 포함합니다. 단위 변환 시점은 다음과 같습니다.비활성/실패→활성화,활성화→활성,활성→비활성화,마침내비활성화 → 비활성화/실패. 이러한 변환이 이번 부팅에 기록되지 않은 경우 해당 필드는 0입니다.

조금 숨겨져 있지만 가운데에는 마이크로초(μs)를 의미하는 "usec timestamp"라고 적혀 있습니다.

clock_gettime()systemd는 여러 대체 "시계" 중 하나에서 시간을 얻기 위한 시스템 API 기능을 제공하는 Linux에서 타임스탬프를 얻습니다 . 문서에 나와 있듯이 a CLOCK_REALTIME및 이라는 항목이 필요합니다 CLOCK_MONOTONIC.

이 기능에 대한 매뉴얼말했다 (강조) :

CLOCK_MONOTONIC
단조로운 시간을 나타내는 설정 불가능한 시계불특정 시작점 때문에. 이 시계는 시스템 시간의 불연속적인 점프(예: 시스템 관리자가 시계를 수동으로 변경하는 경우)의 영향을 받지 않지만 adjtime(3) 및 NTP에 의해 수행되는 증분 조정의 영향을 받습니다.

내 시스템에서는 이러한 값이 시스템 부팅 시간의 시작 지점에 해당하는 것처럼 보이지만 이에 의존해서는 안 됩니다. (Linux 매뉴얼에는 CLOCK_BOOTTIME.와 .의 차이점 도 설명되어 있습니다 CLOCK_MONOTONIC.)

*TimestampMonotonic값을 사용하여 간격을 계산하거나 날짜와 시간이 필요한 경우 실시간 타임스탬프를 계산할 수 있습니다. 타이머 단위가 있는 경우 상대 시간 설정은 단조로운 시간 단위입니다.


실증적 실험으로 특정 서비스를 다시 시작한 다음 타임스탬프를 새로 고쳤습니다. 내가 얻는 가치는 다음과 같습니다.

ActiveEnterTimestamp=Tue 2018-07-03 18:37:31 EEST
ActiveEnterTimestampMonotonic=14341647533587

그리고

ActiveEnterTimestamp=Tue 2018-07-03 19:03:04 EEST
ActiveEnterTimestampMonotonic=14343180833503

차이는 14343180833503 - 14341647533587153329991625.5분(마이크로초) 간격입니다.

답변2

솔라리스는 28년 동안 기능해 왔으며 gethrtime()출시 이후 단조로운 나노초를 반환해 왔습니다.

귀하의 숫자는 4시간의 가동 시간과 일치하며 systemd 작성자가 Solaris를 조사했기 때문에 부팅 후 나노초가 걸릴 가능성이 높습니다.

확인하다:

14786979371795~로 나누다10억밝혀지다14786.979371795두번째

14786.979371795초로 나눈60몇 초 만에 결과246.4496561965

246.4496561965분은4.1074942699시간

피드백 결과 172일의 가동 시간이 발생하므로 이 숫자는 다음의 단조 시계를 기반으로 하는 경우 마지막 부팅 이후의 마이크로초 수임이 분명합니다.clock_gettime()

참고: 부호 있는 64비트 숫자를 사용하여 나노초를 계산하는 단조 카운터는 최대 1696년의 가동 시간을 달성할 수 있습니다.

관련 정보