Manpages

名 前

time − 時 間 と タ イ マ ー の 概 要

説 明

実 時 間 (real time) と プ ロ セ ス 時 間 実 時 間 は 、 特 定 の 時 点 か ら 計 っ た 時 間 と 定 義 さ れ る 。 特 定 の 時 点 と は 、 過 去 の 標 準 的 な 時 点 (下 記 の 紀 元 (Epoch) と カ レ ン ダ 時 刻 の 説 明 を 参 照 ) や 、 プ ロ セ ス の 一 生 に お け る 何 ら か の 時 点 (例 え ば 、 開 始 時 ) で あ る (経 過 時 間 )。 プ ロ セ ス 時 間 は 、 プ ロ セ ス に よ っ て 使 わ れ た 総 CPU 時 間 と 定 義 さ れ る 。 多 く の 場 合 、 ユ ー ザ ー 時 間 と シ ス テ ム 時 間 に 分 け ら れ る 。 ユ ー ザ ー CPU 時 間 は 、 コ ー ド を ユ ー ザ ー モ ー ド で 実 行 す る の に 使 っ た 時 間 で あ る 。 シ ス テ ム CPU 時 間 は 、 そ の プ ロ セ ス の た め に カ ー ネ ル が シ ス テ ム モ ー ド で 実 行 す る の に 使 っ た 時 間 で あ る (例 え ば 、 シ ス テ ム コ ー ル を 実 行 す る の に 使 っ た 時 間 )。 time(1) コ マ ン ド は プ ロ グ ラ ム の 実 行 に 費 さ れ た 総 CPU 時 間 を 計 る の に 使 用 さ れ る 。 プ ロ グ ラ ム は 、 自 身 が 費 し た 総 CPU 時 間 を times(2), getrusage(2), clock(3) を 使 っ て 計 る こ と が で き る 。 ハ ー ド ウ ェ ア ク ロ ッ ク 多 く の コ ン ピ ュ ー タ が (電 池 で 駆 動 さ れ る ) ハ ー ド ウ ェ ア ク ロ ッ ク を 持 っ て い る 。 カ ー ネ ル は 起 動 時 に ソ フ ト ウ ェ ア ク ロ ッ ク を 初 期 化 す る た め に ハ ー ド ウ ェ ア ク ロ ッ ク を 読 み 込 む 。 よ り 詳 し い 情 報 は 、 rtc(4)hwclock(8) を 参 照 す る こ と 。 ソ フ ト ウ ェ ア ク ロ ッ ク , HZ, Jiffy タ イ ム ア ウ ト を 設 定 し た り (例 え ば select(2), sigtimedwait(2))、 CPU 時 間 を 計 測 し た り (例 え ば getrusage(2))す る 様 々 な シ ス テ ム コ ー ル の 精 度 は ソ フ ト ウ ェ ア ク ロ ッ ク の 分 解 能 (resolution) に 制 限 さ れ る 。 ソ フ ト ウ ェ ア ク ロ ッ ク と は 、 カ ー ネ ル が 管 理 す る jiffy 単 位 で 時 間 を 計 測 す る ク ロ ッ ク の こ と で あ る 。 jiffy の 大 き さ は カ ー ネ ル 定 数 HZ の 値 で 決 定 さ れ る 。

HZ の 値 は カ ー ネ ル の バ ー ジ ョ ン と ハ ー ド ウ ェ ア プ ラ ッ ト フ ォ ー ム で 異 な る 。 i386 の 場 合 は 以 下 の 通 り で あ る : 2.4.x と そ れ よ り 前 の カ ー ネ ル で は 、 HZ は 100 で あ っ た の で 、 jiffy の 値 は 0.01 秒 に な っ て い た 。 2.6.0 以 降 で は 、 HZ は 1000 に 増 や さ れ た の で 、 jiffy の 値 は 0.001 秒 で あ る 。 カ ー ネ ル 2.6.13 以 降 で は 、 HZ の 値 は カ ー ネ ル 設 定 パ ラ メ ー タ ー に な り 、 100, 250 (デ フ ォ ル ト ), 1000 と い う 値 に で き る 。 そ れ ぞ れ jiffy の 値 は 0.01, 0.004, 0.001 秒 に な る 。 カ ー ネ ル 2.6.20 以 降 で は 、 300 も 利 用 で き る よ う に な っ て い る 。 300 は 一 般 的 な 映 像 フ レ ー ム レ ー ト の 公 倍 数 で あ る (PAL, 25HZ; NTSC, 30HZ)。

times(2) シ ス テ ム コ ー ル は 特 殊 な ケ ー ス で あ り 、 こ の シ ス テ ム コ ー ル は カ ー ネ ル 定 数 USER_HZ で 定 義 さ れ た 粒 度 で 時 間 を 報 告 す る 。 ユ ー ザ ー 空 間 の ア プ リ ケ ー シ ョ ン は sysconf(_SC_CLK_TCK) を 使 っ て こ の 定 数 の 値 を 知 る こ と が で き る 。 高 精 度 タ イ マ ー
Linux 2.6.21 よ り 前 で は 、 タ イ マ ー や ス リ ー プ 関 連 の シ ス テ ム コ ー ル の 精 度 も jiffy の サ イ ズ に よ り 制 限 さ れ て い た 。

