Com'è bello lavorare?


20

sched_setscheduler dice:

Tutta la pianificazione è preventiva: se un processo con una priorità statica più elevata diventa pronto per l'esecuzione, il processo attualmente in esecuzione verrà preemptato e riportato nella lista di attesa per il suo livello di priorità statica.

mentre dice setpriority

Questo fa sì che valori piacevoli molto bassi (+19) forniscano veramente poca CPU a un processo ogni volta che vi è un altro carico con priorità più alta sul sistema e fa sì che valori positivi elevati (-20) forniscano la maggior parte della CPU alle applicazioni che lo richiedono

Quindi, in che modo la modifica del valore valido influenzerà l'esecuzione dei programmi? È simile alla programmazione RT (in cui un programma con un valore più alto interromperà il programma con un valore più basso)?


Tutte le informazioni su Internet indicano come utilizzare nicee come modificare la priorità di un processo. Nessun collegamento spiega come funziona esattamente il processo con priorità diversa. Non sono nemmeno riuscito a trovare il codice sorgente.

Risposte:


24

La proporzione del tempo di elaborazione che un particolare processo riceve è determinata dalla relativa differenza di precisione tra esso e altri processi eseguibili.

Il Linux Completely Fair Scheduler (CFS) calcola un peso in base alla gentilezza. Il peso è approssimativamente equivalente a 1024 / (1.25 ^ nice_value). Man mano che il piacevole valore diminuisce, il peso aumenta in modo esponenziale. La fascia oraria allocata per il processo è proporzionale al peso del processo diviso per il peso totale di tutti i processi eseguibili. L'attuazione del CFS è in corso kernel/sched/fair.c.

Il CFS ha una latenza target per la durata della pianificazione. Le latenze target più piccole producono una migliore interattività, ma quando la latenza target diminuisce, il sovraccarico di commutazione aumenta, riducendo così la produttività complessiva.

Data ad esempio una latenza target di 20 millisecondi e due processi eseguibili di uguale precisione, entrambi i processi verranno eseguiti per 10 millisecondi ciascuno prima di essere anticipati a favore dell'altro processo. Se ci sono 10 processi di uguale gentilezza, ciascuno funziona per 2 millisecondi ciascuno.

Consideriamo ora due processi, uno con una precisione di 0 (impostazione predefinita), l'altro con una precisione di 5. La differenza proporzionale tra i pesi corrispondenti è di circa 1/3, il che significa che il processo con priorità più alta riceve un intervallo di circa 15 millisecondi mentre il processo con priorità più bassa riceve un intervallo di 5 millisecondi.

Infine, considera due processi con i valori di gentilezza rispettivamente di 5 e 10. Mentre la bontà assoluta è maggiore in questo caso, le differenze relative tra i valori di bontà sono le stesse dell'esempio precedente, producendo una divisione di timeslice identica.


Proprio quello che stavo cercando. Grazie! Più tardi ho trovato questo articolo che spiega tutto nei dettagli, ma non quello che hai appena scritto.
BЈовић,

C'è qualcosa che non capisco .. qual è il ruolo di vruntime?
Surfista in autunno

@Surferonthefall vruntime è il meccanismo interno CFS che tiene traccia di molti processi temporali della CPU assegnati. Questa domanda riguarda il bel valore visibile allo spazio utente. Se hai una domanda sugli interni di CFS e non riesci a trovare una risposta altrove , fai una nuova domanda
Thomas Nyman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.