Stiftung: Stabiler sectionsd

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Stiftung: Stabiler sectionsd

Beitrag von Nirvana »

Weil sich die Bugreports leider über mehrere Topics verteilt haben, habe ich nicht so ganz den Überblick.

Hängt sich der sectionsd noch auf?

Wenn ja, dann postet bitte hier rein, wie ihr ihn möglichst schnell und reproduzierbar um die Ecke bringen könnt. Leider kann ich persönlich Meldungen, wie 24 Stunden auf ZDF laufen lassen, nicht überprüfen.

Ach und die Kanalsuche spielt vorerst nicht mit. Also bitte auf aus.
Weiterhin sollte der aktuelle CVS-Stand maßgeblich sein.
Mit sectionsd -d erstellte Logs wären hilfreich. Ebenso detaillierte Angaben zur Konfiguration.
Torsten73
Erleuchteter
Erleuchteter
Beiträge: 547
Registriert: Mittwoch 30. Juni 2004, 16:06

Beitrag von Torsten73 »

Hi,
also beim JTG 4.12. sind die Hänger immer noch reproduzierbar. 1-2 Tage mehr schafft der SectionSD nicht.

Aber mir ist da etwas merkwürdiges aufgefallen:
DBox ist seit 17h an, ohne Absturz. Nun bin ich ins EPG (ARD) gegangen und habe mir die Liste mal genauer angesehen. Nun sie war vollständig, aber der erste Eintrag war von vor 17h!
Der Einsprung im EPG ist zwar bei der aktuellen Sendung, aber man kann munter zurück scrollen und sieht alle Sendungen seit dem Start der Box.

Das kann doch kaum gewollt sein, oder?

Meiner Meinung nach sollte es so sein, dass die EPG Einträge aus der Vergangenheit gelöscht werden und damit der Speicher freigegeben wird und der erste Eintrag in der EPG Übersicht die aktuelle Sendung ist.

Noch dazu kommt das der Speicher laut Sysinfo nur noch bei 0,2MB liegt. wo will man dann noch EPG Daten ablegen?

Ich könnte mir gut vorstellen, dass dort der Hund begraben liegt. Richtig ist dieses Verhalten nämlich bestimmt nicht, und wer weiß was das für Folgen nach sich zieht...

Cu
Torsten
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

dazu aus sectionsd.cpp:
static long oldEventsAre = 180*60L; // 3h (sometimes want to know something about current/last movie)
also die events sollten zurück bis 3h vor der aktuellen Zeit angezeigt werden, nicht weiter.
MOhlmann
Einsteiger
Einsteiger
Beiträge: 205
Registriert: Montag 19. April 2004, 21:09

Beitrag von MOhlmann »

Also ich kann auch im moment ca 6h im epg zurück gehen.

Gruß Michael
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

liegt die start oder die endzeit 6h zurück?
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Okay, jetzt fange ich schon wieder mit Crossposting an, aber der Patch aus dem anderen Topic gehört auch irgendwie dahin.

Die Erklärung hier:
Mich störte, dass EPG-events zuerst gelöscht und dann sofort wieder hinzugefügt wurden. Finde ich irgendwie unschön. Gibt es dafür einen Grund? Z.B. ändern sich die Events mal in ihrer Länge oder so? Z.B. bei verlängerten Liveübertragungen? Dann wäre meine "Verbesserung" natürlich schlecht. Jetzt habe ich es so gemacht, dass wenn die Event-ID existiert, wird nichts unternommen. Vorher wurde gelöscht und direkt danach wieder hinzugefügt. Das führt natürlich zu unnötigen Speicher OPs.
MOhlmann
Einsteiger
Einsteiger
Beiträge: 205
Registriert: Montag 19. April 2004, 21:09

Beitrag von MOhlmann »

die start zeit liegt 6h zurück.
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

die sectionsd 1.211 (houdinis fix) stürtzt bei mir alle paar stunden unmotiviert ab. freier speicher geht auf 600-700kb herunter - anschließend reagiert die box nicht mehr.
ich habe eventstocaache auf 4 tage und oldeventsare auf 60min

sectionsd 1.212 (nirvanas fix) habe ich noch nicht eingepflegt.

innu
Torsten73
Erleuchteter
Erleuchteter
Beiträge: 547
Registriert: Mittwoch 30. Juni 2004, 16:06

Beitrag von Torsten73 »

@Nirvana:
NNein es waren definitiv EPG Einträge von Dienstag 14 Uhr, da fingen die ersten an. Das war auch Zurückgerechnet der Startpunkt der Box. Nachgesehen hatte ich das heute morgen gegen 8.30.

Also wenn die letzte Sendung noch gecached wird könnte ich das noch für sinnvoll halten, aber nicht für 6h oder wie tatsächlich eher unendlich (obwohl ich ja denke das hier ein Softwarefehler vorliegt). Wir haben doch eh zuwenig Speicher für den EPG, warum den alten Müll mit uns mitschleppen?

Und zu den unnötigen Speicherzugriffen, war das nicht Günter der mal etwas vorgeschlagen hatte, damit nicht "auf dem Heap rumgeorgelt" wird? Kenne mich damit nur leider nicht aus, aber es ist schon richtig, das es in der Technik ja auch Fehler der CPUs gibt, die durch zu intensieven Gebrach vom Stack oder ähnlichem einen Fehler/Absturz hervorrufen können. So was gab es bei meiner C-Control nämlich auch... Das ganze anders programmiert, ohne Stack und schon funktioniert es.

Cu
Torsten
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Was halten denn die Gelehrten von diesem Code-Schnipsel im Housekeeper?

Code: Alles auswählen

struct mallinfo speicherinfo1;

if (debug)
			{
				// Speicher-Info abfragen
				speicherinfo1 = mallinfo();
			}

			lockEvents();

			unsigned anzEventsAlt = mySIeventsOrderUniqueKey.size();
			removeOldEvents(oldEventsAre); // alte Events

			if (mySIeventsOrderUniqueKey.size() != anzEventsAlt)
			{
				dprintf("total size of memory occupied by chunks handed out by malloc: %d\n", speicherinfo1.uordblks);
				dprintf("total bytes memory allocated with `sbrk' by malloc, in bytes: %d (%dkb, %.2fMB)\n", speicherinfo1.arena, speicherinfo1.arena / 1024, (float)speicherinfo1.arena / (1024.*1024));
				dprintf("Removed %d old events.\n", anzEventsAlt - mySIeventsOrderUniqueKey.size());
			}
speicherinfo1 wird nur gefüllt, wenn debug == true. Kurz danach werden aber Infos von speicherinfo1 abgefragt, wenn Events gelöscht wurden. Dies gilt auch wenn nicht debug ist. Können da nicht böse, böse Dinge passieren?
ChakaZulu
Developer
Beiträge: 457
Registriert: Sonntag 23. März 2003, 00:39

Beitrag von ChakaZulu »

hi,

ist dprintf nicht ein makro, das zu

Code: Alles auswählen

if (debug) printf(...)
oder ähnlich expandiert wird?

ciao,

ChakaZulu
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Code: Alles auswählen

