Brise

프로세스에 의해 사용된 시간 구하기 본문

Linux

프로세스에 의해 사용된 시간 구하기

naudhizb 2015. 4. 26. 00:29
반응형


--


--


clock_t clock() 함수 : 프로세스가 사용한 시간 구하는 함수

http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/3/clock

http://forum.falinux.com/zbxe/?document_srl=408364&mid=C_LIB


clock_gettime : 전체 시스템의 실제 흐른시간 구하는 함수

http://sunyzero.tistory.com/161


clock_t times : 프로세스가 사용한 시간 구하는 함수( 유저 시스템, 나누어서)

http://linux.die.net/man/2/times



예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<stdio.h>
#include<time.h>
#include<sys/times.h>
 
unsigned char get_utilization_flag =1;
clock_t start_clock, end_clock;
struct timespec start_time, end_time, temp_time;
struct tms start_times, end_times, temp_times;
double cpu_time, real_time;
double utilization;
 
void print_clock(struct tms clocker)
{
        printf("PROCESS:\n%d\n%d\n%d\n%d\n",clocker.tms_utime,clocker.tms_stime,clocker.tms_cutime,clocker.tms_cstime);
}
 
void get_utilization(void)
{
    // PREVENT NULL DATA
        if(get_utilization_flag)
        {
                get_utilization_flag=0;
                start_clock = clock();
                end_clock = clock();
                times(&start_times);
                times(&end_times);
                print_clock(end_times);
                clock_gettime(CLOCK_REALTIME,&start_time);
                clock_gettime(CLOCK_REALTIME,&end_time);
                utilization=0;
        }
 
// STAMP TIME
        end_clock = clock(); // PROCESS USED TIME
        times(&end_times); // PROCESS USED TIME ( USER TIME, SYSTEM TIME, CHILD_USER, CHILD_SYSTEM)
        clock_gettime(CLOCK_REALTIME,&end_time); // REAL-TIME ELAPSED
//PRINT TIME
        print_clock(end_times);
        printf("end_clock : %d, start_clock : %d\n",end_clock, start_clock);
 
 
        cpu_time = ((double) (end_clock - start_clock))/(double)CLOCKS_PER_SEC; // CLOCK_T TO SECOND
        temp_time.tv_sec = end_time.tv_sec - start_time.tv_sec;
        temp_time.tv_nsec = end_time.tv_nsec - start_time.tv_nsec; // DIFF REAL_TIME
        real_time = (double)temp_time.tv_sec + ((double)temp_time.tv_nsec)/((double)NSEC_TO_SEC); // TIMESPEC TO SECOND
        utilization = cpu_time/real_time; // GET UTILIZATION
        printf("CPU_TIME :\n%6lf\nREAL_TIME :\n%6lf\nUTIL :\n%6lf\n",cpu_time,real_time,utilization);
  // PRINT
 
// ITERATE
        start_clock = end_clock;
        start_time = end_time;
 
 
}
 
#if TEST_MAIN_PERFORMANCE
int main (void)
 
{
    unsigned long i = 1000000000;
 
    get_utilization();
   for(;i>=0;i--);
    get_utilization();
        return 0;
}
#endif
 
cs



--


--



반응형
Comments