Threaded Neutrino daemons

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Threaded Neutrino daemons

Beitrag von rhabarber1848 »

Ich mache mal einen neuen Thread auf, basierend auf http://www.tuxbox-cvs.sourceforge.net/f ... 72#p376172
Houdini hat geschrieben:
rhabarber1848 hat geschrieben:
Houdini hat geschrieben:vielleicht wird es doch noch Zeit die Neutrino Daemons a la coolstream "zu threaden"
es müsste "nur" noch gecodet werden ... ;)
Es gibt zwar noch einiges zu tun/optimieren aber bitte sehr:
http://home.arcor.de/houdini/dbox/neutr ... readed.tgz
Ich habe den Patch reduziert und cdk/make-Unterstützung eingebaut,
natürlich noch wenig getestet, da das Thema aber interessant ist, will
ich meine ersten Schritte nicht vorenthalten.

Als erstes wird ein Skript benötigt, um das Verschieben der Daemon-
Sourcecodes nicht per Patch machen zu müssen:

Code: Alles auswählen

#!/bin/sh

TUXHOME=$HOME/tuxbox
WORK=$TUXHOME/compile_neutrino_threaded

rm -rf $WORK
mkdir -p $WORK
cp -pr $TUXHOME/cvs/* $WORK/
cd $WORK
mv apps/dvb/zapit apps/tuxbox/neutrino/src/
rm -rf `find apps/tuxbox/neutrino/src/zapit/ | grep CVS$`
for i in nhttpd sectionsd timerd; do
	mv apps/tuxbox/neutrino/daemons/$i apps/tuxbox/neutrino/src/;
	rm -rf `find apps/tuxbox/neutrino/src/$i/ | grep CVS$`
done
rm -rf apps/tuxbox/neutrino/daemons/
Der CVS-Checkout wird von $HOME/tuxbox/cvs/ nach $HOME/tuxbox/compile_neutrino_threaded/
kopiert und die nötigen Verschiebungen werden durchgeführt. Dann kommt dieser Patch
(80k unkomprimiert), basierend auf dem Patch von Houdini: neutrino_threaded.diff

Das ganze ist noch ungetestet und wird laufend aktualisiert. Viel Spaß damit :)
EDIT: Mittlerweile läuft "make neutrino" durch.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

To-Do

- Plugin aformat anpassen
- sectionsd: diverse Parameter, wie "-tc", "-nu", "-p"
- Init-Skript für Dreambox
- Init-Skript für Ipbox
- timerd: config-Verzeichnis
- Neuladen der Kanalliste in nhttpd nicht mehr per wget: http://article.gmane.org/gmane.comp.vid ... x.scm/1187
- nhttpd optional (cdk/configure --enable-webinterface)

zapit.conf und marker-Dateien nach neutrino.conf überführen
- zapit: optionales PMT-update
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

"make yadd-neutrino" läuft durch. Yadd bootet, Neutrino startet, Bild und EPG sind da, nicht schlecht!
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Threaded Neutrino daemons

Beitrag von Houdini »

Danke für den neuen Beitrag und die Makefileanpassungen rhabarber1848,
die ganzen Änderungen in den Makefiles.am haben mir ganz schöne Kopfzerbrechen gemacht :-)

To-Do:
- Doppelten code rauswerfen: da gab es ein paar Funktionen die ich im nhttpd umbenannt habe weil sie doppelt vorhanden waren.
- Syncronisation wie z:b: stop_sectionsd etc. noch einpflegen
- zapit_debug, sectionsd_debug schaltbar
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

Ich teste gerade ein Flashimage.
Das schnelle Umschalten klappt noch nicht so ganz.

Ausgangssituation: 1. Programm eingeschaltet

Ich drücke auf der Fernbedienung die Umschalttaste zweimal
schnell hintereinander, in der Infoleiste wird das dritte Programm
angezeigt, das Bild kommt allerdings vom zweiten Programm.

Beim Drücken der ?-Taste erscheint die Infoleiste des dritten
Programms, beim nochmaligen Drücken der ?-Taste dann der
Infotext über die aktuelle Sendung auf dem zweiten Programm
angezeigt.

Wenn ich nun einmal weiterschalte, wird vom zweiten auf das
vierte Programm umgeschaltet. Neutrino weiß also nicht, dass
zapit beim Umschalten nicht hinterher gekommen ist.

Fehlermeldungen im Log sind nicht zu sehen.
Tuxtxt funktioniert in dieser Situation ebenfalls nicht mehr.

Nach einem Boxneustart kann ich das beschriebene Verhalten
allerdings nicht mehr reproduzieren. Tritt das Problem bei
Euch auch auf?

PS: Nach einem erneuten Boxneustart kann ich das beschriebene
Verhalten wieder reproduzieren.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: Threaded Neutrino daemons

Beitrag von GetAway »

Hi, ich komm hier nicht weiter.
Kopier-Skript und Patch laufen fehlerfrei durch, hier hängt es dann.

Code: Alles auswählen

rm -rf libvorbisidec-1.0.2+svn15687
touch .deps/libvorbisidec
cd /home/getaway/tuxbox/tuxbox-cvs-2.4-threaded/apps/tuxbox/neutrino && ./autogen.sh && CC=powerpc-tuxbox-linux-gnu-gcc CXX=powerpc-tuxbox-linux-gnu-g++ CFLAGS="-Wall -pipe -Os" CXXFLAGS="-Wall -pipe -Os" LDFLAGS="-Wl,-O1" ./configure --build=i686-pc-linux-gnu --host=powerpc-tuxbox-linux-gnu --prefix=/home/getaway/tuxbox/dbox2-2.4-threaded/cdkroot --with-driver=/home/getaway/tuxbox/tuxbox-cvs-2.4-threaded/driver --with-dvbincludes=/home/getaway/tuxbox/tuxbox-cvs-2.4-threaded/driver/dvb/include --with-boxtype=dbox2 --with-target=cdk    --enable-maintainer-mode  --without-debug --enable-upnp  --enable-lirc  --enable-ide --enable-mmc  --enable-drive-gui --enable-ccache 	    --enable-freesatepg --enable-esd --enable-radiotext        --enable-nfsserver --enable-sambaserver --enable-movieplayer2
Generating configuration files for tuxbox-neutrino, please wait....
  aclocal 
  libtoolize --automake
  autoconf
  autoheader
  automake --add-missing
configure.ac:2: installing `./install-sh'
configure.ac:2: installing `./missing'
lib/irsend/Makefile.am: installing `./depcomp'
src/Makefile.am:2: required directory src/zapit does not exist
src/Makefile.am:2: required directory src/sectionsd does not exist
src/Makefile.am:2: required directory src/timerd does not exist
src/Makefile.am:2: required directory src/nhttpd does not exist
Makefile.am: installing `./INSTALL'
Makefile.am: installing `./COPYING'
configure.ac:262: required file `src/nhttpd/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/web/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/web/images/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/web/scripts/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/tuxboxapi/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/yhttpd_core/Makefile.in' not found
configure.ac:262: required file `src/nhttpd/yhttpd_mods/Makefile.in' not found
configure.ac:262: required file `src/zapit/Makefile.in' not found
configure.ac:262: required file `src/zapit/src/Makefile.in' not found
configure.ac:262: required file `src/zapit/src/zapci/Makefile.in' not found
configure.ac:262: required file `src/zapit/src/zapost/Makefile.in' not found
configure.ac:262: required file `src/zapit/src/zapsi/Makefile.in' not found
configure.ac:262: required file `src/zapit/src/irsend/Makefile.in' not found
configure.ac:262: required file `src/zapit/lib/Makefile.in' not found
configure.ac:262: required file `src/zapit/include/Makefile.in' not found
configure.ac:262: required file `src/zapit/include/zapit/Makefile.in' not found
configure.ac:262: required file `src/zapit/include/zapit/client/Makefile.in' not found
configure.ac:262: required file `src/zapit/include/controldclient/Makefile.in' not found
configure.ac:262: required file `src/sectionsd/Makefile.in' not found
configure.ac:262: required file `src/timerd/Makefile.in' not found
make: *** [/home/getaway/tuxbox/tuxbox-cvs-2.4-threaded/apps/tuxbox/neutrino/config.status] Fehler 1
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

GetAway hat geschrieben:src/Makefile.am:2: required directory src/zapit does not exist
src/Makefile.am:2: required directory src/sectionsd does not exist
src/Makefile.am:2: required directory src/timerd does not exist
src/Makefile.am:2: required directory src/nhttpd does not exist
Diese Verzeichnisse müssen unter /home/getaway/tuxbox/tuxbox-cvs-2.4-threaded/apps/tuxbox/neutrino/ liegen.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

Das Flashen mit threaded-Neutrino funktioniert nicht:
mtd-write

[flashtool] restarting sectionsd to free memory
re-starting /bin/neutrino
[sectionsd] starting '/bin/neutrino'
/bin/neutrino: /lib/libpng12.so.0: no version information available (required by /lib/liblcddisplay.so.0)
Unknown signal 33
Neutrino exited with nonzero exit status, restarting...
dbt
Administrator
Beiträge: 2675
Registriert: Donnerstag 28. September 2006, 19:18

Re: Threaded Neutrino daemons

Beitrag von dbt »

Der Patch applied irgendwie nicht. Normalerweise sollten die neuen Ordner/Dateien beim Patchen angelegt werden. :(

Wie groß ist dann neutrino hinterher?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

dbt hat geschrieben:Normalerweise sollten die neuen Ordner/Dateien beim Patchen angelegt werden. :(
Genau das möchte ich nicht, da der Patch ansonsten 4,66 MB groß ist
und viele Binärdateien gar nicht als Patch transportierbar sind.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

dbt hat geschrieben:Wie groß ist dann neutrino hinterher?
root-neutrino.squashfs wird 24kb kleiner bei ansonsten gleichen Optionen,
/bin/neutrino 2,3 MB
mohousch
Einsteiger
Einsteiger
Beiträge: 362
Registriert: Mittwoch 14. Dezember 2005, 03:25

Re: Threaded Neutrino daemons

Beitrag von mohousch »

rhabarber1848 hat geschrieben:Das Flashen mit threaded-Neutrino funktioniert nicht:
mtd-write

[flashtool] restarting sectionsd to free memory
re-starting /bin/neutrino
[sectionsd] starting '/bin/neutrino'
/bin/neutrino: /lib/libpng12.so.0: no version information available (required by /lib/liblcddisplay.so.0)
Unknown signal 33
Neutrino exited with nonzero exit status, restarting...
EPG Restart macht es auch ;-)

das sectionsdclient command Restart() killt neutrino statt den sectionsd thread zu restarten, einen freeMemory(); reicht auch da die Box sowieso nach dem flashen rebootet.
GetAway
Contributor
Beiträge: 1509
Registriert: Donnerstag 27. Dezember 2007, 12:59

Re: Threaded Neutrino daemons

Beitrag von GetAway »

So, bei mir läuft es jetzt auch.
mohousch hat geschrieben: EPG Restart macht es auch ;-)

das sectionsdclient command Restart() killt neutrino statt den sectionsd thread zu restarten, einen freeMemory(); reicht auch da die Box sowieso nach dem flashen rebootet.
Der restart() vor dem flashen macht aber nicht nur den Speicher frei, sondern sectionsd startet im Pausemodus.

Sectionsd restart über yWeb fahrt bei mir die Box in den Deep-Standby
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

mohousch hat geschrieben:das sectionsdclient command Restart() killt neutrino statt den sectionsd thread zu restarten, einen freeMemory(); reicht auch da die Box sowieso nach dem flashen rebootet.
Patch aktualisiert
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:
mohousch hat geschrieben:das sectionsdclient command Restart() killt neutrino statt den sectionsd thread zu restarten, einen freeMemory(); reicht auch da die Box sowieso nach dem flashen rebootet.
Patch aktualisiert
Der Code kompiliert und nach dem Neustart des EPG mittels freeMemory()
wird die Anzahl der gepufferten EPG-events auf 0 zurückgesetzt, die
Speicherauslastung durch neutrino geht allerdings nicht sofort zurück.
Ist das normal und muss man warten oder läuft da noch irgendwas schief?
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Threaded Neutrino daemons

Beitrag von seife »

Wie stellst du denn die "Speicherauslastung" fest?
mohousch
Einsteiger
Einsteiger
Beiträge: 362
Registriert: Mittwoch 14. Dezember 2005, 03:25

Re: Threaded Neutrino daemons

Beitrag von mohousch »

hm
bei mir variiert neutrino zwischen 17% bis 34 % mem usage, das ist durchnitlich gut.
stelle Speicherauslastung mit top fest.

Offtopic: hat mit dem threaded neutrino nichts zu tun, mir sind paar avs/ioctl die nicht mehr gehen
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

seife hat geschrieben:Wie stellst du denn die "Speicherauslastung" fest?
top aus psutils, nach dem Start belegt der Prozess neutrino 3 MB, was nach
und nach auf 13 MB hochgeht durch das Einlesen des EPG, der EPG-Neustart
mittels freeMemory() reduziert den Speicherverbrauch nur auf 11 MB.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Threaded Neutrino daemons

Beitrag von seife »

top, ps & co sind keine zuverlässigen Instrumente um zu beurteilen, ob freemem() den Speicher freigibt. Außerdem kann nicht jeder freigegebene Block wieder an das OS zurückgegeben werden. Details dazu in ihrer freundlichen malloc()-Implementierung :-)

Das war ja ein Grund, um den restart-Hack einzubauen, um zuverlässig genug Speicher freizuräumen, damit eine Aufnahme gestartet werden kann. Das scheiterte typischerweise am pthread_create, weil nicht genug unfragmentierter speicher mehr frei war.

Es kann gut sein, dass das in eurer threaded-Neutrino-Implementation (welche ich übrigens als weiteren Fork für ausgesprochen unglücklich halte - auch wenn das coolstream-Neutrino sicher nicht das Optimum ist ;-)) gar nicht notwendig ist, weil evtl. der Speicher wegen der geringeren Anzahl an Prozessen gar nicht so fragmentiert, bzw. besser recycled werden kann.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

seife hat geschrieben:threaded-Neutrino-Implementation (welche ich übrigens als weiteren Fork für ausgesprochen unglücklich halte
Wer sagt denn, dass das ganze nicht irgendwann CVS HEAD wird? ;)
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Threaded Neutrino daemons

Beitrag von seife »

Ich halte es trotzdem für nicht sinnvoll, dieselbe Arbeit ein weiteres mal zu machen.
Ja, es ist so, daß am coolstream-Neutrino noch viel gefixt / nachgezogen werden muß, damit es so gut wird, wie das richtige jetzt schon ist.
Allerdings ist es, lustigerweise ausgerechnet durch die von NXP vorgegebenen Zwänge, die die libcoolstream erforderlich machten, wesentlich portabler.

Um das auf DVB-API zu portieren, muss nur die libcoolstream (oder, libtriple, wie ich sie für die TD genannt habe) implementiert werden weil wirklich praktisch alles dort abstrahiert ist (bis auf den Frontend-Code im zapit, aber da ist die coolstream ziemlich DVB-API-kompatibel). Da sich die TD-API nicht wirklich grundlegend von der DVB-API unterscheidet, sollte das ein Projekt für einen Samstagnachmittag sein (wenn man die libtriple als Vorbild nimmt).

Dann ist das coolstream-Neutrino immer noch viel zu dick für die dbox, das ist klar, aber das abzuspecken sollte nicht so ein Problem sein.
bosmann
Einsteiger
Einsteiger
Beiträge: 268
Registriert: Sonntag 3. September 2006, 14:13

Re: Threaded Neutrino daemons

Beitrag von bosmann »

bei mir läuft es auf der dbox2 und dm5620 :up:
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

Mal ein kleines ping in den Äther geschickt.
Ich habe den Patch bei mir gerade wieder ausgegraben und wollte fragen,
ob sich noch jemand daran versucht hat ?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: Threaded Neutrino daemons

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:basierend auf dem Patch von Houdini: neutrino_threaded.diff
Patch an das aktuelle CVS angepasst, "make neutrino" läuft durch.