質問: 今年の元旦、8時59分60秒が挿入されたことで、多くのエンジニアの年末年始が仕事に追われる日々だったのではないかと思われます。そこで閏秒を挿入することで同期がおかしくなるということなのでしょうが(そもそもこの認識が間違っているのならご指摘下さい)この”おかしくなる”の詳細がわからず調べていたのですが、詳しく踏み込んだ説明はあまり見当たりません。CPU使用率が100%になりサーバーがダウンするということがあるというのも見つけたのですが、先の認識とCPU使用率の増加がいまいち繋がりません。どなたかご教授いただけないでしょうか。
回答: > > 先の認識とCPU使用率の増加がいまいち繋がりません。 > > > おそらく linux kernel でのトラブルの話をされているのかと思います。 それを前提にものすごくざっくり説明します。 この時の bug では、うるう秒挿入時に CLOCK_REALTIME を1秒巻き戻したのに、 clock_was_set() を呼び忘れたことです。 この状況では、高精度カーネルタイマ(hrtimer) の処理時に1秒ずれが生じた状態になります。 このため、hrtimer でタイマーを設定すると1秒早くタイマーが終了してしまう状況になります。 ここで問題なのは1秒未満のタイマーを設定した場合で、1秒未満のタイマーを設定した際に 即座にタイマーが終了してしまいます。 タイマーが切れたため、プログラムはタイマー切れの処理を行います。 タイマー切れの場合に必要な処理を行い、再度タイマーを設定するプログラムであった場合、 この一連の処理はループします。 これらのプログラムが複数呼び出された場合は、システム全体の負荷が高くなります。 1秒ずれた状態は clock_was_set() を呼びだすまで解消されないため、 うるう秒処理後から1秒未満のタイマーを設定する様なプログラムで 高負荷の状況を生み出す事になります。 この問題の解消は clock_was_set() を呼びだして1秒のずれを解消する事です。 date コマンドで解消する記事が多くあると思いますが、それは内部で clock_was_set() を 呼びだしているからです。 ソース: