GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi CLOCK_REALTIME a CLOCK_MONOTONIC?

CLOCK_REALTIME je ovlivněna NTP a může se pohybovat vpřed a vzad. CLOCK_MONOTONIC není a postupuje jedním tikem na tik.


Kniha Roberta Lovea LINUX System Programming 2nd Edition , konkrétně se zabývá vaší otázkou na začátku kapitoly 11, str. 363:

Důležitým aspektem monotónního zdroje času NENÍ aktuální hodnota, ale záruka, že zdroj času se striktně lineárně zvyšuje, a je tedy užitečný pro výpočet rozdílu v čase mezi dvěma odběry

To znamená, že se domnívám, že předpokládá, že procesy běží na stejné instanci operačního systému, takže možná budete chtít mít spuštěnou pravidelnou kalibraci, abyste mohli odhadnout drift.


CLOCK_REALTIME představuje nejlepší odhad stroje, pokud jde o aktuální nástěnné hodiny, denní čas. Jak říkají Ignacio a MarkR, znamená to, že CLOCK_REALTIME může přeskakovat vpřed a vzad podle toho, jak se mění systémová denní doba, včetně NTP.

CLOCK_MONOTONIC představuje absolutní uplynulý čas nástěnných hodin od nějakého libovolného pevného bodu v minulosti. Není ovlivněn změnami systémových denních hodin.

Pokud chcete vypočítat čas, který uplynul mezi dvěma událostmi pozorovanými na jednom počítači, aniž byste museli restartovat, CLOCK_MONOTONIC je nejlepší možnost.

Všimněte si, že v systému Linux CLOCK_MONOTONIC neměří čas strávený v režimu spánku, ačkoli podle definice POSIX by měl. Můžete použít pro Linux specifický CLOCK_BOOTTIME pro monotónní hodiny, které běží během pozastavení.


Uvozovky POSIX 7

POSIX 7 specifikuje obojí na http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html:

CLOCK_REALTIME :

Tyto hodiny představují hodiny měřící reálný čas systému. Pro tyto hodiny představují hodnoty vrácené funkcí clock_gettime() a určené funkcí clock_settime() množství času (v sekundách a nanosekundách) od Epochy.

CLOCK_MONOTONIC (volitelná funkce):

Hodnota vrácená funkcí clock_gettime() pro tyto hodiny představuje množství času (v sekundách a nanosekundách) od nespecifikovaného bodu v minulosti (například čas spuštění systému nebo Epocha). Tento bod se po době spuštění systému nezmění. Hodnotu hodin CLOCK_MONOTONIC nelze nastavit pomocí clock_settime().

clock_settime() dává důležitou nápovědu:systémy POSIX jsou schopny libovolně měnit CLOCK_REALITME s ním, takže se nespoléhejte na to, že proudí ani nepřetržitě, ani dopředu. NTP lze implementovat pomocí clock_settime() a může ovlivnit pouze CLOCK_REALTIME .

Zdá se, že implementace linuxového jádra bere zaváděcí čas jako epochu pro CLOCK_MONOTONIC :Výchozí bod pro CLOCK_MONOTONIC


Linux
  1. Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

  2. Rozdíl mezi 2>&-, 2>/dev/null, |&, &>/dev/null A>/dev/null 2>&1?

  3. Rozdíl mezi Eot a Eof?

  1. Rozdíl mezi [0-9], [[:digit:]] a D?

  2. Rozdíl mezi velikostí bloku a velikostí clusteru?

  3. Rozdíl mezi potrubím a rozšířením příkazů?

  1. Rozdíl mezi $HOME a '~' (tilda)?

  2. Rozdíl mezi ${} a $() v Bash

  3. rozdíl mezi cgroups a jmennými prostory