Larazus App -> X-Server läuft voll

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Larazus App -> X-Server läuft voll

Beitrag von Kernel »

Hallo,

ich habe eine Lazarus App unter Linux (gtk2) erstellt, wleche zyklisch 50x Sekunde Daten aufnimmt und in z.T. selbst erstellten grafischen Komponenten darstellt.
Ich habe zu Begin eine Auslastung durch den Prozesss und X-Servers von ca 12% (quelle: top).
Nach einiger Zeit beginnt die Auslastung des X-Servers bis auf 100% anzusteigen, welches dann die unbedienbarkeit der Software zu Folge hat.
Meine Komponenten allozieren nach dem erstellen keinen Speicher mehr, und ändern nicht Ihre Arbeitsweise.

Ich kann mir diesen Effekt nicht erklären. Es scheint so, als ob der X-Server einen Abarbeitungsstau hat, allerdings kann ich mir nicht
klären woher/wodurch, da die Sowftware ja eine ganze Zeit ohne steigende X-Serverauslastung läuft.

Hat jemand einen ähnlichen Effekt beobachtet, oder einen Vorschlag wie dem Grund auf die Spur zu kommen ist?

Ubuntu 9.10, Lazarus + FPC neuste Version CVS

Gruß
Kernel

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Larazus App -> X-Server läuft voll

Beitrag von Teekeks »

Wozu musst du 50x die Sekunde Aktualisieren?
Damit hat IMHO jedes OS mit der Zeit seine Probleme...
(Das Fenstersystem ist nicht dazu gedacht so oft Aktualisiert zu werden wenn ich das richtig sehe).
Vl. könntest du soweit Optimieren das du wirklich nur das Virtuell erneuerst was sich auch real Geändert hat. Damit könntest du vl. diesen Effekt schon beheben.

Was Stellst du den so dar?

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Larazus App -> X-Server läuft voll

Beitrag von theo »

Kannst du den Code zeigen? So kann man nicht viel sagen.
Allerdings sehe ich das auch so wie Teekeks. Wenn's nicht ein Video oder Game ist, ist 50x updaten pro Sekunde viel zuviel.

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

Hallo,

>Wozu musst du 50x die Sekunde Aktualisieren?

Ich habe mich unklar ausgedrückt, ich aktuallisiere nicht 50x / Sekunde, aber ich verarbeite die via Thread eingelesenen Werte z.T. so oft.
Ich habe z.B. ein eigenes Oszi das die Werte bekommt und auf dem internen Bitmap Zeichenoperationen ausführt.

> Vl. könntest du soweit Optimieren das du wirklich nur das Virtuell erneuerst

Das mache ich natürlich schon. Ich habe diverse Repaintflags, die dafür Sorgen, das nur das neu gezeichnet wird, was auch nötig ist.
Das merkwürdige ist ja, das die Software eine ganze Zeit stabil läuft (mit allen Zeichenoperationen) und dann auf einmal den X-Server steigend, bis aus 100% auslastet.
Also an der Menge der Zeichenoperationen kann es nicht liegen.
Unter Windows / Delphi ist dieses Vorgehen überhaupt kein Problem.
Ich tippe daher eher auf den X-Server oder die Implementation von GTK+ unter FPC. Aber im Moment tappe ich im Dunkeln.

Wie ist das denn mit den Nachrichten die Über SendMessage versendet werden? Werden dieses auch über den X-Server verarbeitet, resp. geleitet?

Gruß
Kernel

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

@theo

Mit dem Code ist es etwas schierig, das es ein sehr umfangreiches Projekt mit vielen Zugriffspunkten auf den Canvas ist.
Allerdings sind alle eigenen Komponenten von einer Basiklasse abgeleitet, welche beim Paint prüft, was gezeichnet werden muss.
Dieses wird auf ein internes TBitmap gemalt, und dann das ClipRect via CopyRect auf den Canvas geworfen.
Wenn ich an dieser Stelle irgentwo ein Problem hätte, müsste die Software von beginn an Stocken und den X-Server auslasten, oder?