for (MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey::iterator e = mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin(); 
			e != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end(); e++) {
...
		if (false == goodtimefound) {
			// keep track of our iterator
			etmp = e;
			etmp--;
			deleteEvent((*e)->uniqueKey());
			e = etmp;
		}
...

@Zulu
Okay, habe ich nicht überprüft.

Nächstes Opfer: Das oben ist aus removeOldevents. Was passiert, wenn das erste event der Liste geläöscht wird? Dann ist e == begin und dann wird etmp--. Führt das vielleicht zu Problemen und erklärt wieso alte Events nicht verschwinden?
Mac23
Einsteiger
Einsteiger
Beiträge: 127
Registriert: Donnerstag 23. Oktober 2003, 20:50

Re: Stiftung: Stabiler sectionsd

Beitrag von Mac23 »

Hallo,
Nirvana hat geschrieben: Hängt sich der sectionsd noch auf?
ich habe hier ein selbsterstelltes Yadi-Image (Yadi-Script vom 06.11.2005), wo ich in letzter Zeit immer nur die sectionsd und zapit neu aus dem CVS hole und teste. Die letzte Version ist vom 06.12.05.
Dabei habe ich folgendes festgestellt:

+ sectionsd stürzt anscheind nicht mehr ab (in früheren Versionen, war der EPG nach ca. einem Tag weg, d.h. sectionsd hat sich beendet)

- sectionsd lässt nach mehreren Umschaltvorgängen die Box einfrieren indem zuviel Speicher belegt wird. Ein Login per telnet, abschiessen von sectionsd bringt die Box wieder zum Laufen.


Früher funtkionierte der sectionsd eigentlich ganz gut - kennt jemand evtl. ein Datum, wo dies noch so war? Ich würde dann gerne diese Version auschecken und einbauen, sofern es denn mit dem aktuellen Neutrino geht...
wittinobi
Einsteiger
Einsteiger
Beiträge: 116
Registriert: Montag 29. März 2004, 22:00

Beitrag von wittinobi »

Code: Alles auswählen

kennt jemand evtl. ein Datum, wo dies noch so war? Ich würde dann gerne diese Version auschecken und einbauen
tjo, also den gleichen gedanken hatte ich auch gerade.
meines wissens müßte bis zum 15.08.2005 noch alles funzen.
ich wollte gerade mal nachschauen, aber leider ist tuxbox irgendwie nicht erreichbar ?!?

mfg
wittinobi
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

JTG 4.12.
Nicht reproduzierbare Hänger.
Eine Box läuft 2 Tage, die andere 1 Tag, wieder ne andere dazwischen.
Leide finde ich keinen repoduzierbaren Weg mehr sectionsd mutwillig abzuschiessen.
Im log steht, wenn überhaupt, immer nur Segmentation Fault.
Bei einer Nokia semmelt auch ab und zu mal die ganze Box ab und bleibt mit leicht verkrüppelter LCD Anzeige stehen.
(Um es gleich vorwehzunehmen, die Box mit JTG 04.10 läuft Ewigkeiten durch, ohne Probs)
Ne andere Nokia wird ab und zu mal extrem langsam.
Die Philips machts am besten, obwohl die bis vor kurzem am schnellsten Fehler zeigte.
Ich versteh die Boxen und den sectionsd im Moment garnicht :gruebel: :gruebel: :lol:

Sorry kann nicht wirklich dienlich sein.
Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server
dess
Einsteiger
Einsteiger
Beiträge: 128
Registriert: Sonntag 12. Mai 2002, 10:43

Beitrag von dess »

:P Würde gerne die aktuellste Version testen. Benötige jedoch das File.

z.Z. Neutrino 2.1.0.9 und sectionsd 1.192

Grüsse,
Woody
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

@Nirvana
Nächstes Opfer: Das oben ist aus removeOldevents. Was passiert, wenn das erste event der Liste geläöscht wird? Dann ist e == begin und dann wird etmp--. Führt das vielleicht zu Problemen und erklärt wieso alte Events nicht verschwinden?
Oha da hast du glaub ich recht, das wird nicht abgefangen, da muß ich mich schämen :oops:
Da muß man sich noch was einfallen lassen, aber was passiert, wenn man den aktuellen iterator aus der liste löscht und dann diesen weiter iteriert?

Houdini
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Nix schämen!

Nur wer nix macht, macht keine Fehler. Aber wenn du auch meinst, dass das ein Fehler ist - wie wäre es mit while von hinten durch die Liste zu laufen? So mach ich das immer.
Torsten73
Erleuchteter
Erleuchteter
Beiträge: 547
Registriert: Mittwoch 30. Juni 2004, 16:06

Beitrag von Torsten73 »

Hi,
so nochmal zu meinen Beobachtungen:
also ich komme nach Hause, Box läuft immer noch (die heute morgen die uralten Events anzeigte) Uptime 1T7h. Sectionssd noch aktiv. freier Speicher =0,8MB allerdings sectionsdscan = an.
keine 10 min. später nachdem gezappt wurde was so läuft, wird die Box grottenlangsam und kaum bedienbar. Das konnte ich noch per WebIF auslesen, bis meine Schwiegermutter den Reset machte (obwohl sie nicht sollte :x ):

Code: Alles auswählen

avia_gt_dmx queue 31 overflow (count1)
und das kommt dann zig mal...

Vorher habe ich mir ZDF EPG angesehen, dort war der erste EPG Eintrag vom Dienstag 16 Uhr und Uptime 1T 8h. Aktueller Uhrzeit war 23.30 Mittwoch!

Dann habe ich mal versucht eine Speichermessung zu erstellen.
D.h. habe folgende Sender angezappt und mit Sysinfo den freien Speicher ausgelesen, nachdem der Prozessor nichts mehr tat:
RTL = 10,7 MB free
Sat1 = 10,5 MB free
ARD = 6,6 MB free (dauert am längsten)
ZDF= zwischenzeitlich 3,8 -> zum Schluß 4,8 MB free ?!? was soll der Schwanker?
Pro7 = 3,8 -> 4,8 MB wie bei ZDF
Premiere = 3,3 -> 4,4 MB
wieder auf
RTL = 3,5 und nach einiger Zeit wieder 4,5 dauert aber länger als vorher
wieder auf
Sat1 = 3,5 -> 4,5MB

Zusammengefasst, sind nach 15 min Onlinezeit noch 4,5MB Speicher frei. Dabei habe ich auf den Paketen ARD/ZDF/Sat1/RTL alle EPG Daten gesammelt die anfallen.
D.h. in den nächsten Stunden wird der Speicher kontinuirlich weniger, obwohl er doch gleich bleiben müßte wenn ich nichts anderes mache!
Was allerdings das Gespringe im freien Speicher zwischen 3,5 und 4,5 bedeutet weiß ich auch nicht.

Ich habe auch Screenshots, kann die aber bei bedarf nur mailen, habe keinen Webspace :(

So ich hoffe das hilft ein wenig weiter ...

Cu
Torsten
DrStoned
Tuxboxer
Tuxboxer
Beiträge: 2614
Registriert: Montag 20. Mai 2002, 10:49
Image: JTG-Image [IDE] Version 2.4.4
Image: (7025SS) Merlin

Beitrag von DrStoned »

Ich habe auch Screenshots, kann die aber bei bedarf nur mailen, habe keinen Webspace

So ich hoffe das hilft ein wenig weiter ...
Screenshots kannst Du bei Image Shack uploaden. Diese Bilder kannst Du dann hier direkt in Deine Posts einfügen.

Greetz von DrStoned :lol: :lol: :lol:
Greetz von DrStoned :lol: :lol: :lol:
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

Hallo,
habe heute Nacht das erhalten.
Weis nicht genau wann und wie, hab ja geschlafen.
Sections scan ist aus, trotzdem meldet er ab und zu Transponder blahfasel gefunden und ähnliches....Zeugs.

Code: Alles auswählen

Machine check in kernel mode.
Caused by (from SRR1=1032): Transfer error ack signal
Oops: machine check, sig: 7
NIP: C38A016C XER: 20000000 LR: C38A011C SP: C18C5EB0 REGS: c18c5e00 TRAP: 0200    Not tainted
MSR: 00001032 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11
TASK = c18c4000[135] 'sectionsd' Last syscall: 13 
last math 00000000 last altivec 00000000
GPR00: 00001310 C18C5EB0 C18C4000 00000001 00000000 00131022 10144FE8 31021D00 
GPR08: 00000013 C38A8000 C38A0000 C38A8000 44004084 10047264 00000000 300194B4 
GPR16: 00000000 4397852F 10020000 10040000 00001032 018C5F40 00000000 C0002AA0 
GPR24: C0003B60 00000020 C1C91AC0 00131022 00000000 00000080 00000000 C1C91AC0 
Call backtrace: 
00000020 C38A04D8 C0003A98 C0003B9C C0002AA0 4397C00F 0FD2E7F0 
0FF2F884 10018E50 1001939C 1000E48C 100144F8 0FE45B84 0FD58B08 
PCR discontinuity: PCR: 0x0779C10F1, OLDPCR: 0x0779AF0C6, Diff: 73771
Kernel panic: Aiee, killing interrupt handler!
In interrupt handler - not syncing
 <0>Rebooting in 180 seconds..?debug: DDF: 
PetB
Torsten73
Erleuchteter
Erleuchteter
Beiträge: 547
Registriert: Mittwoch 30. Juni 2004, 16:06

Beitrag von Torsten73 »

DrStoned hat geschrieben:
Ich habe auch Screenshots, kann die aber bei bedarf nur mailen, habe keinen Webspace

So ich hoffe das hilft ein wenig weiter ...
Screenshots kannst Du bei Image Shack uploaden. Diese Bilder kannst Du dann hier direkt in Deine Posts einfügen.

Greetz von DrStoned :lol: :lol: :lol:
Ahh, gut zu wissen. Thx!

Nochmal zum Speicherbedarf, habe heute nacht eine Box nach Neustart auf Premiere Radio gelassen, nichts anderes angezappt, mal sehen, was heute Abend der freie Speicher sagen wird.

Das ganze mit dem freien Speicher ist mir mittlerweile alles sehr zweifelhaft. Sectionsdscan benötigt auch Speicher uund nicht gerade wenig 3-4 MB und der MB selbstverständlich ebenso, vom Pictureviewer ganz zu schweigen. Und alle Aplikationen benötigen eigentlich mehr Speicher als wir zur Verfügung haben.
Heute morgen habe ich testweise bei einem Freespeicher von 0,8MB den Picviewer gestartet (ohne decodingserver) und anstatt das Bild anzuzeigen ist die Box ausgegangen. Selber Versuch direkt nach dem Neustart funktioniert problemlos.
Anscheinend wird der Speicher nicht richtig freigegeben, wenn andere Aplikationen ihn benötigen und zusätzlich läuft de Speicher mit der sectionsd voll.
Was/wo wird eigentlich abgefangen wenn mehr Speicher benötigt als vorhanden? Auslagern geht ja schlecht, also muß doch irgendwo was grundsätzliches bei den Taks schieflaufen.
Ich stelle mir das so vor, das wenn eine andere Vordergrundanwendung Speicher haben will, der Speicher vorher geleert werden muß, damit für die gerade aktive Anwendung wieder genügend zur Verfügung steht.

Und genau da würde ich suchen.
1. Warum löscht der Sectionsd nicht die alten Events (daraus resultiert der wachsende Speicherbedarf) ?
2. Wieso wird ein Speicherüberlauf nicht abgefangen?
3. Wo wird definiert welcher Task welchen Adressbereich nutzt und unter welchen Bedingungen den wieder freigibt?

Soviel von meinem logischen Verständniss. Korrigiert mich, wenn ich blödsinn Rede, aber ich denke das darin die Ursache liegt.

Ich hoffe dass es Euch gelingt die Probleme im Code zu finden, ich kann es leider mit meinen Programmierkünsten nicht. Ist schon viel zu lange her :(

Cu
Torsten
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Und genau da würde ich suchen.
1. Warum löscht der Sectionsd nicht die alten Events (daraus resultiert der wachsende Speicherbedarf) ?
2. Wieso wird ein Speicherüberlauf nicht abgefangen?
3. Wo wird definiert welcher Task welchen Adressbereich nutzt und unter welchen Bedingungen den wieder freigibt?
zu 1:
macht er doch (ok mit meinem letzten Patch gibts da ein Problem...)
zu 2:
wird er meisten (aber nicht immer), muß überall wo Speicher allokiert wird separat abgefangen werden.
zu 3:
nirgendwo, bzw das macht das OS. Speicher wird mit malloc allokiert und dann irgendwann wieder freigegeben (oder auch nicht). Das steuert die Applikation.
Zum Speicherverauch des sectionsd: Ich habe >4 Wochen damit verbracht herauszufinden wo der Speicher verloren geht, aber nichts gefunden.
Was ich herausgefunden habe ist, dass alleine ca. 50% für die Verwaltung der Events verbraucht wird (std::set, std::map) - auch wenn man alle events nachher löscht bleibt der maximalstand der maps bestehen.

Houdini
dietmarw
Contributor
Beiträge: 1833
Registriert: Mittwoch 10. April 2002, 15:39

Beitrag von dietmarw »

und was war hiermit??

Günther:
Weiterhin ist mir aufgefallen, daß ganz schon auf dem heap rumgeorgelt wird (mallocs). Ich weiss ja nicht wie das bei Linux ist, aber Speicherfragmentierungen sind ansonsten die größten Probleme bei embedded C++Projekten (nicht ohne Grund sind malloc in der embedded Welt oft verboten). Das könnte auch der Grund sein, warum die Boxen nach Stunden oder Tagen abschmieren.
http://forum.tuxbox-cvs.sourceforge.net ... &start=380

ich bin ja kein coder, aber könnte man da nicht testweise andere methoden anwenden?
MOhlmann
Einsteiger
Einsteiger
Beiträge: 205
Registriert: Montag 19. April 2004, 21:09

Beitrag von MOhlmann »

Hier hab ich noch ein log wo die box hängen geblieben ist.

http://people.freenet.de/mohlmann/secti ... 081205.rar

Und hier noch eines wo die box runter gefahren ist. Im Seriellen log stand noch segmentation fault!

http://people.freenet.de/mohlmann/secti ... _fault.rar

Gruß Michael
Zuletzt geändert von MOhlmann am Donnerstag 8. Dezember 2005, 17:24, insgesamt 1-mal geändert.