[Announce] Permashift Version 1.0.1

  • ich hab jetzt den aktuellen Permashift Patch in yavdr mit vdr 2.1.9 integriert und das Verhalten ist genauso wie schon in vdr 2.0.6 mit dem alten Patch geschildert:


    Funktion einwandfrei aber ~80 CPU, also quasi nicht wirklich praktisch zu benutzen. Das Ganze auf zwei VDR auch bei einem anderen User nachvollziehbar, mit oder ohne plugins.


    Hast du hier noch eine Idee zu?


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Ok, du bist hartnäckig. :)


    Ich hab es gerade noch einmal ausprobiert auf meinem Desktop-Rechner und auf dem Wohnzimmer-Celeron (2% Last!), und auf beiden ist die Last sehr friedlich, sobald der RAM-Buffer fertig gespeichert ist. Beschreib mal, was genau du testest, mit welchen Permashift-Einstellungen und auf welcher Hardware. Und bitte Tests nur mit Vanilla-VDR- Permashift und ggf. Plugins, die unbedingt notwendig sind (xineoutput o. ä.)

  • eingestellt sind 2Gb Ram, ich warte 10 min damit ich was im Cache hab und spule dann zurück. Dann bin ich in der Wiedergabe einer ganz gewöhnlichen Aufnahme mit besagtem Verhalten.


    In yavdr mit 2.1.9 ist ja gar nicht mehr viel drin mit patchen, Mini sei Dank. Plugins hab ich alle rausgeworfen ausser softhddev.`- wenn ich nicht mit Rücklauf sondern mit Pause einsteige ist auch alles gut. Korrigiere, ist genau dasselbe Verhalten...


    HW: beide VDR aus der Signature intel celeron und auch athlon X2, Test mit vanilla vdr ist nicht so einfach auf die Schelle.


    Willst du evtl ein paar Log,meldungen einbauen zu sehen welcher deiner Prozesse das macht?

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



    Einmal editiert, zuletzt von CKone ()

  • eingestellt sind 2Gb Ram, ich warte 10 min damit ich was im Cache hab


    Vor den 10 Minuten umschalten (oder VDR frisch gestartet haben, aber umschalten reicht) könnte gut sein. Dann ist der Puffer sicher nicht zu groß.


    Dann bin ich in der Wiedergabe einer ganz gewöhnlichen Aufnahme mit besagtem Verhalten.


    Und der Puffer ist dann fertig geespeichert (=> Syslog)?


    Willst du evtl ein paar Log,meldungen einbauen zu sehen welcher deiner Prozesse das macht?


    Ich weiß noch gar nicht, was ich da ausgeben könnte, aber ich denk mal drüber nach...

  • Also unter gen2vdr gibt es das Problem nicht wir mir berichtet wurde: was die anders machen ist das die nicht wie yavdr precise libav nutzen sondern ffmpeg. Mit was testest du hier?


    Ich werde das die nächsten Tage genau testen, ohne Patche und ohne Plugins würde dann ja nur noch livbav bleiben...


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Und der Puffer ist dann fertig geespeichert (=> Syslog)?


    also das Problem tritt auch mit dem yavdr quasi ungepatched auf, nur mit permashift und softhddev Plugins aktiv - gerade mit 2.1.10 nachvollzogen auf "Das Erste HD"


    Was mir hier auffällt: im Syslog find ich da nix, nach was kann ich genau greppen?


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Was mir hier auffällt: im Syslog find ich da nix, nach was kann ich genau greppen?


    Das sieht so aus.

    Code
    vdr: [5890] writing... video/@zibb_zuhause_in_berlin_&_brandenburg/2015-02-10.18.58.12-0.rec/00002.ts
    vdr: [5890] writing... video/@zibb_zuhause_in_berlin_&_brandenburg/2015-02-10.18.58.12-0.rec/00001.ts


    Wenn die Datei 00001.ts der jeweiligen Sendung geschrieben wurde, sollte es (kurz darauf) fertig sein.

  • aber während er das wegschreibt macht er bei dirtrotzdem nicht son Alarm und läuft entspannt weiter?


    ich probiere das dann später oder morgen noch mal

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • aber während er das wegschreibt macht er bei dirtrotzdem nicht son Alarm und läuft entspannt weiter?l


    Während des Wegschreibens kann schon mehr Alarm sein. Das macht er so schnell wie möglich.

  • Ich habe übrigens auf Github einen Patch für VDR Version 2.2 bereitgelegt: https://github.com/eikesauer/Permashift


    Die nächsten Wochen werde ich nicht allzuviel Zeit haben, mich um Permashift zu kümmern.
    Ich würde mich aber freuen, wenn wir das mit der CPU-Belastung geklärt kriegen.

  • noch mal zurück:


    er schreibt das in der Tat in 10s auf die SSD, das Load geht dann auch von 100 auf 70 zurück - da bleibt es leider für immre stehen


    Funktionieren tut es wirklich tadellos, ansonsten.


    Einen plain vdr zu testen ist leider nicht so trivial auf ner Distri.


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Hi,


    benutze zur Zeit gen2vdr v5 und das neuste Permashift Plugin.


    Bekomme gelegentlich folgende Fehlermeldung in den /var/log/messages


    Mar 15 18:27:49 [vdr] [3132] confirmed
    Mar 15 18:27:49 [vdr] [3132] executing '/_config/bin/vdrshutdown 0 0 0 "" 1'
    Mar 15 18:27:49 [vdr] [3132] ERROR (thread.c,564): Nicht genügend Hauptspeicher verfügbar


    Auf Grund diesem Fehlers beendet sich das Shutdownscript und der Rechner fährt nicht runter...


    Laut top ist aber noch genug Hauptspeicher verfügbar.


    KiB Mem: 8100952 total, 6175700 used, 1925252 free, 171948 buffers


    KiB Swap: 0 total, 0 used, 0 free. 247472 cached Mem


    Ich weiß leider nicht, ob dies an deinem Plugin liegt oder am shutdown script, da der Fehler wirklich nur sporadisch auftritt. Hat noch jemand anderes dieses Problem?

    VDRHD-System: Intel Celeron E3200 Dualcore 2,4GHZ; MB GIGABYTE GA-P31-ES3G; G-Skill PC-800 DDR Ram 2GB; VGA Gainward Bliss Geforce GT 9500 1024MB; Technotrend Budget S2-1600; Technotrend Skystar 2; Ausgabe über HDMI

  • Das scheint von hier zu kommen:


    559 int SystemExec(const char *Command, bool Detached)
    560 {
    561 pid_t pid;
    562
    563 if ((pid = fork()) < 0) { // fork failed
    564 LOG_ERROR;
    565 return -1;
    566 }


    Da will etwas einen Systemaufruf absetzen und das gelingt nicht.
    Wenn du an der Stelle das Kommando ausgeben würdest (wäre wohl auch eine sinnvolle VDR-Änderung), könnte man mehr erfahren:

    Code
    dsyslog("%s", Command);


    ... vor dem LOG_ERROR sollte das tun.


    Und ich sach' schon mal: Permashift ist unschuldig! :o)

  • er schreibt das in der Tat in 10s auf die SSD, das Load geht dann auch von 100 auf 70 zurück - da bleibt es leider für immre stehen


    Kannst du mal folgendes probieren?


    In bufferreceiver.c, etwa Zeile 350, kommt eine Logzeile dazu:


    Code
    if (m_bufferWriter->Finished())
    {
    	dsyslog("Permashift live buffer fully saved.");
    	delete m_ringBuffer;
    	m_ringBuffer = NULL;
    }


    Wenn du zurückspulst, und genug Video im RAM ist für mindestens zwei TS-Teilstücke, bekommst du dann die Meldung "fully saved"?

  • Da will etwas einen Systemaufruf absetzen und das gelingt nicht.
    Wenn du an der Stelle das Kommando ausgeben würdest (wäre wohl auch eine sinnvolle VDR-Änderung), könnte man mehr erfahren:

    Code
    dsyslog("%s", Command);


    ... vor dem LOG_ERROR sollte das tun.


    Und ich sach' schon mal: Permashift ist unschuldig! :o)


    Hallo Eike,


    zunächst mal vielen Dank für Dein tolles Plugin! Ist bei uns seit einigen Monaten im täglichen Einsatz und wir möchten es nicht mehr missen.


    Allerdings hatte ich in der Vergangenheit auch öfter Mal das Problem, dass sich der VDR wegen Speichermangel nicht mehr ausschalten ließ. Diese Woche hab ich die Ursache herausgefunden und muss Dir leider mitteilen, dass - zumindest bei mir - da doch ein Fehler in Permashift die Ursache war.


    Da ich keine Signatur habe: Ich benutze ein 32-Bit Ubuntu-Precise und baue meinen VDR aus den yavdr-Quellpaketen selbst. Darin eingebaut habe ich Dein Permashift-1.0.0. Mein System hat 3 DVB-Receiver.


    Der Fehler passiert bei mir folgendermaßen:

    • Ich schaue Live. Dabei benutzt VDR device 3 und im receiver thread ist ein Ringbuffer eingehängt, auf den m_bufferReceiver zeigt.
    • Dann benutze ich permashift, um live zurückzuspoolen, und gehe irgendwann aus dem Abspielen dieser Aufnahme wieder raus, ohne die Aufnahme zu beenden
    • Wenn ich anschließend, während die Aufnahme noch läuft, live auf ein Programm auf einem anderen Transponder schalte, startet VDR einen receiver thread auf device 1 (device 3 braucht er ja für die Aufnahme) und permashift legt einen neuen Ringbuffer an, auf den m_bufferReceiver zeigt.
    • Irgendwann endet die oben gestartete Aufnahme. Dabei ruft das darin eingehängte bufferReceiver-Objekt die Funktion BufferDeleted auf.
    • Damit wird m_bufferReceiver auf NULL gesetzt. Und das ist falsch, denn m_bufferReciever ist ja inzwischen eigentlich für den Ringbuffer in device 1 zuständig
    • Schalte ich nun wieder auf einen anderen Transponder, benutzt VDR wieder einen receiver thread auf device 3 und würde normalerweise den receiver thread für device 1 beenden.
    • Da jedoch m_bufferReceiver auf NULL gesetzt wurde, wird der Ringbuffer für device 1 nicht angehalten und deshalb beendet sich der receiver thread auf device 1 auch nicht.

    Langer Rede kurzer Sinn: BufferDeleted darf m_bufferReceiver nur dann auf NULL setzen, wenn die Funktion von dem Objekt aufgerufen wurde, auf die m_bufferReceiver auch zeigt. Das kann man mit folgendem kleinen Patch erreichen:



    Damit läufts bei mir nun seit 3 Tagen intensiven Testens, ohne dass nochmal Speichermangel gemeldet wurde.


    Gruß
    Rainer

  • Was soll ich da sagen...


    Erstmal, ich nehme das zurück - und behaupte vorsorglich das Gegenteil. ;o)


    Zitat von ein eike

    Und ich sach' schon mal: Permashift ist unschuldig! :o)


    ... und dann...


    Langer Rede kurzer Sinn: BufferDeleted darf m_bufferReceiver nur dann auf NULL setzen, wenn die Funktion von dem Objekt aufgerufen wurde, auf die m_bufferReceiver auch zeigt. Das kann man mit folgendem kleinen Patch erreichen:


    Vielen Dank für die präzise Fehlermeldung, für die Analyse und für die Korrektur.


    Ich werd das wohl direkt in eine neue Version münden lassen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!