2014-02-24 14 views
5

Ich frage mich, was der Unterschied zwischen PREEMPT_NONE und PREEMPT_VOLUNTARY sind. Entsprechend der Dokumentation,Linux Kernel Preemption Levels

This option reduces the latency of the kernel by adding more 
"explicit preemption points" to the kernel code 

Aber es erwähnt nicht, was diese Punkte sind. Ich habe versucht, es zu googeln, aber ich habe keine Details gefunden, die über den obigen Text hinausgehen (was überraschend erscheint, da ich denken würde, dass dies eine häufige Frage wäre). Mein Hauptanliegen sind Prozesse, die andere Prozesse verhungern, also frage ich mich, ob die Vorbelegung bei Timer-Interrupts mit FREIWILLIG auftritt. Natürlich, je mehr Informationen, desto besser, also frage ich mich, was die anderen Punkte sein könnten.

+0

Siehe auch http://stackoverflow.com/questions/5174955/what-is-voluntary-preemption –

+0

Und siehe http://stackoverflow.com/questions/20769768/why-disable-interrupts-disables-kernel-preemption -und-wie-spin-lock-disables-p? rq = 1 –

+0

Danke - Ich stieß auf den ersten Artikel, aber es hat immer noch ein vages Zitat: "während Kern Dinge tun". Es erwähnt das IO als Beispiel, erwähnt aber leider nicht andere Dinge. – blackghost

Antwort

4

Ich glaube, this link to a mailing list hat die Antwort.

Was ist, dass might_sleep() und might_resched() freiwillige Vorkaufsrechte werden. Durch Aktivieren von PREEMPT_VOLUNTARY wird die Funktion cond_resched() aufgerufen.

Und nein, bei Interrupts tritt keine freiwillige Vorbelegung auf. Das wäre eine vollständige Vorbelegung, die jeden Interrupt prüft und wenn der Kernel nicht markiert ist, die Vorbelegung zu blockieren, wechselt er zu der Task mit der höchsten Priorität.

+0

Danke, genau das habe ich gesucht. – blackghost