Etwas frist Speicher VDR, Streamdev, SoftHdDevice, ffmpeg, VDPAU? VDR

  • Hi
    gibt es eine vdr version ab der das auftritt


    bei meinem server 64 bit (vdr 2.0.2 , epgsearch, live, streamdev, dvba..)


    ist der speicherverbrauch schon seit Monaten bei 138M RES und steigt auch nicht weiter.

  • Johns, mini73, and UFO... Just for clarity, are you seeing the memleak on a 32bit or 64bit VDR binary? In my case I see it using Debian testing 64bit, running a 64bit VDR binary.


    I see two different things.


    * PlayVideo used 32bit (ARM) and 64bit (AMD64)
    * 64bit TT-6400


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Hi
    gibt es eine vdr version ab der das auftritt


    bei meinem server 64 bit (vdr 2.0.2 , epgsearch, live, streamdev, dvba..)


    ist der speicherverbrauch schon seit Monaten bei 138M RES und steigt auch nicht weiter.


    Bisher nur im Zusammenhang eines Ausgabedevice. Also reiner Server scheinbar nicht.


    Habe mal hier den Patch von reufer laufen lassen.



    Komplettes log kann ich posten, wenn gewünscht. Ich lass mal noch ein paar Stunden laufen.


    Edit: Heute kann ich keinen Fehler feststellen. Der Speichebedarf ist wieder gesunken und auch die Processgröße ist normal.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

    Einmal editiert, zuletzt von johns ()

  • Also im Moment kann ich es nicht reproduzieren.


    Code
    Jun  2 09:46:51 vdr[1740]: [1740] MEM: 0x22f17e0 c'tor
    Jun  2 09:46:55 vdr[1740]: [1747] MEM: 0x22f17e0 realloc(0 -> 184/2048) - (nil) 
    ....
    Jun  2 10:03:14 vdr[1740]: [1747] MEM: 0x22f17e0 realloc(441672 -> 50/441722) - 0x7fa8e8046c20 -> 0x7fa8e8046c20
    ....
    Jun  2 15:46:38 vdr[1740]: [1740] MEM: 0x22f17e0 d'tor 0x7fa8e8046c20 441722


    Wächst an und bleibt, dann konstant. Genau wie erwartet.
    Ich konnte auch kein Anwachsen der Prozessgröße feststellen.


    Ich baue gerade VDR und Plugins auf einem Computer, wo es länger laufen kann.


    Johns

    Dateien

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • So lief etwas länger, ein geringer Anstieg ist zusehen.


    Code
    Jun 10 13:17:13 magic vdr[930]: [938] MEM: 0x2705ed0 realloc(0 -> 2048) - (nil) 
    ...
    Jun 10 20:42:28 magic vdr[930]: [938] MEM: 0x2705ed0 realloc(497792 -> 497851) - 0x7ff070064010 -> 0x7ff070064010


    Danach war aber Schluss. Habe nun mal auf ZDF HD umgeschaltet.


    Johns

    Dateien

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Ich habe bei meinen bisherigen Versuchen (zusammen mit Derek Kelly) auch keinen Hinweis darauf erhalten können, daß das Speicherleck von cTsToPes verursacht wird. Der darin allokierte Speicher wächst bis zu Größe des maximalen Frames an und bleibt dann dort.


    Klaus

  • Ich habe nun einige Tage damit verbracht, zusammen mit Derek Kelly diese Sache zu untersuchen. Hier meine Erkenntnisse.


    Es wurde ein VDR 2.2.0 mit softhddevice-0.6.1rc1-git.f0d31ad3 auf einem 64-Bit System untersucht. Bei jedem Test wurde eine Aufnahme 60 Minuten lang wiedergegeben, danach wurde noch 5 Minuten lang gewartet und dann VDR beendet.


    Mit beiliegendem Patch vdr-2.2.0-dbg-tstopes-13.diff wird, bei ansonsten völlig unverändertem VDR und softhddevice Plugin der Speicherbedarf des 'vdr'-Prozesses einmal pro Minute in die Datei vdr-top-13.log geschrieben. Wie man sehen kann steigt der Bedarf von Anfangs 3.3% ziemlich stetig auf 5.6%. Nach Beendigung der Wiedergabe geht er auf 5.4% zurück. Es bleibt also einiges an Speicher belegt, und je länger man die Wiedergabe laufen lässt, um so mehr Speicher wird belegt (geht linear hoch). vdr-13.log ist das normale VDR-Log dieses Versuchs.


    Der Patch vdr-2.2.0-dbg-tstopes-16.diff macht zusätzlich folgendes: die Verarbeitung von Audio-Daten in PlayTsAudio() in softhddev.c wird komplett stillgelegt und in cDevice::PlayTsVideo() wird nicht mehr PlayVideo() aufgerufen, sondern es wird über cDataLimiter eine mittlere Datenrate der Ausgabe simuliert (ansonsten würde ohne PlayVideo() die Aufnahmedatei mit maximaler Geschwindigkeit gelesen und die Wiedergabe wäre nach wenigen Minuten vorbei). Wie vdr-top-16.log zeigt bleibt der Speicherbedarf während der gesamten Wiedergabe konstant bei 2.7%.


    Wenn ich jetzt nicht irgend einen Denk- oder Programmierfehler gemacht habe, dann heißt das doch, daß das Memory-Leak nicht im VDR-Core-Code liegt, sondern offensichtlich im softhddevice-Plugin. Zumindest habe ich nach all diesen Versuchen keine Idee, was im Core-VDR dafür verantwortlich sein könnte.


    Klaus

  • Ich sehe den Speicherfresser bei 2 Geräten:
    - Banana Pi mit softhddevice + vdpau (32-Bit-System ARM)
    - TT-S2-6400 auf Intel 64-Bit-System


    Den Banana-Pi möchte ich außen vor lassen, denn vdpau dort ist ein ziemliches Gebastel. Mich würde nicht wundern, wenn in gewissen Fällen Puffer verloren gehen könnten. Eine Abfrage von Return-Codes bei ioctls scheint dort die Ausnahme zu sein. ;(


    Auf dem 64-Bit 6400er-System scheint der Speicherverbrauch allerdings ebenso keine Grenzen zu kennen. Mittlerweile bin ich bei 417 MB RES angekommen, und er steigt weiter. An Plugins laufen z.Zt. nur dvbhddevice und remote.


    Bleibt die Frage:
    Wie kann es sein, dass der Speicherbedarf bei einem 32-Bit System mit TT S2-6400 konstant bleibt und bei 64-Bit über alle Grenzen wächst? Wenn man nicht irgendwelche Pointer-Manipulationen macht, sollte so etwas doch gar nicht möglich sein? Vorausgesetzt, es gibt kein Leak in irgendwelchen 64-Bit-Libraries.


    CU
    Oliver

  • Moin,


    Ich will nicht ausschliessen, daß SoftHdDevice ein Speicher Leak hat, ich bin nie dazugekommen alles zutesten.
    Ein einfaches Memory Leak ist es nicht, valgrind hat nie etwas gefunden.
    Ich habe von hinten angefangen und Funktionen auskommentiert, bis keine Funktion vom Plugin mehr benutzt wurde.


    Im Moment kann ich aber diese Situation nicht mehr nachstellen.


    Ich werde nächste Woche mal den VDR Puffer auf 512k minimal Größe setzen, dann sollte er das Bild nicht verfälschen und gucken ob es im SoftHdDevice Audio oder Video Teil liegt.


    Es können auch mehrere verschiedene Fehler sein, daß Ganze ist extrem knifflig.


    Bei solchen Fehlern tippe ich meist auf GCC und hatte bisher immer recht.


    Edit: Kann im Moment den BananaPi nicht testen, der steuert gerade Sachen. Aber den sunxi-libvdpau kann ich ausschliessen, die mallocs habe ich alle 100% überprüft.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • An meinen 2 Cubieboard2 hab ich bisher kein anwachsen festellen können ...

  • Hmm, daß UFO mit einer TT-S2-6400 auf einem Intel 64-Bit-System auch den wachsenden Speicherbedarf beobachtet ist natürlich ernüchternd. Ich habe ja auch ein TT-S2 6400 System, aber halt mit 32-Bit, und habe keinen ständig wachsenden Speicherbedarf. Somit scheint klar zu sein, daß was immer auch die Ursache ist, es nur an dem Unterschied 32-/64-Bit liegen kann.


    UFO: kannst du sagen, ob der Speicher nur bei der Wiedergabe anwächst, oder permanent?


    johns: bitte versteh meine Aussagen nicht falsch. Ich will beileibe nicht die Schuld auf jemand anderen schieben. Nur da ich halt im VDR-Code partout nichts finden kann, was diesen Fehler verursacht, und nach "Abklemmen" der entsprechenden Funktionen von softhddevice der Speicherfraß offensichtlich komplett weg war, lag der Schluß irgendwie nahe.


    Da ich selber kein 64-Bit-System in meinem VDR betreibe kann ich da wohl leider keinen weiteren Beitrag zur Fehlersuche leisten.


    Klaus

  • Das Anwachsen des Speichers hat afaics nichts mit der Wiedergabe zu tun.


    Es passiert auch im Live-Modus, wenn keine Aufnahmen laufen.
    Falls es tatsächlich im vdr-Core wäre, kommen in Anbetracht des Anwachsens des Speicherverbrauchs eigentlich nur EPG-Verarbeitung oder Channel-Scan in Frage.



    CU
    Oliver


    P.S.
    Leider funktionieren alle Memory-Checker, die ich probiert habe, mit VDR ziemlich schlecht. Das mehrfache fork() bringt da so einiges durcheinander.

  • Anbei noch die Ergebnisse zweier Tests. Im Test Nummer 14 wurde nur Video und kein Audio ausgegeben, im Test 15 war es umgekehrt. Der Speicherbedarf wächst in beiden Fällen stetig an, interessanterweise im "nur Audio"-Fall (15) stärker als bei "nur Video" (14).


    Klaus

  • Zum Vergleich wollte ich auf dem 64-Bit System einen - mit identischer Konfiguration gebauten - 32-Bit VDR laufen lassen.


    Leider klappt dies nicht. Nachdem ich die Klippen mit pkgconfig + fontconfig umschifft hatte (64-Bit und 32-Bit Version schließen sich gegenseitig aus - immer nur Ärger mit diesen Sch...tools), ließ sich endlich alles übersetzen und starten. Aber leider kann das 32-Bit dvbhddevice offenbar nicht auf den 64-Bit DVB-Treiber zugreifen...


    Also alles zurück auf 64-Bit.


    Btw, als ich den 64-Bit VDR abgebrochen hatte, war der Speicherbedarf bei ~460 MB.
    Kurz nach dem Neustart der 64-Bit Version ist er nun bei ~280 MB.


    CU
    Oliver

  • I can dedicate 32bit and 64bit boxes to test with if someone can supply patches to help track down this memleak gremlin. I can reproduce the problem with 100% success here.


    Can I have the recording?


    I can't reproduce any memory leak at the moment. I let it run until tomorrow.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Das Anwachsen des Speichers hat afaics nichts mit der Wiedergabe zu tun.


    Es passiert auch im Live-Modus, wenn keine Aufnahmen laufen.
    Falls es tatsächlich im vdr-Core wäre, kommen in Anbetracht des Anwachsens des Speicherverbrauchs eigentlich nur EPG-Verarbeitung oder Channel-Scan in Frage.


    Es ist insgesamt ein sehr komplexes Thema. Valgrind sollte doch mit Threads zurecht kommen. Bzw. ich habe es mit valgrind laufen lassen, man hat dann zwar Ruckelbild (was das Ergebnis verfälscht) und viele Fehler in alsa, aber valgrind fand nichts.


    Ich konnte den Fehler sehen, wenn ich nur auf ARD/ZDF HD stellte und nichts weiter machte.
    Dies klappt aber nun nicht mehr.


    Im Produktionsbetrieb ist es halt schwer zutesten, da EPG und Plugins wie epgsearch mit reinspielen.


    Code
    Zeit bis zur EPG-Aktualisierung (h):  0


    Sollte das EPG ausschalten, hatten wir schon weiter vorne im Thread.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Zitat


    Wenn ich jetzt nicht irgend einen Denk- oder Programmierfehler gemacht habe, dann heißt das doch, daß das Memory-Leak nicht im VDR-Core-Code liegt, sondern offensichtlich im softhddevice-Plugin. Zumindest habe ich nach all diesen Versuchen keine Idee, was im Core-VDR dafür verantwortlich sein könnte.


    Ich kann das Anwachsen auch nachvollziehen mit dem Beispiel von jinx.
    Ich habe mir mal den nur Audioteil vorgenommen, da der wesentlich einfacher ist.


    Nur nachdem ich mir meinen Code angesehen habe, da ist kein einziges malloc/realloc/free wärend das Programm läuft.
    Es wird alles am Start geholt und bein Verlassen dann freigeben.


    Einzig ein alloca habe ich gefunden.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

  • Auf der Suche nach einem malloc debugger habe ich nochmal valgrind ausprobiert.


    Bekommt man den dazu alle malloc/free auszugeben?


    Code
    ==20645== 703,800 (40,800 direct, 663,000 indirect) bytes in 2,550 blocks are definitely lost in loss record 277 of 277
    ==20645==    at 0x4A0926E: realloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==20645==    by 0x390321808A: ???
    ==20645==    by 0x3903218364: ???
    ==20645==    by 0x3902000289: ???
    ==20645==    by 0x3902003C20: ??? Edit = avcodec_decode_audio4:
    ==20645==    by 0x5AD4C32: ???
    ==20645==    by 0x5AC40E6: ???
    ==20645==    by 0x47EDC4: cDevice::PlayTs(unsigned char const*, int, bool) (in /


    Kann dies unser Speicherleck sein?


    Edit:

    Code
    LANG=en_US.UTF-8 valgrind --log-file=valgrind.log --leak-check=full  /usr/bin/vdr -u root --log=3 -v /var/vdr/video.00 --plugin="streamdev-client" --plugin="softhddevice -g 128 -v vdpau -a hw:NVidia,9"


    softhddevice ist gepatched wie in Klaus Post mit nur Tonausgabe und der realloc in remux.c mit debug. Der ist nicht der realloc.
    mit svdrpsend spiele ich die Aufnahme von jinx ab. Mit CTR-C breche ich dann VDR ab. Da ich ja kein Videoausgabe habe.


    Verfälscht der CTR-C das Ergebnis?


    Wobei ich bei eigenen Aufnahmen, Nicht diesen Speicherleak habe.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

    2 Mal editiert, zuletzt von johns ()

  • Ein Fix für einen Audio memory leak ist im GIT.


    Hier 2 memory leaks über die Valgrind im VDR meckert.


    Johns

    Sag mir, wo die Developer sind. Wo sind sie geblieben? . . . . . . . . . . . . . . . . . . . . SoftHdDevice - A software and GPU emulated HD output device plugin.
    Sag mir, wo die Developer sind. Was ist geschehn?


    Client0: Crown CW02 MSI_C847MS-E33 Zotac_GT640_passiv Cine-S2 iMon-MCE / streamdev softhddevice
    Client1: Lian_Li_PC-Q09FB ASRock_H67M-ITX/HT I3-2100 ASUS_ENGT520_passiv / streamdev softhddevice
    Test: Lian_Li_PC-Q09R Asus C60M1-I / streamdev
    Server0: Dockstar TT-S2-3600-USB / streamdev
    Server2: Lian_Li_PC-Q07R Intel_DH61DL G620 WD20EARX 90W PicoPSU Cine-S2+DuoFlex-S2+DuoFlex-CT / streamdev / 22 Watt Verbrauch

Jetzt mitmachen!

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