FMC Projekte: Performancetest


Dieses Projekt beinhaltet einen Test der Schnittstellenperformance, bei welchem auf dem FMC-Konnektor-FPGA ein 16-Bit-Zähler implementiert wird. Dieser generiert für einen Test der Downloadgeschwindigkeit einen aufsteigenden Zähler und prüft demgegenüber für einen Test der Uploadgeschwindigkeit einen eintreffenden Datenstrom auf einen solchen Zähler. Das Datenrouting läuft gesteuert ab, d.h es gibt keine internen Pufferüberläufe durch unterschiedliche Verarbeitungsgeschwindigkeiten von Generator und Empfänger. Somit gehen bei der Übertragung keine Zählerwerte verloren.

Die Geschwindigkeit für den Generator/Empfänger kann in 16 Stufen eingestellt werden, wobei als Grundlage für die höchste Performance die maximal mögliche Übertragungsgeschwindigkeit für USB3.0 Schnittstellen dient. Folgende Stufen sind auf Basis eines 8-Bit-Wortes parametrierbar:

400 MByte/s (Index 0), 200 MByte/s (Index 1), 100 MByte/s (Index 2), 50 MByte/s (Index 3), 20 MByte/s (Index 4), 10 MByte/s (Index 5), 5 MByte/s (Index 6), 1 MByte/s (Index 7), 800 kByte/s (Index 8), 500 kByte/s (Index 9), 250 kByte/s (Index 10), 100 kByte/s (Index 11), 50 kByte/s (Index 12), 10 kByte/s (Index 13), 5 kByte/s (Index 14), 1 kByte/s (Index 15)

Die Firmware dieses Projektes ist werksmäßig vorinstalliert.


Komponente 1: das FMC Modul

Für den Performancetest der IO Schnittstellen wird keine separate FMC Platine benötigt. Der komplette Ablauf inkl. der Generierung der Daten läuft ausschließlich auf dem FMC-Konnektor-FPGA.


Komponente 2: die Firmwaredatei (bit-Datei)

Die folgenden beiden Dateien bilden das Gesamtsystem des Performancetests:

Dieses Teilsystem implementiert den Testgenerator zum Senden und Empfangen eines 16-Bit-Zählers mit unterschiedlichen Testgeschwindigkeiten.
Dieses Teilsystem routet lediglich die vom Testgenerator bzw. IO Interface empfangen Daten zum Empfänger. Eine Verarbeitung der Daten findet nicht statt.

Die Dateien können unter Nutzung der Funktionen der Basisbibliothek für das jeweiligen FPGA programmiert werden. Alternativ zu einer eigenen Programmiersoftware steht im allgemeinen Downloadbereich eine grafische Applikation zur Deltaboardkonfiguration zur Verfügung.


Komponente 3: die Softwarebibliothek (DLL) mit den spezifischen Zugriffsfunktionen

Für den Performancetest steht folgende Bibliothek zur Steuerung der Testgeneratorparameter zur Verfügung:

  • Windows C# Klassenbibliothek brPerfDLL
    Zur Kommunikation mit dem Board ist zusätzlich die Basisbibliothek brBaseDLL sowie bei Verwendung der Cypress USB 3.0 Schnittstelle ebenso die herstellereigene Bibliothek CyUSB.dll notwendig. Diese müssen im selben Ordner wie die Bibliothek brPerfDLL liegen.
  • Linux Bibliothek ... folgt ...

Die folgende Tabelle zeigt eine Aufstellung der Funktionen der Bibliothek brPerfDLL:

Beschreibung Funktion Parameter
Geschwindigkeit des Testgenerators setzen public static Boolean ctrl_setTestGenSpeed(String io_interface, byte speedindex, Boolean info) io_interface = Interface zur Datenübertragung (usb, IP-Adresse, COMx)
speedindex = Index der Geschwindigkeitsoption (0-15)
info = Statusinformationen ausgeben / nicht ausgeben
Ergebnisse des Uploadtests auslesen public static Boolean ctrl_readUploadValues(String io_interface, out Boolean CounterFound, out UInt32 bytes, out UInt32 errors, Boolean info) io_interface = Interface zur Datenübertragung (usb, IP-Adresse, COMx)
CounterFound = Detektion eines 16-Bit-Zähler (Ausgabeparameter)
bytes = Anzahl der empfangenen Bytes (Ausgabeparameter)
errors = Anzahl der Fehler im erwarteten 16-Bit-Zähler (Ausgabeparameter)
info = Statusinformationen ausgeben / nicht ausgeben
Ergebniswerte des Uploadtests zurücksetzen public static Boolean ctrl_resetUploadValues(String io_interface, Boolean info) io_interface = Interface zur Datenübertragung (usb, IP-Adresse, COMx)
info = Statusinformationen ausgeben / nicht ausgeben


Beispielapplikation

Als Demonstration der Verwendung der Bibliotheksfunktionen steht folgende Beispielapplikation inkl. Visual Studio C# Projekt zur Verfügung.

Beispielapplikation zum Test der Schnittstellenperformance


Hinweise:

  • Die tatsächlich erreichbaren Geschwindigkeiten sind zum einen abhängig von der Wahl der Schnittstelle und zum anderen von den Peripherieelementen des PC, auf welchem die Testapplikation läuft. Das heißt, dass zwar über die USB3.0 Schnittstelle die maximale Generatorperformance abgerufen werden kann, eine Übertragung über Ethernet allerdings deutlich langsamer ist und somit die möglicherweise eingestellte Datenrate nicht erreicht wird. Ebenso spielt eine Rolle, auf welche Weise der Download getestet wird. Wird über eine definierte Zeit der empfangene Datenstrom in eine Datei geschrieben, die im Anschluss ausgewertet wird, ist die Art des Speichermedium und die Lokalisation der Applikation bei der Ausführung für eine maximale Performance entscheidend. Für optimale Ergebnisse sind hierfür SSD-Speicher notwendig.
  • Bei der Auswertung der Zähler zur Bestimmung der Performancewerte und Übertragungsfehler müssen Fehler durch Randbedingungen ignoriert werden. D.h. detektierte Zählersprünge zu Beginn der Aufzeichnung können durch mögiche Restinhalte der internen Puffer auftreten. Ebenso wird ggf. ein Fehler am Ende eines Uploadtests der Ethernetschnittstelle detektiert, wenn das letzte Paket der 8-Bit-orientierte Ethernetübertragung nur noch einen halben 16-Bit-Zählerwert enthält. Unabhängig von der Testdauer sollte bei einer korrekten Übertragung eine Fehlerrate von 2-3 Fehlern nicht überschritten werden.