Ich habe über Linux Kernel und CFS Scheduler im Kernel gelesen. Ich bin auf vruntime (virtuelle Laufzeit) gestoßen, das ist das Kernkonzept hinter CFS Scheduler. Ich lese von "Linux Kernel Entwicklung" und auch von anderen Blogs im Internet, konnte aber nicht die grundlegenden Berechnungen hinter dem vruntime verstehen. Ist vruntime zu einem bestimmten Prozess gehören oder gehört es zu einer Gruppe von Prozess mit dem gleichen nette Werte. Was ist der Gewichtungsfaktor und wie wird er berechnet? Ich habe all diese Konzepte durchgegangen, konnte es aber nicht verstehen. Was ist der Unterschied zwischen vruntime und * min_vruntime *?Was ist das Konzept von Vruntime in CFS
Antwort
vruntime ist per-thread; Es ist ein Mitglied, das in task_struct verschachtelt ist.
Im Wesentlichen ist vruntime ein Maß für die "Laufzeit" des Threads - die Zeit, die es auf dem Prozessor verbracht hat. Der Kern von CFS ist es, allen gerecht zu sein. Daher läuft die Algo-Art auf eine einfache Sache hinaus: (unter den Aufgaben einer gegebenen Runqueue) ist die Aufgabe mit der niedrigsten Vruntime die Aufgabe, die am meisten verdient, zu laufen, daher wähle sie als "nächste" aus. (Die tatsächliche Implementierung erfolgt mit einem RBTree für Effizienz).
Unter Berücksichtigung verschiedener Faktoren - wie Priorität, netter Wert, Cgroups usw. - ist die Berechnung von vruntime nicht so einfach wie ein einfaches Inkrement. Ich würde vorschlagen, den relevanten Abschnitt in "Professional Linux Kernel Architecture", Mauerer, Wrox Press zu lesen - es wird sehr ausführlich erklärt.
Pl siehe unten einen kurzen Versuch, etwas davon zusammenzufassen.
Andere Ressource: Documentation/scheduler/sched-design-CFS.txt
Quick Zusammenfassung - vruntime Berechnung: (basierend auf dem Buch)
Die meiste Arbeit in kernel/sched_fair.c getan wird: __ update_curr ()
Angerufener Timer Tick
Updates die physische und virtuelle Zeit ‚aktuelle‘ hat auf dem Prozessor nur ausgegeben
Für Aufgaben, die auf Standard-Priorität ausgeführt werden, das heißt, schön Wert 0, verbrachte die physische und virtuelle Zeit ist
- identisch
Nicht also für Aufgaben auf anderen Prioritätsstufen (nett); somit wird die Berechnung der vruntime durch die Priorität des Stroms beeinflusst, der einen Lastgewichtungsfaktor verwendet
delta_exec = (unsigned lang) (jetzt - curr-> exec_start); // ... delta_exec_weighted = calc_delta_fair (delta_exec, curr); curr-> vruntime + = delta_exec_gewichtet;
einige Runden und Überlaufprüfung Vernachlässigt, was calc_delta_fair tut, ist zu den Wert durch die folgende Formel berechnen:
delta_exec_weighed = delta_exec * (NICE_0_LOAD/curr->load.weight)
Die Sache ist, wichtigere Aufgaben (diejenigen mit einem niedrigen nice-Wert) wird größere Gewichte haben; Mit den obigen Gleichungen wird also die für sie berechnete Vruntime kleiner sein (so dass sie auf der RBTe mehr in die Warteschlange eingereiht werden!).
Die Vruntime ist die virtuelle Laufzeit eines Prozesses, mit dem Sie verfolgen können, wie viel Zeit ein Prozess ausgeführt hat. Die vruntime ist ein Mitglied der in include/linux/sched.h definierten Sched_entity-Struktur.
Die min_vruntime repräsentiert die minimale vruntime einer cfs runqueue. Sie stellt das Minimum aller vruntime der Prozesse dar, die in dieser cfs-Runqueue eingeplant sind. Die min_vruntime ist ein Member der cfs_rq-Struktur, definiert in include/linux/sched.h
Der Zweck von min_vruntime ist die Auswahl des nächsten Prozesses in der cfs runqueue zur Ausführung. Um allen Prozessen gerecht zu werden, wählt der CFS-Scheduler den Prozess mit der minimalen vruntime aus, die zuerst ausgeführt werden soll.
Der Link include/linux/sched.h ist http://lxr.free-electrons.com/source/include/linux/sched.h
- 1. Was ist das Konzept von Array.map?
- 2. Was ist das Swimlane-Konzept in YouTrack?
- 3. Was ist das Konzept hinter JavaScript-Parametern?
- 4. Was ist das Konzept hinter R.java?
- 5. Was ist das Konzept von Ambassador in verteilten Systemen?
- 6. Was ist das Konzept einer Assembly in .NET?
- 7. Was ist das Konzept von Head in Subversion und was ist der Unterschied zu einem Trunk
- 8. Was ist das Konzept der Speicherung Session-ID in Cookie?
- 9. Was ist das Konzept der "schwachen Konformität" in Scala?
- 10. Was ist das Konzept in Jenkins als Bambus Testströme
- 11. Was ist das Konzept dahinter: Typ - Element - Spiegel
- 12. Was definiert das traditionelle "Page" Konzept in MVC?
- 13. Wo ist Linux CFS Scheduler Code?
- 14. Was ist das anders als HR Manager Benutzer und Personalverantwortliche Benutzer in Personal-Konzept in Odoo
- 15. Was ist das Konzept (Datenübertragung) hinter dem Live-Chat von Facebook?
- 16. Was ist ein geeigneter Weg zur Implementierung von is_swappable, um das Swappable-Konzept zu testen?
- 17. Was ist das Konzept und die Unterschiede zwischen Framebuffer und Renderbuffer in OpenGL?
- 18. Was ist ein gutes Programm in C, das Stärken/Schwächen verschiedener Linux-Scheduler (Noop, CFS, Deadline) zeigen kann?
- 19. Was ist das Konzept hinter CAP # 1 in generischer JACA (Wildcard)?
- 20. Das Konzept einer Absicht in Android?
- 21. Haskell Mustervergleich - was ist das?
- 22. Auftragsfelder innerhalb CFS() Schleife Wordpress
- 23. Ist das Konzept eines "interleaved homomorphism" eine echte Sache?
- 24. Oktett String: Was ist das?
- 25. Fehlt Meteor das Konzept wohldefinierter Datenentitätsmodelle?
- 26. Was ist das Gegenteil von "ist"?
- 27. Wie gelangt man aus dem Konzept, in dem das Konzept gefunden wurde, mithilfe der Konzeptsuche?
- 28. Metadaten in Bildsammlung einfügen CFS METEOR
- 29. Erste Git-Konzept von "Bühne"
- 30. Das Konzept hinter dem Produkt von itertool Funktion
Was ist der Zweck der min_vruntime? – iammurtaza
@iammurtaza: Die min vruntime (ich nehme den einstellbaren/proc/sys/kernel/sched_min_granularity_ns) ist normalerweise (auf dem letzten Ubuntu mindestens) ~ 2.25ms. Wenn dies nicht der Fall wäre, könnten zwei Tasks alle paar Mikrosekunden an und von dem Prozessor "pingen". Eine Mindestgarantie für den Verbleib in der CPU ist erforderlich, um dieses Thrash-Verhalten zu mildern. – kaiwan