30장. 애플리케이션 타임스탬프
빈번한 타임 스탬프를 수행하는 애플리케이션은 시계를 읽는 CPU 비용의 영향을 받습니다. 클럭을 읽는 데 사용되는 높은 비용과 시간은 애플리케이션의 성능에 부정적인 영향을 미칠 수 있습니다.
기본 클록보다 읽기 메커니즘이 있는 하드웨어 시계를 선택하여 시계를 읽는 비용을 줄일 수 있습니다.
RHEL for Real Time에서는 clock_gettime() 함수와 POSIX 클록을 사용하여 가능한 CPU 비용이 가장 낮은 클럭 읽기를 생성하여 추가 성능 이점을 얻을 수 있습니다.
이러한 이점은 높은 읽기 비용으로 하드웨어 클록을 사용하는 시스템에 대해 더 명확합니다.
30.1. POSIX 클록 링크 복사링크가 클립보드에 복사되었습니다!
POSIX는 시간 소스를 구현하고 나타내는 표준입니다. 시스템의 다른 애플리케이션에 영향을 주지 않고 애플리케이션에 POSIX 시계를 할당할 수 있습니다. 이는 커널에서 선택하고 시스템 전체에서 구현되는 하드웨어 클록과 대조적입니다.
지정된 POSIX 시계를 읽는 데 사용되는 함수는 <time .h>에 정의된 . clock_gettime() 입니다clock_gettime() 과 반대되는 커널은 시스템 호출입니다. 사용자 프로세스가 clock_gettime() 을 호출할 때:
-
해당 C 라이브러리(
glibc)는sys_clock_gettime()시스템 호출을 호출합니다. -
sys_clock_gettime()은 요청된 작업을 수행합니다. -
sys_clock_gettime()은 사용자 프로그램에 결과를 반환합니다.
그러나 사용자 애플리케이션에서 커널로의 컨텍스트 전환에는 CPU 비용이 있습니다. 이러한 비용은 매우 낮지만 작업이 수천 번 반복되면 누적된 비용이 애플리케이션의 전체 성능에 영향을 미칠 수 있습니다. 커널로 컨텍스트 전환을 방지하기 위해 더 빠르게 클럭을 읽을 수 있도록 CLOCK_MONOTONIC_COARSE 및 CLOCK_REALTIME_COARSE POSIX 클록에 대한 지원이 VDSO(가상 동적 공유 오브젝트) 라이브러리 함수 형태로 추가되었습니다.
_COARSE 클럭 변형 중 하나를 사용하여 clock_gettime() 에 의해 수행되는 시간 읽기는 커널 개입이 필요하지 않으며 사용자 공간에서 완전히 실행됩니다. 이는 상당한 성능 이점을 제공합니다. _COARSE 클록에 대한 시간 읽기에는 밀리 초(ms) 해상도가 있으므로 1ms보다 작은 시간 간격은 기록되지 않습니다. POSIX 클록의 _COARSE 변형은 밀리 초 클록 해상도를 수용할 수 있는 모든 애플리케이션에 적합합니다.