Neoteny

jiffies

2007. 4. 16. 22:43
반응형

방법은 간단하다. 일정시간 소비된 idel jiffies를 총 소비된 jiffies로 나눠 주면 된다.


(idle jiffies)*100 / (idle jiffies + use jiffies + system jiffies + low prio jiffies)


위의 방법을 통하면 cpu의 idle의 백분율 값을 얻어올 수 있다.

일정 시간은 초단위로 하면 되고, 소비된 jiffies를 구해야 함으로 이전의 jiffies값을 가지고 있어야 된다.



1. fopen으로 /proc/cpuinfo를 연다.
2. 파일을 열었다면 fread로 cpuinfo 내용을 읽는다. 이 때 충분히 큰 버퍼를 사용해서 내용이 넘치지 않도록 하자.
3. 읽은 내용에서 ‘cpu MHz’로 시작하는 항목을 찾아서 ‘:’ 뒤 숫자를 읽어서 출력한다.
4. 파일을 닫는다.
상기 시나리오를 토대로 작성한 프로그램인 cpuinfo.c는 다음과 같다. 몇몇 미진한 부분이 있는데, 개선은 독자 여러분의 숙제로 남긴다.

#include
#include
/* /proc/cpuinfo가 보고하는 정보를 사용해서 시스템 CPU 주파수를 Mhz 단위로 반환한다. */
/* FIXME: 다중 CPU일 경우 첫번째 CPU 클럭만 반환한다. 이에 대한 수정은 독자 여러분의 몫이다. */

float get_cpu_clock_speed ()
{
FILE* fp;
char buffer[1024];
size_t bytes_read;
char* match;
float clock_speed;

/* /proc/cpuinfo 전체 내용을 버퍼에 담는다. */
/* FIXME: 버퍼 크기를 넘어서는 자료가 들어올 경우 그냥 잘라버리고 있다. 역시 수정은 독자 여러분의 몫이다. */
fp = fopen ("/proc/cpuinfo", "r");
bytes_read = fread (buffer, 1, sizeof (buffer), fp);
fclose (fp);
/* 읽기 실패이거나 버퍼가 충분히 크지 않을 경우 종료한다. */
if (bytes_read == 0 || bytes_read == sizeof (buffer))
return 0;
/* NULL로 문자열을 끝낸다. */
buffer[bytes_read] = '

반응형