Je rozumné předpokládat, že hodiny CLOCK_MONOTONIC jsou dostupné na všech moderních linuxových serverech?
Ano. Je rozumné předpokládat, že.
Ze znění ručního zadání gettime můžeme odvodit, že opravdu staré verze glibc nepodporují CLOCK_MONOTONIC
. (Stále se snažím zjistit, jak je starý ... ale pravděpodobně když glibc prohlásil soulad s POSIX 1003.1.)
CLOCK_MONOTONIC
byl specifikován (alespoň) v IEEE Std 1003.1, 2004 Edition, i když je stále možné, že implementace vyhovující libc nebude podporovat CLOCK_MONOTONIC
.
Zdrojový kód linuxového jádra má podporu pro CLOCK_MONOTONIC
hodiny minimálně od Linuxu 3.0 (2011).
Z jiných zdrojů to také závisí na tom, jak byl vytvořen glibc vašeho systému. (Při sestavování s „emulovanými časovači“, CLOCK_MONOTONIC
není podporováno.)
Zde je několik případů, kdy to není podporováno:
-
S některými starými CPU čipy mohou být problémy; např. https://bugzilla.redhat.com/show_bug.cgi?id=1499480
-
Není podporován pro některé (všechny?) verze Cygwin.
-
Není podporován pro některé (všechny?) verze uCLibc na ARM.
Je také možné pro CLOCK_MONOTONIC
být podporován, ale chybný:
- Linux clock_gettime(CLOCK_MONOTONIC) podivné nemonotónní chování
Je rozumné předpokládat, že hodiny CLOCK_MONOTONIC jsou dostupné na všech moderních linuxových serverech?
K této otázce se mohu pouze vyjádřit. Ano, je rozumné, že všechny produkční systémy, které používáte, budou mít monotónní hodiny, ke kterým Linux ví, jak přistupovat. To platí také pro virtuální a kontejnerové servery.
Dobré inženýrství velí, abyste toto provedli kontrolu a v případě porušení předpokladu vyloučili chybu, ale s tím bych počítal při návrhu.