Weiß jemand, wie die heterogene Multi-Processing (HMP) -Planung im Linux-Kernel-Scheduler implementiert ist?
Dies wurde in dem mit der ODROID-XU3-Karte gelieferten Kernel implementiert. ( Ссылка )
Ich weiß grob, dass es die Last eines bestimmten Prozesses berechnet und basierend auf dieser Last auf eine schnellere oder langsamere CPU umschaltet. Ich bin auf der Suche nach einer ausführlicheren Erklärung und wenn möglich nach der Code-Position der Funktionen, die diese Funktionalität implementieren.
Überprüfen Sie den Quellcode unter #ifdef CONFIG_SCHED_HMP
hauptsächlich innerhalb von kernel/sched/core.c
big.LITTLE CPUs können in 2 Betriebsmodi konfiguriert werden:
GTS ist die heterogene Form der Operation, d. h. HMP .
Auf der abstrahiertesten Ebene wird HMP derzeit unterstützt, indem einfach DVFS und SMP load balancing erweitert werden. Beide sind sich des Leistungsvorteils großer Kerne (über die LITTLE-Kerne) bewusst und planen entsprechend CPU-intensive Aufgaben mit hoher Priorität entsprechend.
Die dynamische Spannungs- und Frequenzskalierung (DVFS) wird zur Anpassung an augenblickliche Änderungen der erforderlichen Leistung verwendet. Die Migrationsmodi von big.LITTLE erweitern dieses Konzept, indem sie einen Übergang zu "großen" CPU-Kernen über dem höchsten DVFS-Arbeitspunkt der LITTLE-Kerne ermöglichen. Die Migration dauert ungefähr 30 Mikrosekunden. Im Gegensatz dazu wertet der DVFS-Treiber die Leistung des Betriebssystems und der einzelnen Kerne typischerweise alle 50 Millisekunden aus, obwohl einige Implementierungen etwas häufiger getestet werden. Es dauert ungefähr 100 Mikrosekunden, um Spannung und Frequenz zu ändern. Da die zum Migrieren einer CPU oder eines Clusters benötigte Zeit kürzer ist als die DVFS-Änderungszeit und um eine Größenordnung kürzer ist als die OS-Evaluierungsperiode für DVFS-Änderungen, ermöglichen große LITTLE-Übergänge den Prozessoren, häufiger bei niedrigeren Arbeitspunkten zu laufen und für den Benutzer vollständig unsichtbar sein.
Im Global Task Scheduling-Modell sind die DVFS-Mechanismen immer noch in Betrieb, aber der Betriebssystem-Kernel-Scheduler kennt die großen und LITTLE-Kerne im System und versucht, Hochleistungs-Threads auf Hochleistungs-Kerne zu lasten Performance- oder speichergebundene Threads zu den hocheffizienten Kernen. Dies ähnelt heutigen SMP-Lastenausgleichern, die Threads automatisch über die im System verfügbaren Kerne ausgleichen und ungenutzte Kerne ungenutzt lassen. In big.LITTLE Global Task Scheduling ist derselbe Mechanismus in Betrieb, aber das OS verfolgt den Ladeverlauf jedes Threads und verwendet diesen Verlauf plus Echtzeit-Performance-Sampling, um Threads zwischen großen und LITTLE-Kernen angemessen auszugleichen.
>
Referenz: Community. arm.com: Zehn Dinge, die man über big.LITTLE wissen sollte
Tags und Links linux-kernel scheduling smp odroid hmp