system에서 보다 정확한 성능 측정을 위한 초 계산법

kyungminLim·2024년 5월 20일
0

오늘은 linux system에서 보다 정확한 성능 측정을 위해 timeval 구조체를 사용하는 법을 말하겠다.


static double time_since(struct timeval *start_tv, struct timeval *stop_tv)                           
{   
    double sec, usec;                                                                                 
    double ret;                                                                                       
    sec = stop_tv->tv_sec - start_tv->tv_sec;                                                         
    usec = stop_tv->tv_usec - start_tv->tv_usec;                                                      
    if (sec > 0 && usec < 0) {                                                                        
        sec--;                                                                                        
    usec += 1000000;                                                                                  
    } 
    ret = sec + usec / (double)1000000;                                                               
    if (ret < 0)
        ret = 0;
    return ret;
}       
    

함수 'time_since'는 두 'struct timeval' 객체 ('start_tv'와 'stop_tv' (주로 'end_tv')) 간의 시간 차이를 초 단위로 계산하는 함수이다. 이 함수는 주로 성능 측정을 위해 사용된다. 'struct timeval'은 초 ('tv_sec')와 마이크로초 ('tv_usec') 단위로 시간을 나타내는 구조체이다.

static double time_since(struct timeval *start_tv, struct timeval *stop_tv)
{
    double sec, usec;
    double ret;
  • 함수는 두개의 'struct timeval' 포인터 ('start_tv', 'stop_tv'('end_tv'))를 매개변수로 받는다.
  • 두 변수 'sec'과 'usec'은 각각 초와 마이크로초 차이를 저장하기 위해 사용된다.
  • 'ret'은 최종적으로 계산된 시간 차이를 저장하는 변수이다.
    sec = stop_tv->tv_sec - start_tv->tv_sec;
    usec = stop_tv->tv_usec - start_tv->tv_usec;
  • 'sec' 은 두 timeval 객체 간의 초 차이를 계산한다.
  • 'usec' 은 두 timeal 객체 간의 마이크로초 차이를 계산한다.
    if (sec > 0 && usec < 0) {
        sec--;
        usec += 1000000;
    }
  • 만약 초 차이가 양수이고 마이크로초 차이가 음수인 경우, 즉 'stop_tv'의 마이크로초 값이 'start_tv'의 마이크로초 값보다 작은 경우를 처리한다.
  • 이 경우, 초 차이에서 1을 빼고 마이크로초 차이에 1,000,000을 더해서 마이크로초 값을 보정한다. 이는 마이크로초 값을 양수로 만들고, 1초를 마이크로초로 변환한 값을 더해서 정확한 시간 차이를 유지한다.
    ret = sec + usec / (double)1000000;
  • sec 과 usec를 이용해서 최종 시간 차이를 초 단위로 계산한다.
  • 마이크로초 값을 1,000,000으로 나누어 초 단위로 변환한 후, 초 차이와 더한다.
    if (ret < 0)
        ret = 0;
    return ret;
}
  • 계산된 시간 차이가 음수인 경우, 이를 0으로 보정한다. 이는 잘못된 입력 또는 계산 오류를 방지기 위한 안전 장치이다.
  • 최종 계산된 시간 차이를 반환한다.

요약

이 함수는 두 'struct timeval' 객체 간의 시간 차이를 초 단위로 정확하게 계산하여 반환한다. 초와 마이크로초 차이를 개별적으로 계산하고, 음수 마이크로초 값을 보정하며, 최종적으로 음수 시간이 반환되지 않도록 한다. 이 함수는 성능 측정이나 시간 간격 계산과 같은 다양한 용도에 사용될 수 있다.

0개의 댓글