GNU/Linux >> Znalost Linux >  >> Linux

Jaká je přesnost intervalových časovačů v Linuxu?

Máte pravdu, že neočekáváte, že se časovače spustí dříve – a také ne. zdánlivý předčasné spuštění je způsobeno tím, že neměříte čas od vypršení předchozího časovače – měříte čas od předchozího gettimeofday() volání. Pokud mezi vypršením časovače a skutečným naplánováním procesu došlo ke zpoždění, zobrazí se toto gettimeofday() běží pozdě, a další běží dříve o stejnou částku .

Namísto protokolování rozdílu mezi následujícími gettimeofday() volání, zkuste zaznamenat vrácené absolutní časy a poté vrácené časy porovnejte s N * 100 ms po počátečním čase.

Pokud chcete PREEMPT_RT abychom vám pomohli, budete muset pro svůj testovací program nastavit zásady plánovače v reálném čase (SCHED_FIFO nebo SCHED_RR ), který vyžaduje root.


Udělal jsem nějaké změny ve vašem kódu a hlavně nahradil timer a spusťte proces jako postup RT (SCHED_FIFO).

setitimer()      ->    timer_create()/timer_settime()
gettimeofday()   ->    clock_gettime()

můj testbed je i9-9900k CPU a PREEMPT-RT patched Linux s jádrem 5.0.21. Časový interval časovače je 1 ms a program běží přibližně 10 hodin, aby se vygeneroval následující výsledek.

Také spouštím Cyclictest (na základě nanosleep() ) na mém počítači a vykazuje lepší kontrolu latence (maximální latence menší než 15us). Takže podle mého názoru, pokud si chcete sami realizovat časovač s vysokým rozlišením, může být užitečné samostatné RT vlákno běžící nanosleep na izolovaném jádře. Jsem v RT systému nový, komentáře vítám.


Linux
  1. Co dělá Linux udržitelným OS

  2. Linux vs. Unix:Jaký je rozdíl?

  3. Jaký je ekvivalent getch() &getche() v Linuxu?

  1. Čím je linuxová komunita výjimečná?

  2. Jaké je výchozí pořadí řazení Linuxu?

  3. Jaký je význam curl -k -i -X ​​v Linuxu?

  1. Jaké je nejlepší VPS:Windows nebo Linux?

  2. Jaký je účel skupiny „wheel“ v Linuxu

  3. Jaký je účel souboru .bashrc v Linuxu