xtime |
辞書:電算用語の基礎知識 プログラミング用語編 (PTPROGY) |
読み:エックス-タイム |
外語:xtime |
品詞:名詞 |
Linuxカーネルにおいて時刻を記録する、struct timespec型の変数の一つ。
|
定義 |
kernel/time/timekeeping.c
struct timekeeper {
struct timespec xtime;
}
実装にもよるが、AndroidのLinuxカーネルでは他に次の変数が構造体中にあり、xtimeを作るために使われている。
u64 xtime_interval;
s64 xtime_remainder;
u32 raw_interval;
u64 xtime_nsec;
概要 |
The Epochすなわち1970年1月1日00:00:00(GMT)からの経過時間を、ナノ秒単位で記録する。この値が、gettimeofday()などの関数で返される。
Linuxカーネルで得られるタイマーの精度はあくまでtick単位(jiffies相当)だが、環境に応じた様々な外部の高精度なクロックソースを参照することで補正し、精度を高めている。実際の精度は環境依存である。
特徴 |
スリープ |
CPUが起床している時のタイミングを取るために使うjiffiesと違い、xtimeは、CPUが起床した際にCPUがスリープしていた時間を算出して加算する(らしい)。
このため、CPU以外の外部のクロックソースの情報を参照する。その精度は、環境依存である。
スリープ中も止まらないカウンター |
例えば、AndroidのMSM向けLinuxカーネルでは、arch/arm/mach-msm/timer.cに、int64_t msm_timer_get_sclk_time()という関数があり、64ビットのカウンターが得られる。
実装を見ると、マクロの定義の有無でハードウェア構成が選択され、何かしらのクロックソースから直接値を得るか、または共有メモリーSMEM_SMEM_SLOW_CLOCK_VALUEなどからuint32_t型で値を得ていることが分かる。
SMEM_SMEM_SLOW_CLOCK_VALUEがどこで定期的に変更されているのかは定かではない(公開されているソース中から見つからない)が、MSMはマルチプロセッサ構成なので、CPU以外に動作している他のプロセッサーの非公開の処理で常時加算するのだと見込まれる。
得られた値はNSEC_PER_SEC倍された後、グローバル変数sclk_hzで割った商が返却されている。sclk_hzは、32768または32765がセットされるようで、秒間sclk_hz回インクリメントされるものを、ナノ秒単位に変換して提供しているのだということが分かる。ここから、どちらの値にせよ、ナノ秒単位であったとしても分解能は概ね30マイクロ秒程度であることが分かる。
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |