Přestupná sekunda?

Michal Dobes dobes na tes.eu
Úterý Prosinec 23 15:31:04 CET 2008


	Zdravím,

	tak nějak jsem nucen přemýšlet nad tím, jak vlastně probíhá
v linuxu proces přestupné sekundy, jak nám bude na konci tohoto roku
nadělena (přesněji až 1. ledna v 00:59:60 SEČ v ČR) po několika letech 
[viz 1].
	Řeším to pro historický Slackware 10 a kernel 2.4.27 a jak jsem
koukal do kernel/timer.c, tak to vypadá asi tak, že když je použit
ntpd (což je), tak kernelu oznámí, že bude přestupná sekunda a ten
udělá to, že o půlnoci (dle UTC) nechá tu 59. sekundu proběhnout ještě
jednou a hodí hlášku do logu. Čili je tam skok v čase zpět, což
některým věcem může kapánek vadit. Pravděpodobně to může mít dopad
na aplikace používající linuxthread knihovnu, která v tomto starším
nemá podporu pro CLOCK_MONOTONIC a tím pádem veškeré časovaní odvozuje
od CLOCK_REALTIME, který bude tím skokem asi zasažen, čili pokud vlákno
používá pro buzení nějakou formu časovače třeba po 200 ms, tak bude
v době přestupné sekundy vzbuzeno o sekundu později místo těch 200 ms?
	Sice ve zdrojácích kernelu je moudrá poznámka, že když je
v činnosti ntp nebo něco podobného, tak je jeho starostí, aby v dané
době čas plynul  monotonně, ale nějak nemám představu, jak to zařídí.
	Je pravda, že pokud se posílá během přestupné sekundy dotazy na
ntpd démon jaký má čas, tak po dobu přestupné sekundy mu čas má stát
a hlásit pořád stejný [viz 2].

Jdu si hrát s adjtimex(), zda to půjde nasimulovat a uvidím...

	M.

PS: A to optimisticky přehlížím tu hromadu reportů z poslední přestupné
sekundy, kdy kernel do logu hodil "Clock: inserting leap second 23:59:60
UTC" a za tím už jen následovalo kernel panic.... :-)

[1] http://hpiers.obspm.fr/eoppc/bul/bulc/bulletinc.dat
[2] http://www.meinberg.de/english/info/leap-second.htm#ntp-server




Další informace o konferenci Linux