Portál AbcLinuxu, 19. července 2025 07:31
/dev/comedi0
. Když sampluju plnou rychlostí, tak data tečou 2MB za sekundu a občas se stane, že je nestihnu dost rychle číst, přeteče buffer a dostanu Broken pipe. Buffer karty má velikost 4096 bytů a přerušení se vyvolává, když je z poloviny plný. Program tedy musí zareagovat za méně než milisekundu a ne vždy se to podaří. Procesor stíhá bez problémů - je zatížen na 25% a to převážně čeká (IOWAIT). Zkoušel jsem mmap() i read() a chová se to víceméně stejně. Zjistil jsem naprostou záhadu, že když na začátku programu počkám desetinu sekundy, problémů je podstatně méně. Naopak pomalý terminál (třeba gnome-terminál) dokáže čtení překazit skoro vždycky, a to ani nemusím nic vypisovat na stdout.int set_fifo_sched(void){ int r; struct sched_param* my_sched_param = NULL; my_sched_param = (struct sched_param*) malloc (sizeof(*my_sched_param)); printf("%d\n", sizeof(*my_sched_param)); my_sched_param->sched_priority = 99; r = sched_setscheduler(getpid(), SCHED_FIFO, my_sched_param); free(my_sched_param); if (r == -1){ perror("sched_setscheduler() failed"); return -1; } return 0; }Co dělá jádro s tím sched_priority?
sched_priority je statická priorita. V třídě SCHED_FIFO vždycky dostane přednost proces s vyšší statickou prioritou. To je rozdíl oproti běžné třídě SCHED_OTHER, kde se k CPU aspoň občas dostane i ten nejvíce reniceovaný proces.
Nepotřebuješ být root. Stačí když pro tvého uživatele nebo skupinu nastavíš v /etc/security/limits.conf potřebnou hodnotu rtprio.
# CONFIG_PREEMPT_NONE is not set CONFIG_PREEMPT_VOLUNTARY=y # CONFIG_PREEMPT is not set CONFIG_PREEMPT_BKL=yAsi si s tím zkusím pohrát.
@audio - rtprio 70 @audio - nice -10Stačí tedy přiřadit program do skupiny audio a spustí se s prioritou rtprio70? V /etc/pam.d nemusím nic nastavovat? Jak prosím zjistím, že program běží s rtprio 70?
Do skupin se nepřiřazují programy, nýbrž uživatelé.
Pokud ten program neumí o RT prioritu požádat sám, zkus ho spustit přes utilitu chrt
takto:
chrt -f 70 <program>
Výpis procesů a jejich RT priorit ti dá třeba ps -eo pid,cmd,rtprio
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.