Lösung des Problems
Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO
mit aktiviertem Hyperthreading ("HT") zu verwenden, was zu mehreren Thread-Prozessoren pro physischem Kern führt. Mein Verständnis ist, dass HT-Bewusstsein innerhalb des Linux-Kernels hauptsächlich durch die Lastausgleichs- und Scheduler-Domänen innerhalb von CFS (dem Standard-Scheduler heutzutage) erfolgt. Weitere Informationen finden Sie unter https://stackoverflow.com/a/29587579/2530418.
Die Verwendung von SCHED_FIFO
oder SCHED_RR
würde dann die HT-Behandlung im Wesentlichen umgehen, da die RT-Planung nicht wirklich durch CFS geht.
Mein Ansatz, damit umzugehen, bestand in der Vergangenheit darin, Hyperthreading zu deaktivieren. Für Fälle, in denen Sie tatsächlich Echtzeitverhalten benötigen, ist dies normalerweise der richtige Kompromiss zwischen Latenz und Leistung (siehe https://rt.wiki.kernel.org/index.php/HOWTO:_Build_an_RT-application#Hyper_threading ). Ob dies angemessen ist, hängt wirklich davon ab, welches Problem Sie lösen möchten.
Abgesehen davon: Ich vermute, wenn Sie tatsächlich Verhalten brauchen SCHED_FIFO
, dann sollten Sie HT deaktivieren, aber es ist auch üblich, dass Leute denken, dass sie es brauchen, SCHED_FIFO
wenn es das falsche Werkzeug für den Job ist. Mein Verdacht ist, dass es möglicherweise eine bessere Option als die Verwendung gibt, SCHED_FIFO
da Sie die Ausführung auf einem herkömmlichen Server und nicht auf einem eingebetteten System beschreiben, aber das ist eine zu verallgemeinernde Vermutung. Ohne genauere Angaben zum Thema schwer zu sagen.