[ CnUnix ] in KIDS 글 쓴 이(By): 구르미 (구르미) 날 짜 (Date): 2007년 1월 16일 화요일 오후 07시 30분 09초 제 목(Title): Re: [Q] SMP에서 rdtsc가 돌려주는 값?? RDTSC가 읽어 들이는 clock tick counter register는 각 CPU마다 있는 것으로 booting이후의 clock tick count 정보를 담고 있는데 시간이 오래 흐르다 보면 각 CPU마다 값이 달라질 수 있다는 것은 오래 전부터 잘 알려진 사실입니다. 분산시스템에서 NTP가 time drift를 해결하려고 하는 것과 scale만 다를 뿐 같은 맥락의 문제이지요. Linux시스템에서 이를 해결하기 위한 라이브러리(+소스)를 누군가가 공개한 적이 있었는 데 너무 오래되어서 레퍼런스를 기억을 못하겠네요. 아예 커널 레벨에서 정기적으로 couter regsiter들을 reset하는 방법도 제안된 적이 있었는 데 현재 채택되지는 않고 있는 듯 합니다. 제가 프로그램을 micro measurement할 때 애용하는 거라 관심이 많았죠. 원래부터 tsc register가 64bit이었는데 64bit architecture가 되었는데도 backward compatibility를 유지하느라 rdtsc를 실행하고 나면 eax와 ebx에 결과가 기록되어서 다시 합쳐 주어야 한다는 점이 매우 안타깝던 참이었습니다. |