Welche Auswirkungen haben Scheduler-Prioritäten und -Richtlinien für Threads in einem nicht angeforderten cpuset, wenn überhaupt?

12

Ich habe ein Linux-System, in dem wir cgroups verwendet haben, um zwei cpu_exclusive cpusets, A und B, zu erstellen, und in dem wir alle Benutzer-Threads und alle ungebundenen Kernel-Threads in eine an cpuset A angehängte cgroup migriert haben. Dinge, die in cpuset A ausgeführt werden, haben unterschiedliche Scheduler-Richtlinien und unterschiedliche Prioritäten, und in cpuset A laufen viel mehr Threads als in cpuset A Kerne.

Es gibt auch eine kleine Anzahl sehr aktiver Prozesse, die mit cpuset B verbunden sind, wobei die Gesamtzahl der Benutzer-Threads über diese Prozesse hinweg niemals größer ist als die Anzahl der Kerne, die ausschließlich in cpuset B verfügbar sind. Ziel ist es, diese wichtigen Aufgaben, die in cpuset ausgeführt werden, abzuschirmen B von anderen Aktivitäten auf der Maschine und zur Minimierung der Verarbeitungslatenz.

Hat die Planungsrichtlinie / -priorität der in cpuset B ausgeführten Benutzer-Threads in einem solchen Setup einen beobachtbaren Effekt? Anders ausgedrückt: Würde das Ändern der Planungsrichtlinie der B cpuset-Threads von Standard-SCHED_OTHER zu SCHED_FIFO oder SCHED_RR irgendwelche Konsequenzen haben, ob gut oder schlecht?

Es scheint, als sollte die Antwort "Nein" sein, da der Scheduler in der Lage sein sollte, jedem Thread, der in cpuset B ausgeführt wird, einen eigenen dedizierten Kern zuzuweisen, sodass nichts zu priorisieren oder zu planen wäre, und somit die Richtlinie und die relative Priorität von B. cpuset-Threads würden keine Rolle spielen. Auf der anderen Seite gibt es die gebundenen Kernel-Threads und die Aspekte der Scheduler-Domäne, über die man sich Sorgen machen muss, und wahrscheinlich andere Dinge, die ich nicht berücksichtigt habe.

Sind die Planungsrichtlinien und Prioritäten von Threads, die in einem überprovisionierten exklusiven cpuset ausgeführt werden, in irgendeiner praktischen Hinsicht von Bedeutung?

acm
quelle

Antworten:

4

Die verwendete Zeitscheibe ist für CPU-intensive Jobs von Bedeutung, für die eine Cache-Persistenz erforderlich ist, es sei denn, Sie sperren für jede PID einen bestimmten Kern. Sie können die Zeitscheibe mit der Scheduler-Richtlinie SCHED_BATCH erhöhen und in einigen Fällen die Leistung um bis zu 300% verbessern, während Sie gleichzeitig die interaktive Reaktionsfähigkeit verringern. Der gegenteilige Effekt kleinerer Zeitscheiben tritt bei SCHED_RR auf (wodurch der Durchsatz verringert, aber die Echtzeitreaktivität erhöht wird).

Mit schedtool können Sie die Richtlinie für bestimmte PIDs für alle PIDs in Satz B als einen einzigen Befehl festlegen. Es kann auch verwendet werden, um bestimmte PIDs an bestimmte Kerne zu sperren. Dies wäre die optimale Lösung, da die Cache-Persistenz nicht mehr von der Zeitscheibe abhängt. Dies erfordert jedoch mehr Aufwand, da Sie für jede PID einen separaten Schedtool-Befehl ausführen müssen.

Thomas Anantharaman
quelle
1

Wenn jeder Prozess seinen eigenen Kern hat, gibt es keine Prioritätsbeschränkungen.

Wenn Sie jedoch einen Prozess planen, dessen Ausführung alle 15 Minuten 30 Minuten dauert, müssen Sie Prioritäten setzen, da sich der Prozess überlappt.

Es gibt jedoch keine "beste" Planungsrichtlinie.

Sie hängen wirklich davon ab, was Sie erreichen wollen. Aber am Anfang würde ich es SCHED_OTHER überlassen, der Standardeinstellung, und einige Zeit beobachten, bevor ich mehr spezialisierte Sachen versuche.

Nicolas de Fontenay
quelle