Frage

Ich schreibe ein ein sehr kleiner Dämon, der als Reaktion auch bleiben muss, wenn ein System unter starkem Stress ist. Ich bin auf die Unterschiede zwischen SCHED_FIFO und SCHED_RR in Bezug auf die Zeitplanung suchen, sowie versuchen, eine vernünftige Priorität zu bestimmen.

Welche Scheduler für ein kleines angemessen wäre, aber kritisches Monitoring-Daemon, welche Priorität wäre einigermaßen sicher sein? Ich komme noch ein wenig verschwommen, wenn versucht, die Unterschiede zwischen den beiden zu verstehen.

Mein Programm ist die Zuteilung unter 3k (und verwendet mlockall ()), es geht um 600 Bytes schreibt dann xenbus schläft, aber es ist unmöglich für mich, wie viel Zeit zu erklären (in ms), um die Daten tatsächlich zu schreiben brauchen. ., da auf einer Konfigurationsdatei, was geschrieben wird, hängt davon ab.

Vielen Dank im Voraus für alle Anregungen / Erklärungen.

War es hilfreich?

Lösung

Das berüchtigte pchdtvr Programm, die digitalen TV-Signale erfaßt, verwendet SCHED_FIFO, um sicherzustellen, dass die TV-Pakete auf der Festplatte geschrieben werden, egal was passiert. Es kann auf einmal 4 zeigt erfassen, während Doom auf einem alten Computer zu spielen.

Das Programm ist berüchtigt, weil es unter der GPL und der Autor veröffentlicht wurde versucht, zu widerrufen die GPL rückwirkend. Dieser Akt löste eine kleinere Feuersturm. Wie auch immer, können Sie eine aktuelle Version finden studieren unter http://frequal.com/pmn/pchdtvr.html .

Andere Tipps

SCHED_FIFO nicht vorbelegt werden (im Kontext zu einem anderen Prozeß umgeschaltet), wenn nicht ein anderer Prozess mit höherer Priorität in der Ausführungswarteschlange erscheint.

SCHED_RR kann (ein Verfahren zur Ausführung gegebenen Verzögerung) durch eine Zeitquanten vorbelegt werden.

Sie sind beide "real-time" Prioritäten von Linux-basierten Disponenten.

Ich bin kein Experte für die Planung von Schemata, haben aber einen Blick auf

man sched_setscheduler

es Details, was der Unterschied zwischen den verschiedenen Planungsalgorithmen ist, und bietet Links zu anderen Scheduling-Funktionen. SCHED_FIFO klingt eigentlich ziemlich gefährlich, aber als der aggressivste Scheduling beschrieben:

  

A SCHED_FIFO Prozess ausgeführt wird, bis sie entweder durch eine I / O-Anforderung blockiert wird, es von einem höheren Prioritätsprozess preempted, oder es ruft sched_yield (2).

Beachten Sie Ihr System nicht zu sperren. Ich persönlich würde einige empirische Tests durchführen, um zu sehen, welche Priorität am besten passt und wie sie sich verhalten genau.

Wenn alle anderen Aufgaben, die die Standard-Scheduler verwenden, macht es keinen Unterschied; SCHED_FIFO und SCHED_RR wirken sich nur auf die Planung dieser Aufgaben miteinander.

So auf einem normalen System macht es keinen Unterschied. FIFO ist am einfachsten zu verstehen, so verwendet, dass ich denke.

Wenn Sie mehrere Aufgaben unterschiedlicher Prioritäten haben, nur die höheren ausgeführt werden, wenn sie sind alle bereit zu laufen (und es gibt nur einen CPU-Kern)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top