CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): 구르미 (구르미)
날 짜 (Date): 2005년 3월 11일 금요일 오전 08시 49분 22초
제 목(Title): Re: [질] CPU 성능 (MHz)알아내기?


1. linux라면 rdtsc(), rdtscl()을 사용하면 TSC register를 user
 process에서도 읽을수 있어요.

2. CPU speed는 header file같이 static하게 정해진 곳에 적어둘수가 없어요.
   같은 기계라도 매번 부팅할때마다 /proc/cpuinfo로 확인하면 MHz가 조금씩
   다르게 나올껄요? 그게 booting 과정에 정해지는거라 cpu_khz라는 kernel
   symbol을 가지고 kernel로부터 얻어와야해요. 보통 /proc/ksyms에 보면
   cpu_khz가 export되어 있을테니 간단하게 dummy driver하나 만드세용~
   (cpu_khz로 keyword search해보면 분명 누군가가 이미 만들어뒀을듯.. ^^)

----

  <asm/timex.h> 를 보면

--
typedef unsigned long long cycles_t;

extern cycles_t cacheflush_time;

static inline cycles_t get_cycles (void)
{
#ifndef CONFIG_X86_TSC
  return 0;
#else
  unsigned long long ret;

  rdtscll(ret);
  return ret;
#endif
}

extern unsigned long cpu_khz;
--

rdtsc와 cpu_khz가 있는데 제가 쓰는 학교의 리눅스 머신들은 CONFIG_X86_TSC가 
정의되어 있지 않아 0를 리턴받더군요. -_-;;

cpu_khz를 쓸려면 필요한 라이브러리를 따로 링크해야 하는지 그냥 불러 쓰니까 
링크에러가 나네용.

rdtsc는 privileged instruction이 아니니 그냥 불러써도 됩니다.

#define gethrtime(x)      {asm volatile (".byte 0x0f, 0x31" : "=A" (x));}
에서 ".byte 0x0f,0x31"이 "rdtsc"하고 같은 겁니다. ^^;;

cpu_khz를 써먹을 수 있는 방법이 궁금하네용.

그리고 위에서 cacheflush_time 얘는 뭐하는 넘인지도 혹시 아시는 분?



                                                                              
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.