Schedulazione real-time e thread

Schedulazione real-time e thread

di Alberto Pretto -
Numero di risposte: 0

Carissimi,

correggo una mia imprecisione sull'esempio di schedulazione real-time presentato a lezione. Se ricordate, nel primo run, controllando nel task manager la priorità del processo in esecuzione (nome "sched_sample" in quel caso) NON veniva riportato un valore di priorità real-time.

In realtà era tutto corretto:

-Il processo è stato lanciato con priorità "normale", non real-time, creando 4 thread schedulati (loro sì!) real time, 2 con priorità 99, ovvero massima, e scheduler FIFO, 2 con priorità 98 e scheduler round robin. Il task manager grafico in realtà NON visualizza i thread creati da un processo, ma solo il loro processo padre. Nel caso specifico, il processo padre non era real-time, da qui il fatto che non venisse specificata per lui priorità massima.
Lanciando da terminale il comando top con l'opzione -H, ove da manuale di top:

-H : Threads-mode operation
Instructs top to display individual threads

tutto ritorna chiaro: vengono visualizzati 5 processi tutti dal nome sched_sample, 4 dei quali (i 4 thread lanciati) con alta priorità, ed uno "normale" (il processo padre, appunto).

Come ho fatto poi per cambiare la priorità del processo padre?
Beh, ho aggiunto le seguenti righe di codice prima di lanciare i thread:

struct sched_param schp;;
memset(&schp,0,sizeof(schp));
schp.sched_priority = 99;

sched_setscheduler(0, SCHED_FIFO, &schp);

(come vedete, la sintassi è leggermente diversa da quella utilizzata per i thread: le funzioni sono molto simili, ma per i pthread iniziano con l'ovvio suffisso pthread_<nome_funzione>).

Per vostra comodità vi ho messo in moodle anche il codice sorgente.

Ultima cosa (IMPORTANTE!!!)

Per abilitare la schedulazione real-time, aggiungere la seguente riga al file /etc/security/limits.conf:

<nome_utente> - rtprio 99

(per editare tale file, è necessario avere credenziali da amministratore, ad esempio avviare l'editor da terminale preceduto dal comando sudo, es. comando sudo gedit (verrà chiesta la password)

Se non lo fate, addio diritti di lanciare thread real time (ho aggiunto questa nota anche nelle slide)

AP