Leistungsproblem bei Multicore-Multiprozessen in der Linux-ARM-Umgebung

Leistungsproblem bei Multicore-Multiprozessen in der Linux-ARM-Umgebung

Ich entwickle eine Linux-Anwendung auf einer 4-Core-ARM-CPU. Die Anwendung besteht aus zwei Prozessen und ich habe jeden Prozess wie unten beschrieben der CPU zugewiesen.

  • core1: Prozess1 (GUI)
  • core2-4 : precess2 (Echtzeitanwendung)

Ohne Prozess1 kann Prozess2 seinen Prozess problemlos handhaben und es besteht kein Grund zur Sorge. Das Problem besteht jedoch darin, dass, wenn ich Prozess1 ausführe, dies die Leistung von Prozess2 stark beeinträchtigt und Prozess2 überhaupt nicht richtig funktioniert.

Was könnte der Grund dafür sein?

Zusätzliche Information:

  • cpu2-4 ist mit isolcpus=1-3 isoliert

  • Ich habe die Threads des gesamten Systems verfolgt und festgestellt, dass nur wenn process1 vorhanden ist, process2 viele Tasks namens rcu_preempt auf core1 weckt. Diese beiden Prozesse teilen sich jedoch keinen Speicher.

  • Ich habe Prozess1 durch einige andere Prozesse ersetzt und festgestellt, dass ein Prozess, der schnell viele Daten in einen zugewiesenen Speicher schreibt, Prozess2 beeinflusst. Ein Prozess, der nur einfache CPU-Arbeit ausführt (wie eine While-Schleife), hat keine Auswirkungen.

Antwort1

Sie haben alle CPUs übernommen und den Linux-Kernel gezwungen, laufende Prozesse zu unterdrücken, um seine eigenen Threads ausführen zu können. Der Kernel unterscheidet dann nicht zwischen den CPUs und kann CPU1 genauso gut unterdrücken wie jede andere CPU. Je mehr Aktivität auf dem Computer stattfindet, desto mehr muss der Kernel unterdrücken, wobei er wiederum nicht zwischen den CPUs unterscheidet.

Darüber hinaus ist die CPU nicht alles, und die Architektur eines Computers kann weitere implizite Engpässe aufweisen. Einige davon sind Speicherbänke, bei denen der gleichzeitige Zugriff auf eine Bank von der Anzahl der Kanäle zu dieser Bank abhängt. Dann gibt es noch den Speicherbus des Computers, den Festplattencache, die Festplatte selbst usw.

Weitere Hinweise zum Ausführen eines Echtzeitprozesses finden Sie im Artikel Wie führt man eine Echtzeitanwendung unter Linux aus? Was besser oder schlechter funktioniert, hängt jedoch von Ihrer tatsächlichen Hardware ab.

verwandte Informationen