xtime

読み:エックス・タイム
外語: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マイクロ秒程度であることが分かる。

用語の所属
Linuxカーネル
日付型
関連する用語
jiffies
ktime_t
suseconds_t

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club