Sto sperimentando con SCHED_FIFO
e vedo alcuni comportamenti imprevisti. Il server che sto usando ha 12 core con hyper-threading disabilitato. Tutti gli interrupt configurabili sono stati impostati per essere eseguiti sulla CPU 0.Uso pratico delle priorità di pianificazione in tempo reale di Linux (SCHED_FIFO e SCHED_RR)?
Il mio programma inizia a creare un thread per attività a priorità inferiore utilizzando la libreria pthreads senza modificare il criterio di pianificazione con affinità CPU impostato su core 0. Il thread padre imposta quindi la CPU affinità con il core 3 e il proprio criterio di pianificazione su SCHED_FIFO
utilizzando sched_setscheduler()
con pid zero e priorità 1 e quindi si avvia un ciclo non bloccante.
Il programma funziona correttamente. Tuttavia, se provo ad accedere al server per una seconda volta mentre il programma è in esecuzione, il terminale non risponde finché non interrompo il mio programma. È come se lo scheduler stia cercando di eseguire altri processi sullo stesso core del processo in tempo reale.
- Cosa mi manca?
- Lo scheduler tenta ancora di eseguire altri processi su un core che esegue un processo in tempo reale? Se è così, c'è un modo per impedirlo?
- L'impostazione del criterio di pianificazione con
sched_setscheduler()
nel padre modifica il comportamento del figlio creato in precedenza?
Grazie in anticipo.
Grazie per il rispondere. Hai ragione, la documentazione dice che sched_setscheduler() imposta la politica di pianificazione per il processo e non il thread. Tuttavia, ho eseguito alcuni test utilizzando ps dopo aver letto questa risposta e le politiche sono impostate correttamente per i thread. Questo mi ha spinto a eseguire ulteriori test. Uno dei problemi più evidenti è che l'accesso richiede molto tempo quando il programma è in esecuzione. Sembra decisamente che la sessione di bash per il nuovo login sia inizialmente impostata sulla CPU che esegue il processo in tempo reale. – digby280