[ 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 얘는 뭐하는 넘인지도 혹시 아시는 분? |