Neue Aufnahmeverteilungsstrategie für VDR Aufnahmen

  • Unten gibts neue Version


    Ich habe es schon ein paarmal mitbekommen das Leute den Wunsch hatten, dass der VDR die Videoverzeichnisse nach ihrerer Reihenfolge füllen soll. Also erst video0+n füllen wenn video0+n-1 voll ist.
    Bei mir ist es so das ich 2 Platten habe. Allerdings soll der VDR nur auf die 2. Platte schreiben wenn die erste Platte voll ist. Im jetzigen Zustand vom VDR ist es so, dass alle Aufnahmen über alle Platten verteilt werden.


    Und entgegen der Aussage dass solch eine Änderung im VDR kompliziert ist, gebe ich euch nun die Codezeilen die bei mir funktionieren, ob es bei auch auch so ist teilt ihr mir bitte mit ;)


    Funktion des Patches:
    Es wird die Liste der verfügbaren Video-Verzeichnisse durchgeblättert. Beim ersten Verzeichniss welches noch mehr wie 2048MB verfügbar hat, wird das durchblättern beendet und der VDR nimmt dieses zum Aufzeichnen.
    Was kann im schlimmsten Fall passieren. alle Verzeichnisse sind voll wie der VDR darauf reagiert weiß ich nicht, kann aber nicht garantieren dass es zu keinen Problemen beim Aufnehmen kommt. Der VDR denkt sich in diesem Fall dass das BaseVideo Verzeichnis am leersten ist. Wenn das dann aber zu klein ist, wird er warscheinlich ganz normal löschen anfangen.



    PS: Ist mein erster Patch für die Öffentlichkeit, ich habe ihn auch nicht getestet, ich habe ihn einfach aus dem orginal und dem geänderten erstellt. Falls er nicht geht bitte melden.....
    wie man patscht steht im FAQ udn Wiki (glaube ich)



    MFG
    Ulrich Escher

  • ach ich kann nicht ohne Feedback leben ;)


    *hochschieb*

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Also die von mir verwendeten Werte kann soweit ich nun einigermaßen weiß auf mindestens 512 und 20 gesenkt werden.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Hallo BlackKing,


    Zitat

    Original von BlackKing
    ach ich kann nicht ohne Feedback leben ;)


    Na dann wollen wir mal:


    Ist es möglich das ganze etwas mehr einstellbar zu machen?


    - Aufnahme immer auf Platte_x beginnen
    - 2 Aufnahmen auf verschiedenen Platten
    - auch index.vdr & Co auf die Aufnahmeplatte
    - Je nach Verzeichniss (Serie, Film ...) auf Platte_x beginnen


    Dann würde ich endlich mein Nachbearbeitungsscript (s.Anlage) endlich in Rente schicken können.


    Hardy

  • Zitat

    Original von HFlor
    Hallo BlackKing,



    Na dann wollen wir mal:


    THX ;)

    Zitat

    Ist es möglich das ganze etwas mehr einstellbar zu machen?


    - Aufnahme immer auf Platte_x beginnen


    Also wenn eine Aufnahme ansteht erstmal probieren ob videodir_x genügend frei hat.

    Zitat


    - 2 Aufnahmen auf verschiedenen Platten


    Wie meinst du das? Wenn mehrere Aufnahmen parallel laufen, damit dann die Belastung der Festplatten minimiert werden? Oder meinst du wenn noch3 GB frei sind das er dann nicht auf jede Platte von jedem Film 1,5GB schreibt. Dadurch wären ja die Aufnahmen defragmentiert. Sinnvoler wäre es dann wenn er einen Film auf Platte 1 macht und den anderen Film gleich auf Platte2 anfängt. Dadurch wäre dann jeder Film noch zusammen.


    Zitat


    - auch index.vdr & Co auf die Aufnahmeplatte


    Also am besten gleich so, dass der komplette Ordner per Symlink verlinkt wird und nicht nur die einzelnene Dateien. Das wäre dann aber sicherlich nicht in 5 Zeilen gelöst.

    Zitat


    - Je nach Verzeichniss (Serie, Film ...) auf Platte_x beginnen


    I don't know wie man das realsiert

    Zitat

    Dann würde ich endlich mein Nachbearbeitungsscript (s.Anlage) endlich in Rente schicken können.


    Sieht auch interessant aus.

    Zitat

    Hardy




    Ich würd esowas schon gerne realisieren, allerdings habe ich gerade viel zu tun, und es könnte sich dann ein paar Wochen hinziehen. Falls jemand anderes es nicht verwarten kann, kann es es auch gerne machen. Allerding sollte er mir dan bescheid geben nicht das ich dann meine ganze wertvolle Zeit in den Sandgesetzt habe.....


    Mfg
    Ulrich

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Hi!


    Dieser Patch liest sich genau wie etwas was ich suche.


    Gibt es einige Rückmeldungen, ob es funktioniert wie erwartet? Es wäre Super, wenn jemand über seine Erfahrungen berichten könnte.


    Danke!
    Tschau
    Tueftler17

  • funktioniert 1a so wie es aktuell ist. Das einzigste was sein könnte ist: das <2GB auf video1 -videox frei bleiben. Dies kannste aber damit umgehen das du an der stelle wo 2048 das 2. mal vorkommt (also in der While schleife) den wert auf ca. 500 erniedrigst.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • wart mal nomal kurz 10 Minuten. Ich arbeite mal den Patch nomal so aus, dsa er auf jedenfall in dieser Form ohne Probleme arbeitet, und das er fals der Speicherplatz zu ende das sich dann die Funktion gleich verhält wie davor. Ich melde mich nomal ....

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Hi!


    Das ist ja super!


    Ein paar Minuten Warten ist eh kein Problem, bin gerade auf der Arbeit und nutze den dienstlichen I-Net-Zugang privat ;)


    Ich muss als nächstes sowieso erstmal meine Festplatten umstrukturieren, ich habe zur Zeit 3 120-GIg-Platten als Raid5 organisiert, das funktioniert aber leider überhaupt nicht. Aufnahmen die aufs Raid gespeichert werden, sind nicht in Ordnung, offensichtlich ist das software-Raid5 zu langsam.


    Daher jetzt Deine Lösung, dann verliere ich im Notfall wenigstens nicht alles.


    Tschau
    Tueftler17

  • kein problem dauert wohl doch noch paar Minuten länger: Da mir die praktische erfahrung in C++ fehlt, muss ich noch was ungefählriches "pfuschen"


    Programmierer Witz: "Wart kurz ich habs gleich"


    EDIT: Sehr interessant:

    Code
    vdrserver 2005-05-23.15:50.51.51.rec # pwd
    /video0/Eure_letzte_Chance/2005-05-23.15:50.51.51.rec
    vdrserver 2005-05-23.15:50.51.51.rec # ls -alhi
    total 4.0K
    228520 drwxr-xr-x  2 root root 104 May 23 16:27 .
    228510 drwxr-xr-x  3 root root  96 May 23 16:27 ..
    228552 lrwxrwxrwx  1 root root  61 May 23 16:27 001.vdr -> /video0/Eure_letzte_Chance/2005-05-23.15:50.51.51.rec/001.vdr
    228553 -rw-r--r--  1 root root 114 May 23 16:27 summary.vdr
    vdrserver 2005-05-23.15:50.51.51.rec #

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

    Einmal editiert, zuletzt von BlackKing ()

  • Zitat

    Original von tueftler17
    Hi!


    Verstehe ich das richtig, dass der link auf sich selbst verweist? Wenn ja, wo ist dann die Aufnahme geblieben??


    Tschau
    Tueftler17


    Den Fehler hatte ich gleich wieder weg, aber den fand ich so witzig, da musste ich ihn einfach Posten ;)


    Ich kann aber garantieren das das eine Ausnahme war, musst keine Angst haben..

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • OK hier mal die nächste Version:


    Was hat sich geändert: Falls in jedem Verzeichnis zu weniger wie definiert frei ist, wird auf den orginal Code zurückgegriffen.


    Diese Version verursacht zwar keine Fehler und verhindert den größten Teil von Aufnahme fragmentierung. Verhindert dies aber nicht komplett. Ich verspreche euch es wird in ein paar Wochen auch eine Version geben die "mehr" verhindert das Aufnahmen fragmentiert werden.
    Fragmentierung fidnet in dieser Version statt wenn ein Wechsel von einem Aufnahme verzeichnis in das andere Statt findet. Oder wenn Aufnahmen gelöscht werden. Und der vorhandene Platz wo die Aufnahmen waren gefüllt wird.


    Vorsicht: ich habe net getstet was passiert wenn die Platte zu voll ist, aber es dürfte nix passieren. Davor hats auch funktioniert, und der fehle mit dem "Symlink loop" dürfte au nimmer vorkommen. Zur sicherheit werde ich es testen, alledrings dauert es bis man 40 GB aus /dev/null kopiert ;)


    Mfg
    Ulrich Escher

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

    Einmal editiert, zuletzt von BlackKing ()

  • Zitat

    Original von tueftler17Aufnahmen die aufs Raid gespeichert werden, sind nicht in Ordnung, offensichtlich ist das software-Raid5 zu langsam.


    Ist jetzt leicht OT, vielleicht machste 'nen neuen Thread auf.


    Was soll denn an SW-Raid5 zu langsam sein? Das funktioniert hier wunderbar!


    Und so langsam kann Deine CPU garnicht sein, als daß sie mit dem Berechnen nicht nachkommt.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • BlackKing:


    Runtergeladen habe ich es schon, ich werds die Tage einbauen und ausprobieren.


    Danke!


    knebb:
    Wahrscheinlich hast Du Recht, aber vielleicht hast Du einen Tipp, was ich posten soll..


    Fakten:
    - Board GA-6BX7, 256mb Ram
    - Pentium3 mit 650Mhz
    - 1*FF, 1*SS2
    - Basis ct-vdr mit kernel 2.4.27-ctvdr-1
    - es läuft vdr 1.3.23
    - 3 unterschiedliche Platten mit jeweils ca. 120 Gig
    - hdparm multcount 16, IO_support 0, ummaskirq 0, using_dma 1, readahead 8
    - jeweils am Anfang 10G für Betriebssystem, eine händische Spiegelung und einmal (ja ich weiss ist zuviel) 10G Swap
    - die restlichen 110 Gig als Raid5 konfiguriert, mit mdadm, chunk Size 64K, left-symmetric (was immer das ist)
    - formatiert als reiserfs, ohne spezielle Optionen
    - als 4. Platte (hdd) zur Zeit statt DVD auch ne 120er, auch reiserfs



    Aufnahmen gehen perfekt auf der hdd. Wenn ich was auf die md0 schreiben lassse, ruckelt es furchtbar bei der Wiedergabe. Alle logs sind sauber.


    Wenn Du eine Idee hast, was ich noch posten soll, damit man der Sache auf die Spur kommen könnte, dann mache ich gerne einen Thread auf. Ich habs nur selber aufgegeben und wollte jetzt die Platten teilen und mit dem Script aus diesem Thread das Risiko minimieren..


    Tschau
    Tueftler17

  • Hi, tut es nicht einfach auch ein:


    Code
    +        int MaxFree = 0;
    +        do {
    +              int Free = FreeDiskSpaceMB(Dir.Name());
    +              if (Free > MaxFree) 
    +              {
    +                 Dir.Store();
    +                 MaxFree = Free;
    +              }
    +        } while (Dir.Next() && MaxFree < 2048) ;


    an Stelle von:


    Code
    -        int MaxFree = Dir.FreeMB();
    -        while (Dir.Next()) {
    -              int Free = FreeDiskSpaceMB(Dir.Name());
    -              if (Free > MaxFree) 
    -                 Dir.Store();
    -                 MaxFree = Free;
    -                 }
    -              }



    hab es nur auf nen Blatt Papier durchgespielt, und nem kleinen Perl-Beispiel.
    Würd mich mal interessien ob es geht.


    Vorteile:
    - automatische Initalisierung
    - keine redundanten Funktionsaufrufe
    - Parameter nur an einer Stelle
    Nachteil:
    - nach wie vor wird davon ausgegangen, das mind. ein Verz. da ist


    Na denne
    der Martin

  • Hi


    ähm Also dein Code ist sogar noch schlechter wie meiner. In diesen Codeteil kommt er nur rein wenn MaxFree eh schon kleiner ist wie z.B. 2048MB. Von dem her braucht man so eine Bedingung da definitiv nicht. Da sie immer wahr wäre. Aber der Compiler weiß das auch, und ich vermute am Ende würde sogar der gleiche Code rauskommen.


    PS: Aber ich habe gerade gesehen das bei mir beim if eine Klammer fehlt.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • so nomal jetzt müsste es passen. habe auch getestet was passiert wenn alle Platten wenigeer wie 2GB haben. Dann läufts nach Schema F ab: Die Platte wo am meisten rei ist wird verwendet und wenn nur noch 512MB frei sind wird gelöscht....


    So neue Version weil nun habe ich mal selbst gepatch und bemerkt das eine leerzeile falsch war und deswegen ga es einen hunk oder so. Jetzt ist er aber erstmal fehlerfrei. Vorschläge was man ändern könnte, nehme ich gerne an ;)

  • Hi,


    also eine do{}while- schleife wird immer mindestens einmal betreten. Weil dann Free>0 wird Maxfree (wurde doch eben mit 0 initalisiert oder seh ich das falsch - und das wäre nach Adam Riese *Gott hab in selig - kleiner als 2048 ) mit freiem Platz des 1. verzeichnis initalisiert - also genau wie im original, nur ohne extra init-Statement. Wenn Free 0 sein sollte, wird nix gemacht(aber dann passt dort eh nix mehr drauf) und es wird versucht mit dem 2.Verzeichnis das ganze zu initalisieren.
    Ok nach dem Init wird die Schleife nur dann wiederholt wenn es ein nächstes Verzeichnis gibt (wie original) UND wenn wenn nicht mindestens 2048MB freie Kapazität gefunden wurden. D.h. er bricht ab wenn er 2GB gefunden hat, anderen falls such er weiter nach maximalem Speicherplatz.


    Um die init auch dann zu gewährleisten wenn es nur Platten gibt mit 0MB freiem Platz hilft folgende Abänderung:



    Also sollte ich die Anforderung falsch verstanden haben, dann sorry (und erklär mir bitte den Fehler), ansonsten möchte ich deine bessere Lösung sehen.


    Plugg

Jetzt mitmachen!

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