1
うるう秒 at /var/log/messages
今年の日本の1月1日は
うるう秒 で 1秒長かったわけだが、/var/log/messages にしっかりそのメッセージが残っていた。
Jan 1 08:59:59 one kernel: Clock: inserting leap second 23:59:60 UTC
ん、と言うことはこれは linux kernel 内に処理コードがあると言うことか。それで見てみると、kernel/timer.c に処理が入っているようだ。
case TIME_INS:
if (xtime.tv_sec % 86400 == 0) {
xtime.tv_sec--;
wall_to_monotonic.tv_sec++;
/*
* The timer interpolator will make time change
* gradually instead of an immediate jump by one second
*/
time_interpolator_update(-NSEC_PER_SEC);
time_state = TIME_OOP;
clock_was_set();
printk(KERN_NOTICE "Clock: inserting leap second "
"23:59:60 UTC
");
処理は 1sec のジャンプじゃなく clock を微妙に遅くすることで処理してるらしい。基本的にうるう秒は明確なロジックで挿入されるものではないので(そもそもが原子時計と地球公転速度のずれを補正するため)、kernel 内で TIME_INS に落ちる条件をもう少し追おうかと思ったけど根気が尽きたのでここまで。