Gruß
Kernel

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Larazus App -> X-Server läuft voll

Beitrag von theo »

Aber wie veranlasst du das Updaten? Über Invalidate oder InvalidateRect oder Repaint oder....?

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

Invalidate

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Larazus App -> X-Server läuft voll

Beitrag von theo »

Kernel hat geschrieben:Invalidate

Das müsste eig. klappen. InvalidateRect wäre noch sparsamer, falls möglich.

Wenn du die Appl. von der Konsole startest, spuckt er da irgendwelche GTK errors aus?

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

Sporadisch.
Ich habe die genauen Fehler nicht hier (schaue aber gleich mal nach) , aber es sind die gleichen, die auch bei einer "normalen" Lazarus-App angezeigt werden.
Warnings, CursorSet, etc... Zumindes nichts ungewöhnliches, oder etwas mit hoher Frequenz.

Gruß
Kernel

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Larazus App -> X-Server läuft voll

Beitrag von Scotty »

Wenn ich mein Programm längere Zeit laufen habe, wird der eingestellte Theme durch irgendwas anderes ersetzt. Das Programm läuft sauber weiter, etwas zäh zwar aber ohne erhöhten Speicherverbrauch. Bei mir könnte es an Compiz liegen. Ich bin mir auch nicht sicher, ob ein Volllaufen des Speichers unter X vergleichbar zu Windows ist. Möglicherweise cachet X die Daten länger. Heaptrace hast du sicher schon laufen lassen.

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

naja bezüglich dem X-Speicher unter Windows habe ich keinen Vergleich. Die Systemauslastung dex X-Servers geht unter Windows im Programm völlig auf.
Ich beziehe mich auch auf die CPU-Auslastung und nicht auf den Speicherverbrauch dex X-Servers. Dieser ist relativ konstant.

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: Larazus App -> X-Server läuft voll

Beitrag von theo »

Ohne Code zu sehen ist das irgendwie müßig, da können wir auch versuchen die Farbe deiner Socken zu erraten. ;-)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Larazus App -> X-Server läuft voll

Beitrag von Euklid »

Kernel hat geschrieben:Nach einiger Zeit beginnt die Auslastung des X-Servers bis auf 100% anzusteigen, welches dann die unbedienbarkeit der Software zu Folge hat.
Meine Komponenten allozieren nach dem erstellen keinen Speicher mehr, und ändern nicht Ihre Arbeitsweise.

Ich kann mir diesen Effekt nicht erklären. Es scheint so, als ob der X-Server einen Abarbeitungsstau hat, allerdings kann ich mir nicht
klären woher/wodurch, da die Sowftware ja eine ganze Zeit ohne steigende X-Serverauslastung läuft.


Wäre es möglich, dass Dein Programm den Speicher mit Leichen füllt? Hast Du mal die heaptrc eingespannt?

Viele Grüße, Euklid

Edit: Habe gerade gelesen, dass der Speicher nach Deiner Aussage konstant bleibt.

Kernel
Beiträge: 35
Registriert: Di 13. Okt 2009, 14:10

Re: Larazus App -> X-Server läuft voll

Beitrag von Kernel »

Ich versuche morgen mal Code nachzureichen.
Das Problem ist das es ca 10 selbst geschriebene Komponenten sind, welche jeweils teils umfangreiche Paint und InternalPaint-Funktionen haben.
Des Weiteren glaube ich, dass die Farbe meine Socken weit einfacher zu erraten sein dürfte, als die Lösung dieses Problem ;-)

Gruß
Kernel

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Larazus App -> X-Server läuft voll

Beitrag von Teekeks »

Kernel hat geschrieben:Des Weiteren glaube ich, dass die Farbe meine Socken weit einfacher zu erraten sein dürfte, als die Lösung dieses Problem ;-)

Ich Tippe mal: Schwarz? ;)

Antworten