Einführung in das symmetrische Multiprocessing (SMP) mit LabVIEW Real-Time
Übersicht
Dieses Dokument ist Teil der Serie zu den „Grundlagen der Multicore-Programmierung“
Serie zu den „Grundlagen der Multicore-Programmierung“
Symmetrisches Multiprocessing, kurz SMP, ist eine Eigenschaft von Betriebssystemen, welche Multicore-Prozessoren die Ausführung eines einzigen Vorgangs des Betriebssystems sowie die Anbindung an einen gängigen Hauptspeicher ermöglicht, während parallel dazu Programmcode ausgeführt wird. Die meisten modernen Desktop-Betriebssysteme (Windows, Linux, MacOS etc.) unterstützen SMP. In Echtzeitbetriebssystemen gehört die SMP-Unterstützung allerdings noch nicht zum Standard.
Dieses Whitepaper beschreibt, wie sich die SMP-Unterstützung im LabVIEW 8.5 Real-Time Module ausnutzen lässt, um höchst leistungsfähige Echtzeitanwendungen auf Multicore-Systemen zu implementieren.
Inhaltsverzeichnis
Einleitung
Das LabVIEW 8.5 Real-Time Module umfasst die NI RT Extensions for SMP zur Ergänzung des ETS-Echtzeitbetriebssystems um Multicore-Unterstützung. Nach Installation der NI RT Extensions for SMP können Anwender die Vorteile der leistungsstarken Multicore-Prozessortechnologie nutzen. Abbildung 1 stellt den Prozess des sogenannten Auto-Load-Balancing dar, der es dem Real-Time Module erlaubt, Anwendungs-Threads auf die verfügbaren Prozessorkerne eines ETS-Echtzeitzielsystems zu verteilen.

Abbildung 1: Unterstützung von SMP durch LabVIEW Real-Time
Zuweisung von Tasks an bestimmte Prozessoren mit der zeitgesteuerten Schleife
Um die Leistung und Zuverlässigkeit eines Echtzeitsystems noch weiter zu erhöhen, können zeitgesteuerte Schleifen (Timed Loops) ganz einfach bestimmten Prozessorkernen zugewiesen werden. So lässt sich ein Core für die Ausführung einer zeitkritischen Steuer- und Regelschleife reservieren und von weniger wichtigen Tasks, die auf anderen Cores ablaufen, isolieren. Dies wird in Abbildung 2 gezeigt.

Abbildung 2: Ein zeitkritischer Task wird einem bestimmten Prozessor zugewiesen.
Mit dem LabVIEW 8.5 Real-Time Module lässt sich eine zeitgesteuerte Schleife einem bestimmten Prozessorkern zuweisen. Jede zeitgesteuerte Schleife stellt einen einzigartigen Thread dar und mit dem Abschnitt Prozessorauswahl des Dialogfelds Zeitgesteuerte Schleife konfigurieren kann der Anwender festlegen, dass der Thread nur auf einem bestimmten Core abläuft (siehe Abb. 3).

Abbildung 3: Eine zeitgesteuerte Schleife wird einem bestimmten Prozessorkern zugewiesen.
Fehlerbehebung bei echtzeitfähigen Multicore-Anwendungen
Mit zunehmender Komplexität von Anwendungen muss man auch im Low-Level-Bereich verstehen, wie Programmcode auf dem Echtzeitsystem ausgeführt wird. Die Ergänzung eines Systems mit zusätzlichen Prozessorkernen trägt darüber hinaus noch zu dieser Komplexität bei. Das Real-Time Execution Trace Toolkit 2.0 liefert eine visuelle Darstellung sowohl von VI- als auch von Thread-Ausführung auf Single- und auf Multicore-Systemen. So lassen sich kritische Stellen im Code und unerwünschtes Verhalten wie etwa Ressourcenkonflikte, Speicherzuweisung und Prioritätsumkehr aufspüren.

