Portál AbcLinuxu, 6. května 2025 11:34
pokud půjde uloha do sleepTim je mysleno co konkretne?
Zde si jen nejsem jist, jak je to s prioritou, pokud půjde uloha do sleep, funguje i ve sleep ulohy přerušení od Winirng Pi?Ano.
Předevšěím,ale nevím jak co nejpřesněji změřit oněch 100s?Pokud to stačí s přesností na řádově milisekundy, tak to dělám tak, že zjistím aktuální čas pomocí clock_gettime, a pak si naplánuju usnutí pomocí
poll
na správný počet milisekund. Pokud potřebuješ větší přesnost, tak bych zkusil naplánovat pomocí poll probuzení o trochu dříve a následně točit gettime ve smyčce. Pro ještě vyšší přesnost tohle spusť jako separátní proces, nastav mu vlastní CPU a vyřaď z toho CPU jiné procesy (isolcpus). Někde na Rootu k tomu psali že
Myslím, že i non-RT kernel má /proc/irq/$IRQ/smp_affinity, kam lze zapsat CPU mask. Kernel s RT-Preempt navíc vytváří pro každý interrupt handler vlastní kernel thread, kterému lze nastavit RT scheduling class a RT prioritu přes chrt, a případně na něj použít taskset (to ale možná není ani potřeba, když už je nastaveno smp_affinity). Linux má v tomhle ale pořád ještě rezervy, jeden z největších problémů je, že na všech CPU (i těch vyjmenovaných v isolcpus) se spouští nějaké servisní operace s periodou CONFIG_HZ. Nějakou dobu je k dispozici NO_HZ_FULL option, ale to si podle našich zkušeností moc nerozumí s RT-Preempt, a stejně to funguje jen když je na daném CPU jen jeden thread - viz https://lwn.net/Articles/549580/. Kromě toho pomáhá ještě kernel option rcu_nocbs=<cpulist>. Na ARM Cortex-A9 se nám ještě osvědčila konfigurace L2 cache CPU locking, tedy pevné vyhrazení části L2 cache pro CPU s realtime tasky. Jak moc je tohle zdokumentované u RPi jsem zatím nezkoumal. Ta izolace ale pořád není úplně dokonalá, zejména při vytváření nových procesů na non-realtime CPU dochází k drobnému "zakopnutí", jehož příčina mi zatím není úplně jasná, možná něco s TLB.
Ideální by bylo pokud by šlo přímo využít některý z hw čítačů v procesoru, který by opět při přetečení vyvolat přerušení.Možná by kernelový čas mohl mít paradoxně lepší přesnost než čítač ze kterého je odvozený, protože NTP říká, jestli jde špatně, a počítají se korekce.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.