Thread Performanceprobleme / Tuning von Socketoperationen (10 answers)
Opened by Echelon1010000 at 2005-07-11 16:18

Echelon1010000
 2005-07-11 18:47
#56269 #56269
User since
2005-06-29
18 Artikel
BenutzerIn
[default_avatar]
Hi
Nein, das Lesen / Schreiben kann ich so direkt nicht entkoppeln. Abgesehen davon das ich mich mit Threads nicht wirklich auskenne Liest mein Programm die Daten nicht ein. (Ausser die Antworten vom Server) sondern holt sie selber aus den Systemdaten, die Daten werden also im Programm, bei jedem Schleifendurchlauf erzeugt.

Im wesentlichen funktioniert es so: (Pseudocode)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LOOP:
# hole daten
...
viel code der z.B. die Drehzahlen von Lüftern ausliest
...
# Daten aufs Display bringen
print $socket "Temperatur";
my $answer=werteantwortaus();
if ( $answer eq "error" ) { die "error" }

print $socket "Drehzal CPU Lüfter";
my $answer=werteantwortaus();
if ( $answer eq "error" ) { die "error" }

print $socket "Systemlast";
my $answer=werteantwortaus();
if ( $answer eq "error" ) { die "error" }

sleep (10);
goto LOOP;


Das ganze besteht aus 11 Modulen die jeweils eine Sorte Daten einlesen und so (ähnlich*) wie oben auf das Display bringen. Die Module sind unter anderem für das Auslesen von Temperatur, CPU Last, Drehzahlen, Datenrate Netzwerk, Lastdiagramm und Speichernutzung zuständig und werden vom Hauptprogramm aus geforked.

IMO würde entkoppeln auch wenig bringen. Es ist egal wie schnell ich die Daten lese (geht ruckzuck, keine Verzögerungen), ich muss die Daten schneller schreiben. Ich würde ja sonst nur einen Zwischenspeicher vollschreiben der dann irgendwann überläuft. Im Wesentlichen geht es mir um das Lastdiagramm.
Dieses besteht aus 20 vertikalen Balken die die CPU Last (loadavg1) anzeigen. Alle 10 Sekunden wird das Diagramm aktualisiert, jeder Balken steht also für 10 Sekunden.

Wenn das Diagramm nun aktualisiert wird kann ich zugucken wie der neue Balken am Ende eigefügt wird und die andern alle eine Position nach rechts wandern. Diese 20 Operationen (jeweils Befehl schreiben und Antwort abholen) dauert fast 10 Sekunden.

Das ist mir zu lang und ich suche halt nach einer Möglichkeit diesen Vorgang zu beschleunigen. Ich stell auch gern den Code zu verfügung, allerdings wäre das zu viel für das Forum, das muesste ich dann via Mail machen oder so. Sind fast 70KBytes .pl Dateien. Einzelne Ausschnitte sofern gewünscht stelle ich gern ein. (Welche?)

Gruss, Echelon

*Tatsächlich befinden sich die Befehle um auf das Display zu schreiben in einer eigenen sub so das ich von jedem Modul aus darauf zugreifen kann. Statt jedesmal "print $socket "Blah"; reicht dann der Aufrug "lcdprint". In dieser sub befindet sich dann auch jeweils die Fehlerauswertung.

View full thread Performanceprobleme / Tuning von Socketoperationen