softhddevice-drm - "cma_alloc failed" - VDR verbraucht Speicher beim Verschieben von Schnittmarken

  • Ok, jetzt hab ichs auch wieder hingekriegt. Der CMA Speicher geht aus. Ich muss aber schon ein paar Schnittmarken setzen und die dann verschieben. Mal sehen, wie man es am besten reproduzieren kann.

  • Also mit skindesigner metrixHD bekomm ich das Verhalten auch relativ schnell reproduziert. Nach anpassen der Schnittmarken von 2-3 Aufnahmen ist der CMA Speicher mit zillerbaers plugin bis auf 10MB aufgebraucht und dann kommen die cma: cma_alloc: alloc failed, req-size:... Meldungen. Allerdings stürzt der VDR nicht ab. Es kommen dann halt bei der Nächsten Aufnahme wieder die Meldungen im Log und das letzte Standbild flackert im Livebild.

  • Mich würde interessieren, ob sich das auch auf einem “schlanken“ Desktop System reproduzieren lässt. Da müsste ja dann der “normale“ Hauptspeicher auch weniger werden. Falls nicht, scheint das Problem doch am Ausgabedevice zu liegen?!

    Es spricht auch der CMA Speicher fürs Ausgabeplugin, da nur das diesen Speicher anspricht... oder sehe ichs falsch?

  • Das mit dem Flackern im Livebild habe ich auch. Auch wenn der Speicher noch da ist.


    EDIT: Das verschwindet, sobald ich umschalte.

  • Nein, noch nicht. Die Ursache des Problems behebt das relativ sicher nicht. Der Speicher darf einfach nicht stetig weniger werden.

  • Die Ursache des Problems behebt das relativ sicher nicht. Der Speicher darf einfach nicht stetig weniger werden.

    Ich bin mir recht sicher das die Reservierung das Problem behebt. Der Speicher wird stetig weniger weil vdr den Stream in den Speicher lädt. Für schnelle Bearbeitung würde ich das nicht anders machen. Das der Speicherbedarf durch Decoder und Deinterlacer unter ARM so schwankt ist das Problem!

  • Warum wird der Speicher für den Stream nicht wieder freigegeben, wenn man die Aufnahme verlässt? Ich würde erwarten, dass dann alles wieder so ist, als wäre nichts geschehen.

    Deiner Theorie möchte ich nicht widersprechen, da ich den Vorschlag nicht probiert habe und es nicht besser weiß.

  • Mein CMA speicher wird erst nach einem Neustart des VDR wieder frei...

  • :wand^^ Ich auch nicht sorry.

  • Nochmal...

    VDR nutzt für sämtliche Videodaten, die über v4l2 laufen CMA/DMA. Also für den Decoder und den Deinterlacer.

    Ebenso für OSD, falls das mit GLES gemacht wird.

    Es stehen bei mir 256MB als CMA zur Verfügung, die an sich völlig ausreichen. Wenn ich Schnittmarken verschiebe, wo legt der VDR diesen Stream ab? Auf CMA vermutlich? Irgendwo ist doch dann ein Leak, wenn der zur Verfügung stehende CMA Bereich nach dem Beenden der Aufnahme jedesmal weniger wird und nicht mehr die Größe vor Starten der Aufnahme erhält?


    M.E. sollte ein normales malloc nicht diese 256MB CMA verkleinern können, die man per Kernelparameter oder Kernelconfig reservieren kann?! Falls das doch so ist, habe ich generell einen Denkfehler.

  • Code
    1. [ 0.000000] Memory: 731604K/1015808K available (7168K kernel code, 915K rwdata, 1996K rodata, 1024K init, 272K bss, 22060K reserved, 262144K cma-reserved, 229364K highmem)

    Heißt für mich, dass 256MB CMA an einem festen Bereich im Speicher reserviert ist, wo es von cedrus benutzt werden kann?!

  • CMA wir von vielen Treibern benutzt. Nicht nur die VE beispielsweise auch PCI-Treiber etc. CMA wird über DMA im Low Mem (< 1G) eingeblendet. Ist der Low Mem belegt kann nix mehr eingeblendet werden. Ist der Speicher freigegeben wird er benutzt. Das macht vdr. Der Speicher für die VE ist zu dem Zeitpunkt freigegeben weil nur ein StillPicture dargestellt wird. Wird auf Play gedrückt wird auf einmal haufenweise Speicher gebraucht. Mit der Reservierung wird wie ich das verstanden habe der Speicher fest für die VE reserviert und vdr kann den nicht benutzen.


    Noch Fragen?

  • Ja :)

    Quote

    CMA wir von vielen Treibern benutzt.

    Klar. Auch bei gcc wird der ganz schnell ganz wenig. Aber das dürfte auf dem Allwinner kein Problem sein, da während der VDR Nutzung auch wirklich nur VDR CMA nutzt. Zumindest niemand anderes im vergleichbarem Umfang.

    Quote

    Ist der Low Mem belegt kann nix mehr eingeblendet werden.

    Warum kann der lowmem so belegt werden, dass kein CMA mehr eingeblendet werden kann, wenn doch 256MB reserviert sind?

    Quote

    Ist der Speicher freigegeben wird er benutzt.

    Welcher Speicher? Generell lowmem oder der für CMA reservierte Teil davon?

    Quote

    Das macht vdr.

    Was macht VDR? CMA belegen und nicht mehr freigeben? Wenn CMA, wo und wie belegt VDR da den Speicher?!

    Quote

    Wird auf Play gedrückt wird auf einmal haufenweise Speicher gebraucht.

    Wäre doch kein Problem, wenn jeder den benutzten Speicher wieder freigegeben hat? Es wird doch auch nicht mehr Speicher angefordert als beim ersten Start des Streams?


    Sorry wenn ich nerve, aber ich wills verstehen.


    Das mit der Reservierung im dts habe ich vor Jahren glaub ich gemacht. Da steht der Speicher wirklich nur der VE zur Verfügung. Aber m.E. muss das anders gelöst werden können.

  • Warum kann der lowmem so belegt werden, dass kein CMA mehr eingeblendet werden kann, wenn doch 256MB reserviert sind?

    Kann ich Dir auch nicht genau sagen. CMA ist reserviert, aber in welchen Häppchen weiss keiner. Also nicht im Low Mem eingeblendet.

    Welcher Speicher? Generell lowmem oder der für CMA reservierte Teil davon?

    Low Mem.

    Was macht VDR? CMA belegen und nicht mehr freigeben? Wenn CMA, wo und wie belegt VDR da den Speicher?!

    Normalen Arbeitsspeicher vorrangig im Low Mem.

    Wäre doch kein Problem, wenn jeder den benutzten Speicher wieder freigegeben hat? Es wird doch auch nicht mehr Speicher angefordert als beim ersten Start des Streams?

    Zu dem Zeitpunkt ist die aktuelle Aufnahme ja nicht geschlossen! Es wird ja eben diese abgespielt. Der Speicher wird von vdr freigegeben wenn die zu schneidende Aufnahme beendet wird.

    Das mit der Reservierung im dts habe ich vor Jahren glaub ich gemacht. Da steht der Speicher wirklich nur der VE zur Verfügung.

    Genau das wird gebraucht!