Performance: Serieller Port->Cutter->RegVar->Skript

Hallo zusammen,
ich habe an den seriellem Port ttyUSB0 meines IPS-Servers (Banana Pro) spaßeshalber ein Ladegerät angeschlossen, dass den aktuellen Ladezustand an IPS sendet. Die Übertragung findet mit 115200 Baud statt. In IPS habe ich entsprechend

  • einen seriellen Port definiert
  • einen Cutter, der auf <CR><LF> triggert
  • eine Register Variable
  • ein Script, dass von der Register-Variablen aufgerufen wird,

konfiguriert.

Bei dieser Anordnung geht die prozentuale CPU-Auslastung durch IPS von rund 15% auf 70-83% hoch. Ich hatte erst den Verdacht, dass durch die hohe Baudrate und/oder den Cutter die CPU gefordert wird, aber wenn ich in der Konfiguration der Register-Variablen das Script rausnehme, geht die CPU-Last wieder auf die 15% runter. Ich habe es dann mit einem Dummy-Script probiert ("<? // Kommentar ?>"), und die Last steigt wieder genauso an. Scheinbar bewirkt also der pure Aufruf eines Skriptes diese Laststeigerung.

Ist das normal? Besteht an dieser Stelle evt. noch Optimierungspotential?

(ich verwende die aktuelle Beta-Version).

Gruß
Peter

Schau mal in den Debug wie viele Daten kommen. Wenn du natürlich 100 Pakete/Sekunde bekommst, dann kann das den Pi schon sehr belasten.

paresy

Ich habe mal vom Skript einen Counter hochzählen lassen. Es sind rund 28 Skriptaufrufe/sec - ok, das ist nicht wenig. Dummerweise kann ich am sendenden Ladegerät nicht die Baudrate runterdrehen.
Gruß
Peter

Also Dirty-Workaround vielleicht den Port im IPS zyklisch Aktiv/Inaktiv setzen ?
Nach Empfang eines gültigen Paketes abschalten, dann nach beliebigen Intervall wieder anschalten.

gruß
bb

Oder den TextParser nutzen, anstatt eines Scriptes ?
Der hat bestimmt etwas mehr ‚Dampf‘ als PHP.
Ist auch die Frage ob du vielleicht im Cutter noch etwas mehr einschränken kannst welche Datensätze überhaupt durchkommen?

Michael

Danke Euch für die Tipps. Ich bin jetzt einen anderen Weg gegangen und habe ein kleines Python-Script geschrieben, das die Daten von der seriellen Schnittstelle empfängt und dann 10 Zeilen per TCP-Socket an IPS weiterleitet, Dann wartet das Script 60 sec, und liest anschließend 10 weitere Zeilen ein usw.
Damit ist die CPU-Last dann wieder unten.

Gruß
Peter