Kerne für Echtzeitberechnungen freigeben (Raspberry Pi)

Hoeze

Lieutenant
Registriert
Juni 2010
Beiträge
696
Hi,
anstatt irgendwelche Realtime-Kernel zu verwenden, würde ich gerne drei der vier Raspberry Pi-Kerne an drei Prozesse mit 100% Priorität vergeben.
Alle restlichen Prozesse sollen alleine vom vierten Kern bearbeitet werden.

Ist das möglich?
 
Soetwas regelt das Betriebssystem, ich nehme an du benutzt Raspbian, oder?
 
Wenn du drei Prozesse hast, die alle auf der höchsten Priorität laufen, wird der Scheduler das schon richtig einreihen. Wenn es mehr um Latenz als um zugewiesene CPU-Zeit geht, wirst du meines Wissens um eine Modifikation am Kernel nicht herum kommen.
 
Ich glaube du verwechselt beim Thema "Echtzeit" grundsätzlich was. Erklär doch mal was du eigentlich vor hast. ;)
 
Ich dachte, ich könnte meinen Pi wie einen (ultra schnellen) Arduino benutzen.
Also bspw. Direkt Servos an die Gpio's hängen, etc.
Soviel ich weiß, würde man dafür normalerweise einen RT-Kernel benutzen. Aberbich dachte mir: Wenn man sowieso schon vier Kerne hat, wieso nicht direkt drei davon reservieren...
 
Du kannst die CPU Affinity eines einzelnen Prozesses über taskset setzen. Denkbar wäre es, über CPUSET einen Core auszuschließen und nur deinen GPIO-Prozess darauf manuell laufen zu lassen.

ABER.
Echtzeit-Fähig ist das nicht. Wenn konkurrierende Zugriffe auf den Speicher/die Platte geschehen, blockiert dein Prozess evtl. trotzdem. Ist also nicht wirklich gut, vielleicht aber gut genug?
 
Kanibal schrieb:
Du kannst die CPU Affinity eines einzelnen Prozesses über taskset setzen. Denkbar wäre es, über CPUSET einen Core auszuschließen und nur deinen GPIO-Prozess darauf manuell laufen zu lassen.

ABER.
Echtzeit-Fähig ist das nicht. Wenn konkurrierende Zugriffe auf den Speicher/die Platte geschehen, blockiert dein Prozess evtl. trotzdem. Ist also nicht wirklich gut, vielleicht aber gut genug?

Es geht mir primär darum, einen Multicopter ausreichend schnell reagieren zu lassen.
Dazu brauche ich einerseits einen extrem schnell reagierenden Prozess, der die grundsätzlichen "Reflexe" (Neigung ausgleichen, etc.) regelt, sowie einen weniger schnell, aber immer noch gut reagierenden Prozess, welcher die grundsätzliche Flugrichtung vorgibt. Das kann natürlich je nach Aufgabe sehr CPU-fordernd sein.
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
Ich denke, dafür ist der Raspberry auch in seiner Grundfunktion schnell genug, sofern Du nicht grad Updates im Flug installierst.
Ansonsten könntest Du noch einen kleinen Arduino(Pro Mini/Nano) dazwischen hängen, der die "Low-Level"-Funktionen (Stabilisierung) erledigt, und eine Trajektorie (Beschleunigungswerte + Quaternionen?) vom Raspberry über UART entgegennimmt.
 
Zuletzt bearbeitet:
Danke für die vielen Antworten. Ich werd mich einfach mal durchprobieren :)
 
Zurück
Oben