Domanda

Sto scrivendo un demone molto piccolo che deve rimanere reattivo anche quando un sistema è gravemente stressato. Sto osservando le differenze tra SCHED_FIFO e SCHED_RR per quanto riguarda la pianificazione, oltre a cercare di determinare una priorità ragionevole.

Quale scheduler sarebbe appropriato per un demone di monitoraggio piccolo ma critico, quale priorità sarebbe ragionevolmente sicura? Sto ancora arrivando un po 'confuso quando provo a capire le differenze tra i due.

Il mio programma si sta allocando in 3k (e usa mlockall ()), scrive circa 600 byte su xenbus e poi dorme, ma è impossibile per me dire quanto tempo (in ms) ci vorrà davvero per scrivere i dati. poiché ciò che è scritto dipende da un file di configurazione.

Grazie in anticipo per eventuali suggerimenti / spiegazioni.

È stato utile?

Soluzione

Il famigerato programma pchdtvr , che cattura segnali TV digitali, usa SCHED_FIFO per assicurarsi che i pacchetti TV siano scritti su disco, non importa quale. Può catturare 4 spettacoli contemporaneamente mentre gioca a Doom su un vecchio computer.

Il programma è famoso perché è stato rilasciato sotto licenza GPL e l'autore ha provato a revocare la GPL retroattivamente . Questo atto ha provocato una tempesta minore. Ad ogni modo, puoi trovare una versione recente per studiare a http://frequal.com/pmn/pchdtvr.html .

Altri suggerimenti

SCHED_FIFO non può essere anticipato (il contesto è passato a un altro processo) a meno che un altro processo con priorità più alta non venga visualizzato nella coda di esecuzione.

SCHED_RR può essere anticipato da un quantum temporale (ritardo dato a un processo da eseguire).

Sono entrambi " in tempo reale " priorità degli scheduler basati su Linux.

Non sono un esperto di schemi di pianificazione, ma dai un'occhiata a

man sched_setscheduler

descrive in dettaglio la differenza tra i diversi algoritmi di pianificazione e fornisce collegamenti ad altre funzioni di pianificazione. SCHED_FIFO sembra in realtà piuttosto pericoloso, ma è descritto come la pianificazione più aggressiva:

  

Un processo SCHED_FIFO viene eseguito fino a quando non viene bloccato da una richiesta I / O, viene impedito da un processo con priorità più elevata o chiama sched_yield (2).

Attenzione a non bloccare il sistema. Personalmente farei alcuni test empirici per vedere quale priorità si adatta meglio e come si comportano esattamente.

Se tutte le altre attività utilizzano lo scheduler standard, non fa alcuna differenza; SCHED_FIFO e SCHED_RR influiscono solo sulla pianificazione di questi compiti tra loro.

Quindi su un sistema normale non fa differenza. FIFO è più facile da capire, quindi usa questo credo.

Se hai diverse attività con priorità diverse, verrà eseguita solo la più alta se sono tutte pronte per essere eseguite (e c'è solo un core della CPU)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top