게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
clock_gettime vs gettimeofday 찾아본 결과
게시물ID : programmer_7480짧은주소 복사하기
작성자 : 함해보그로
추천 : 1
조회수 : 2417회
댓글수 : 1개
등록시간 : 2015/01/06 10:45:34
안녕하세요.

http://www.todayhumor.co.kr/board/view.php?table=programmer&no=7478&s_no=7478&page=1 에 댓글을 달 수 없네요..
그래서 이렇게 글하나 남깁니다.

user space 에서 gettimeofday는 다음과 같고
http://androidxref.com/5.0.0_r2/xref/bionic/libc/arch-arm/syscalls/gettimeofday.S
user space 에서 clock_gettime는 다음과 같습니다.
http://androidxref.com/5.0.0_r2/xref/bionic/libc/arch-arm/syscalls/clock_gettime.S
(glibc 를 봐야 하나 살펴보기 쉬운 bionic를 대체 했습니다)

시스템콜 호출 함수가 다른데요..
SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
struct timezone __user *, tz)
{
if (likely(tv != NULL)) {
struct timeval ktv;
do_gettimeofday(&ktv);
if (copy_to_user(tv, &ktv, sizeof(ktv)))
return -EFAULT;
}
if (unlikely(tz != NULL)) {
if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
return -EFAULT;
}
return 0;
}
gettimeofday 의 시스템콜 대응 함수는 do_gettimeofday 입니다.

SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
struct timespec __user *,tp)
{
struct k_clock *kc = clockid_to_kclock(which_clock);
struct timespec kernel_tp;
int error;

if (!kc)
return -EINVAL;

error = kc->clock_get(which_clock, &kernel_tp);

if (!error && copy_to_user(tp, &kernel_tp, sizeof (kernel_tp)))
error = -EFAULT;

return error;
}
clock_gettime 의 시스템콜 대응 함수는 kc->clock_get 인데요...

저는 실무에서 
user 에서는 gettimeofday 와 
kernel 에서는 do_gettimeofday(와 똑같은 스킴의 ktime_get)을 사용합니다.

do_gettimeofday 함수는 arch clock source (ARM CPU Timer(RTC? Clock counter?) 로 부터) 함수 호출 순간의 현재 값을 읽어옵니다. 
그래서 이게 정확할 것입니다.

clock_gettime 함수는 처음 보는데... 
함수 느낌으로 봐서는 kernel config define 이나 BSP 완성도에 따라서 정확할 수도 있고 아닐 수도 있을 것 같습니다.

결론은 gettimeofday 추천.

ps 두 함수의 차이점과 do_gettimeofday 의 동작 방식을 100% 확실히 모르는 상태에서 이렇게 글까지 써가며 답변 드려 죄송합니다.

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호