linuxで時刻を取得する方法

linuxで時刻を取得する方法について調査した.(2006/7/17更新)


時刻を取得する方法としては

がある.両者は

  • 移植性が高い.オーバヘッドが大きい
  • 移植性が低い.オーバヘッドが小さい.

という関係にある.また後者の方法を取る場合は,CPUが複数あるSMP環境では,CPUが持っているクロックのレジスタが同期していないことも考慮しなければならない.

glibcが提供するAPIと,その内部の動作をまとめてみる.

関連するglibcソースコードは以下の通り

このように glibc の実装では,glibcとkernelの組み合わせで挙動が変わる.そこで実際の動作を strace を使って調査した

API linux-2.4.33 libc-2.3.2 Xeon smp linux-2.6.17 libc-2.3.6 Xeon smp linux-2.6.17 libc-2.4 Pen4 HT
gettimeofday sys_gettimeofday sys_gettimeofday sys_gettimeofday
CLOCK_MONOTONIC sys_gettimeofday sys_clock_getime sys_clock_getime
CLOCK_REALTIME 利用不可 sys_clock_getime sys_clock_getime
CLOCK_PROCESS_CPUTIME_ID 利用不可 RDTCS sys_clock_getime
CLOCK_THREAD_CPUTIME_ID 利用不可 RDTCS sys_clock_getime