Linux 2.6.21 以 降 で は 、 Linux は 高 精 度 タ イ マ ー (high−resolution timers; HRTs) を サ ポ ー ト し て お り 、 CONFIG_HIGH_RES_TIMERS で 制 御 で き る 。 高 精 度 タ イ マ ー を サ ポ ー ト し て い る シ ス テ ム で は 、 タ イ マ ー と ス リ ー プ 関 連 の シ ス テ ム コ ー ル の 精 度 は も は や jiffy に 制 約 さ れ る こ と は な く 、 ハ ー ド ウ ェ ア が 許 す 限 り の 精 度 と な る (最 近 の ハ ー ド ウ ェ ア で は マ イ ク ロ 秒 単 位 の 精 度 が 一 般 的 で あ る )。 高 精 度 タ イ マ ー が サ ポ ー ト さ れ て い る か は 、 clock_getres(2) を 呼 び 出 し て 分 解 能 を 確 認 す る か 、 /proc/timer_list 内 の "resolution" エ ン ト リ ー を 参 照 す る か で 判 断 で き る 。 高 精 度 タ イ マ ー は す べ て の ハ ー ド ウ ェ ア ア ー キ テ ク チ ャ ー で サ ポ ー ト さ れ て い る 訳 で は な い (対 応 し て い る ア ー キ テ ク チ ャ ー は x86, arm, powerpc で あ る )。 紀 元
UNIX シ ス テ ム は 時 刻 を 紀 元 (1970−01−01 00:00:00 +0000 (UTC)) か ら の 秒 数 で 表 現 す る 。 プ ロ グ ラ ム は カ レ ン ダ 時 刻gettimeofday(2) を 使 っ て 計 る こ と が で き る 。 こ の 関 数 は 紀 元 か ら の 経 過 時 間 を (秒 と マ イ ク ロ 秒 で ) 返 す 。 time(2) は 同 様 の 情 報 を 提 供 す る が 、 最 も 近 い 秒 の 精 度 し か な い 。 シ ス テ ム 時 刻 は settimeofday(2) で 変 更 で き る 。 要 素 別 の 時 刻 ラ イ ブ ラ リ 関 数 の 中 に は tm 型 の 構 造 体 を 使 う も の が あ る 。 こ の 構 造 体 は 要 素 別 の 時 刻 を 表 し 、 時 刻 の 値 を 別 々 の 要 素 (年 ・ 月 ・ 日 ・ 時 ・ 分 ・ 秒 な ど ) に 分 け て 格 納 す る 。 こ の 構 造 体 は ctime(3) に 記 述 さ れ て お り 、 カ レ ン ダ 時 刻 を 要 素 別 の 時 刻 に 変 換 す る 関 数 に つ い て も 記 述 さ れ て い る 。 要 素 別 の 時 刻 を 表 示 可 能 な 文 字 列 に 変 換 す る 関 数 に つ い て は 、 ctime(3), strftime(3), strptime(3) に 記 述 さ れ て い る 。 タ イ マ ー の ス リ ー プ と 設 定 様 々 な シ ス テ ム コ ー ル と 関 数 に よ り 、 指 定 さ れ た 一 定 の 時 間 、 プ ロ グ ラ ム は ス リ ー プ (実 行 を 停 止 ) す る こ と が 可 能 で あ る 。 nanosleep(2), clock_nanosleep(2), sleep(3) を 参 照 す る こ と 。 様 々 な シ ス テ ム コ ー ル に よ り 、 プ ロ セ ス は 将 来 の あ る 時 点 で 有 効 期 間 が 終 了 す る タ イ マ ー を 設 定 で き る 。 ま た オ プ シ ョ ン と し て 繰 り 返 し 間 隔 が 指 定 で き る も の も あ る 。 alarm(2), getitimer(2), timerfd_create(2), timer_create(2) を 参 照 す る こ と 。

timer slack
Linux 2.6.28 以 降 で は 、 ス レ ッ ド の "timer slack" 値 を 制 御 す る こ と が で き る 。 "timer slack" は 、 停 止 中 の シ ス テ ム コ ー ル が タ イ ム ア ウ ト 以 外 で wake−up さ れ る (起 こ さ れ る ) 際 に 、 カ ー ネ ル に 許 容 さ れ る 遅 延 時 間 で あ る 。 こ の 遅 延 を 認 め る こ と で 、 カ ー ネ ル は wake−up イ ベ ン ト を ま と め て 行 う こ と が で き 、 そ の 結 果 、 シ ス テ ム 全 体 の wake−up 数 を 減 ら し 、 電 力 を 節 約 す る こ と が で き る 。 詳 細 は prctl(2)PR_SET_TIMERSLACK の 説 明 を 参 照 の こ と 。

関 連 項 目

date(1), time(1), adjtimex(2), alarm(2), clock_gettime(2), clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2), gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2), timerfd_create(2), times(2), utime(2), adjtime(3), clock(3), clock_getcpuclockid(3), ctime(3), pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3), timeradd(3), usleep(3), rtc(4), hwclock(8)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。