Nehmen wir an, ich habe einen Multi-Core-ARM Cortex-A.
Jetzt habe ich dort ein Linux, mit RT_PREEMPT- Patch (sog. Echtzeit-Linux ). Ich führe einen Prozess mit Affinität auf einen Kern und hoher Priorität (über 50) aus.
Dank Echtzeit-Patch kann sogar der Kernel-Scheduler meinen Prozess nicht unterbrechen, und dank Affinität kann er die ganze Zeit auf einem einzelnen Kern (und Betriebssystem auf anderen) laufen.
Gibt es unter solchen Bedingungen einen Unterschied (dh Overhead) zwischen der Ausführung eines solchen Codes unter Linux und Bare-Metal?
Wird die Leistung gleich sein? Wenn nicht, warum?
Overhead bezieht sich nicht auf Vorkaufsrecht. Preemption stoppt Ihren Prozess und führt einen anderen Prozess aus. Wenn Sie das zB für einen CPU-Kern deaktivieren, haben Sie nur noch den CPU-Kern für Ihren Prozess.
Dennoch gibt es einen Overhead, wenn Sie E/A über die Linux-E/A-Funktionen ausführen, anstatt z. B. die E/A-Leitungen direkt über Ihren Prozess zu steuern. Aber für jede einigermaßen komplizierte I/O mussten Sie selbst eine Funktion mit ähnlichem Aufwand implementieren, und Sie können davon ausgehen, dass die Linux-Leute darin besser sind als Sie – mehr Erfahrung und mehr Testfälle.
Die einzige Möglichkeit, das Overhead-Rennen zu gewinnen, besteht also darin, mit sehr einfachen I/O-Funktionen (z. B. Bitbangen eines exotischen, schnellen Protokolls) selbst in "Ihrem Kernel" zu implementieren, anstatt es durch die verschiedenen Abstraktionsschichten des Linux-GPIO-Subsystems laufen zu lassen und machen Sie dasselbe in "Ihrem Userspace-Prozess".
Rev
Markus Müller