25장. 애플리케이션 타임스탬프
타임스탬프를 자주 수행하는 애플리케이션은 시계를 읽는 CPU 비용의 영향을 받습니다. 클럭을 읽는 데 사용된 높은 비용과 시간은 애플리케이션 성능에 부정적인 영향을 미칠 수 있습니다.
기본 시계보다 빠르고 읽기 메커니즘이 있는 하드웨어 시계를 선택하여 클럭을 읽는 비용을 줄일 수 있습니다.
RHEL for Real Time에서는 clock_gettime()
함수와 함께 POSIX 시계를 사용하여 가능한 가장 낮은 CPU 비용으로 클럭 읽기를 생성함으로써 추가 성능 향상을 얻을 수 있습니다.
이러한 이점은 높은 읽기 비용으로 하드웨어 시계를 사용하는 시스템에 더 큰 이점이 있습니다.
25.1. POSIX 클럭
POSIX는 시간 소스를 구현하고 표시하기 위한 표준입니다. 시스템의 다른 애플리케이션에 영향을 주지 않고 애플리케이션에 POSIX 시계를 할당할 수 있습니다. 이는 커널에 의해 선택되고 시스템 전체에 구현된 하드웨어 시계와 대조됩니다.
지정된 POSIX 시계를 읽는 데 사용되는 함수는 clock_gettime()
이며 < time.h>에서 정의됩니다
. 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
변형은 밀리 초 시계 해상도를 수용할 수 있는 모든 애플리케이션에 적합합니다.
_COARSE
접두사와 없이 POSIX 시계를 읽는 비용과 해결 방법을 비교하려면 RHEL for Real Time Reference 가이드를 참조하십시오.