Stellen Sie sich vor, Sie setzen eine neue 10GigE Industriekamera ein, welche durch die hohe Framerate die Steigerung der Taktrate Ihrer Applikation ermöglicht. Sie installieren die neue Kamera und verbinden sie mit dem Computer. Die Applikation wird bei maximaler Framerate gestartet. Doch als Sie zusätzlich einen Algorithmus zum Verarbeiten der Bilder ausführen, stellen Sie fest, dass die CPU des Host-Systems überlastet ist. Dieser Engpass bei der Verarbeitung der Daten kann zu Verlusten bei der Datenübertragung führen. Heutige Computerarchitekturen beinhalten in der Regel mehrere CPU-Kerne in einem einzigen Chip oder sogar mehrere physische CPUs auf einem Motherboard. Aus diesem Grund verwenden Applikationen oft mehrere Threads oder Prozesse, um die verursachte CPU-Last gleichmäßig auf alle verfügbaren Prozessoren zu verteilen und so eine optimale Leistung zu erzielen. Dabei sollte aber auch eine grafische Benutzeroberfläche reaktionsfähig bleiben, während bestimmte Aufgaben im Hintergrund ausgeführt werden.
Bei GigE Vision-Kameras, die mit Bandbreiten von 5GBit/s oder mehr streamen, führt dies manchmal zu einem Engpass. Insbesondere die Aufrechterhaltung eines stabilen Datenempfangs ohne Verlust einzelner Bilder oder Teile von Bildern, während parallel dazu große Datenmengen verarbeitet werden, funktioniert nicht immer so zuverlässig, wie man erwarten würde. Das kommt daher, dass eine Netzwerkverbindung bedingt durch das Betriebssystem immer von einem bestimmten CPU-Kern bearbeitet wird. Dieses Vorgehen funktioniert gut, wenn von einem Gerät mehrere parallele Verbindungen ähnlich geringe Mengen an Daten pro Zeitfenster übertragen. Bei GigE Vision-Geräten enthält allerdings eine einzige Netzwerkverbindung alle oder zumindest einen signifikanten Teil der Daten, die von einer Netzwerkkarte (NIC) im System empfangen werden. Das führt dazu, dass ein einziger CPU-Kern mehr belastet wird als andere. Bei einer 1GBit/s-Verbindung können die optimierten NIC- und GigE Vision-Filtertreiber in Kombination mit einer leistungsfähigen CPU die eingehenden Daten gut bewältigen. Allerdings stellen 5GBit/s oder höhere Bandbreiten, die von einem Gerät über eine einzelne Verbindung kommen, selbst für aktuelle CPU-Architekturen eine deutlich größere Herausforderung dar. Bild 1 zeigt, dass die CPU-Last, die durch ein 10GigE-Gerät generiert wird, relativ hoch ist.
Drohender Datenverlust
Wenn nun ein rechenintensiver Algorithmus wie beispielsweise De-Bayering, Fourier Transformation oder große Matrix-Multiplikationen zusätzlich auf dem System ausgeführt werden soll, dann weist das Betriebssystem von diesem Algorithmus jedem CPU-Kern gleich große Arbeitspakete zu. Auch dem, der bereits die eingehenden Netzwerkdaten verarbeitet. Das kann zu einer Überlastung des CPU-Kerns und damit zu Datenverlusten führen. Des Weiteren werden die anderen Kerne nicht optimal ausgenutzt, da die maximale Größe der zusätzlich möglichen Arbeitspakete durch die bereits hohe Arbeitslast des einen Kerns limitiert sind. Selbst wenn der Kern nicht überlastet ist, können Probleme aufgrund der Tatsache entstehen, dass der Prozessor hin und wieder für einen kurzen Zeitabschnitt Aufgaben ausführen muss, die nicht mit der Verarbeitung der Netzwerkdaten zusammenhängen. Wenn dadurch der interne Puffer überläuft, kommt es zu einem Datenverlust. Um dieser Problematik entgegenzuwirken, hat Matrix Vision eine Software-Lösung entwickelt, die dem Anwender mehr Kontrolle über die Arbeitsverteilung auf die CPU-Kerne gibt.