Abbildung 4: Real-Time Execution Trace Toolkit 2.0 mit Unterstützung von Fehlerbehebung in Multicore-Systemen
Auf Real-Time-8.5-Zielsystemen kann die CPU-Auslastung von echtzeitfähigen Multicore-Systemen auch mit der CPU-Nutzungsanzeige auf dem Bildschirm überwacht werden. Dieses Programm zeigt alle Informationen direkt auf einem Display an, der mit dem Echtzeitzielgerät verbunden ist. Angezeigt werden etwa die Gesamtauslastung (Total Load), ISR-Auslastung (Interrupt Service Request) und die CPU-Auslastung durch zeitgesteuerte Strukturen (Timed Structures) sowie durch Threads (Other Threads).
![]()
Abbildung 5: CPU-Nutzungsanzeige auf dem Bildschirm
Gerüstet für Multicore
Wird Echtzeitsoftware auf Multicore-Prozessoren übertragen, kann die Skalierbarkeit erheblich variieren. Deshalb muss jede Ebene der Software Multicore-fähig sein. Der Prozess, der notwendig ist, um dies zu erreichen, kann sich äußerst zeit- und kostenaufwändig gestalten. Ein großer Vorteil des LabVIEW 8.5 Real-Time Module besteht darin, dass die gesamte Software bereits alle Vorraussetzungen für die Multicore-Bereitschaft erfüllt.
Zu den echtzeitfähigen Softwarekomponenten gehören Entwicklungswerkzeuge, Bibliotheken, Gerätetreiber und ein Echtzeitbetriebssystem. Viele Echtzeitanwendungen von Systemen älteren Datums beruhen auf einer Softwarearchitektur, die nur für die Ausführung auf einem Prozessor konzipiert war. In Tabelle 1 werden einige Überlegungen aufgezeigt, die bei der Evaluierung der Einsatzbereitschaft echtzeitfähiger Softwarekomponenten einer typischen Steuer- und Regelanwendung helfen sollen.
|
Echtzeitfähige Softwarekomponenten |
Bereit für den Multicore-Einsatz |
|
Entwicklungswerkzeug |
Auf dem Echtzeitbetriebssystem wird Unterstützung bereitgestellt. Das Werkzeug ermöglicht die Zuweisung und Optimierung von Threads. Funktionen für die Fehlerbehebung und Ablaufverfolgung werden bereitgestellt, um echtzeitfähige Multicore-Systeme zu analysieren. |
|
Bibliotheken |
Bibliotheken sind Thread-sicher und können ablaufinvariant gesetzt werden, so dass sie parallel ausgeführt werden können. Algorithmen sind so umgesetzt, dass sie keine Speicherzuweisung und keinen Jitter im System verursachen. |
|
Gerätetreiber |
Treiber wurden für eine optimale multithreading-fähige Leistung entwickelt. |
|
Echtzeitbetriebssystem |
Das Echtzeitbetriebssystem unterstützt Multithreading und Multitasking und kann mithilfe von SMP Tasks auf Multicore-Prozessoren verteilen. |
Tabelle 1: Für Multicore gerüstete Echtzeitsoftware
Eine häufige Schwachstelle bei Echtzeitsystemen sind Gerätetreiber, die nicht Thread-sicher sind oder Bibliotheken, die nicht ablaufinvariant ausgeführt werden können. Nicht ablaufinvarianter Code funktioniert zwar eventuell noch, kann aber auf einem Multicore-Prozessor nicht parallel ausgeführt und zu einer gemeinsam genutzten Ressource werden, was zu Leistungseinbußen führen kann. LabVIEW umgeht diese Schwachstellen mit Thread-sicheren und ablaufinvarianten I/O-Treibern wie DAQmx sowie mit mathematischen Bibliotheken, die für die ablaufinvariante Ausführung konzipiert sind.
Kundenlösung zu LabVIEW Real-Time SMP: Wineman Technologies
Wineman ist ein Partner von National Instruments, der Steuersysteme für Dynamometer sowie Hardware-in-the-Loop-Simulatoren entwickelt. Dabei kommen PID-Regelung, Erzeugung von Profilen, Alarme, Erstellung von Skripten, Analog- und Digital-I/Os, CAN, Modbus und TCP/IP-Kommunikation zum Einsatz. Die Produktfamilie von Wineman umfasst die Anwendungen EASE und INERTIA, die eine Architektur verwenden, welche auf LabVIEW Real-Time basiert.
Die Entwickler bei Wineman standen vor dem Problem, die hohe CPU-Auslastung zu optimieren. Eine Schleife mit hoher Priorität in einer ihrer gängigen Anwendungen beanspruchte den Großteil des Single-Core-Prozessors, um die Anforderungen an die Ausführung zu erfüllen. So blieb Schleifen mit niedrigerer Priorität nur wenig Zeit, Tasks wie etwa die Kommunikation mit der Benutzeroberfläche und Datenprotokollierung durchzuführen. Infolge dieser Ressourcenknappheit war die Anwendung schwer bedienbar und/oder instabil.
Dank der SMP-Unterstützung im LabVIEW 8.5 Real-Time Module konnte das bestehende System von Wineman um zusätzliche Regelschleifen ergänzt und die Leistung mit nur geringfügigen Änderungen am LabVIEW-Code um 40 % gesteigert werden.
Fazit
Die Multicore-kompatible Softwarearchitektur von LabVIEW 8.5 Real-Time ermöglicht es Unternehmen wie Wineman, mit der Migration auf Multicore-Systeme sofort Leistungssteigerungen zu erzielen, ohne den ursprünglichen LabVIEW-Code wesentlich zu ändern.
Weitere Ressourcen zur Multicore-Programmierung
Serie zu den „Grundlagen der Multicore-Programmierung“
- www.ni.com/multicore/d
- Fehlerbehebung in Multicore-Anwendungen mit dem Real-Time Execution Trace Toolkit
- Mehr über NI LabVIEW
AGB
Dieses Tutorium ("Tutorium") wurde von National Instruments ("NI") entwickelt. Auch wenn National Instruments dieses Tutorium technisch unterstützt, ist es jedoch möglich, dass dieses Tutorium nicht umfassend getestet und überprüft wurde. NI übernimmt weder Garantien bezüglich der Qualität des Tutoriums noch bezüglich der weiteren technischen Unterstützung neuer Versionen ähnlicher Produkte und Treiber. DIESES TUTORIUM WIRD IM "IST-ZUSTAND" ZUR VERFÜGUNG GESTELLT UND NI ÜBERNIMMT KEINERLEI GARANTIEN. AUSFÜHRLICHERE ERLÄUTERUNGEN ZU ANDEREN EINSCHRÄNKUNGEN ENTNEHMEN SIE BITTE DEN NUTZUNGSBEDINGUNGEN AUF NI.COM (http://ni.com/legal/termsofuse/unitedstates/us/).

