Betriebssystem-Kernel, die selbst nicht nebenläufig arbeiten können (wie etwa QNX® Neutrino® bis zur Version 7.1), können Multi-Core-Systeme erheblich einschränken.
Das Ergebnis ist ein Warteschlangenproblem wie es im Buche steht, mit stark eskalierenden Wartezeiten sobald die OS-Kernel-Nutzung ca. 50% überschreitet.
Das stellt unter anderem ein Problem für Prozesse und Threads die sich oft synchronisieren müssen dar.
Wir haben unserem Kunden eine schnellere Mutex-Implementierung als std::mutex
und pthread_mutex_t
aus der Standardbibliothek, die unser Kunde nutzte, geschrieben.
Diese war doppelt so schnell in dem Fall, in dem der Mutex frei ist. Wegen des Staffelungseffektes des genannten Warteschlangenproblems, sparte dies unserem Kunden ca. 20 bis 30% Laufzeit in einem kritischen Prozess.
Ein paar schnelle Fakten
Hardware:
- SoC: Qualcomm® Snapdragon®
- CPU: Arm® Cortex®-A78
Betriebssystem:
- Blackberry® QNX
Compiler:
- Blackberry QNX Compiler (GCC-basiert)
Zusammenfassung der von uns erzielten Ergebnisse:
- Mutexe um den Faktor 2 beschleunigt, was in weniger OS-Kernel-Wartezeit resultierte