'Seconds'에 해당되는 글 1

  1. 2008.03.31 TSC(Time stamp counter) to seconds

TSC(Time stamp counter) to seconds

최근 Intel 계열 CPU에는 하드웨어적인 시간 counter가 존재한다.

CPU가 동작하고 나서 지속적으로 counting 되며, OS(Windows, Linux 등)는 TSC 값을 가지고 시스템 시간을 유지하기도 한다.

TSC 는 CPU의 Hz(Hertz) 값을 기준으로 증가하며,
흔히 CPU Ticks라 말하기도 한다.

그렇다면 TSC와 같이 단순 counter를 우리가 사용하는 시간단위로 바꾸기 위해서는
무엇이 필요할까?

위에서 언급한 "CPU의 Hz(Hertz) 값을 기준으로 증가"에서 힌트를 얻을 수 있다.

!! CPU의 Hz 값에 따라 1개의 counter가 증가하는구나 !!

그럼 Hz는 뭘까?

Hz는 CPU의 성능를 나타내는 단위로 1개의 명령어를 처리하는데 걸리는 시간이다.
1Hz는 1초에 1개의 명령어를 처리할 수 있음을 의미한다.

내가 사용하는 컴퓨터에서
TSC를 이용해 milliseconds를 추출하기 위해서는 어떻게 해야할까?

매우 간단하다.

현재 CPU의 Hz를 n이라고 한다면,
1초에 n번의 명령어 or Time Interrupt 가 일어난다는 의미이다.
그렇다면 그만큼 TSC의 값도 증가되었을 것이다

다음은 값을 구하는 방법이다.

CPU Hz : CPU_HZ
A 지점에서의 측정값 : A_VALUE
B 지점에서의 측정값 : B_VALUE
(단, A보다 B가 나중에 일어난다)

A와 B간의 진행 시간을 seconds 로 나타내기 위해서는

A_B_TSC_VALUE = B_VALUE - A_VALUE; (단위 : Time stamp counter value)
A_B_SECONDS = A_B_TSC_VALUE / CPU_HZ; (단위 : seconds)

짜잔! 값은 A_B_SECONDS가 되겠다!