Speichern Sie mehr als 3 GB Videobilder im Speicher unter einem 32-Bit-Betriebssystem

StackOverflow https://stackoverflow.com/questions/41643

  •  09-06-2019
  •  | 
  •  

Frage

Bei der Arbeit haben wir eine Anwendung zum Abspielen von 2K (2048*1556px) OpenEXR-Filmsequenzen.Es funktioniert gut..Abgesehen von Sequenzen, die größer als 3 GB sind (ziemlich häufig), müssen alte Frames aus dem Speicher entladen werden, obwohl alle Maschinen über 8–16 GB Speicher verfügen (der über das Linux-BIGMEM-Material adressierbar ist).

Die Frames müssen im Speicher zwischengespeichert werden, um in Echtzeit wiedergegeben zu werden.Das Betriebssystem ist eine mehrere Jahre alte 32-Bit-Fedora-Distribution (ein Upgrade auf 64-Bit ist in absehbarer Zeit nicht möglich).Die Beschränkung pro Prozess beträgt 3 GB pro Prozess.

Ist es grundsätzlich irgendwie möglich, mehr als 3 GB Daten im Speicher zwischenzuspeichern?Meine ursprüngliche Idee war, die Daten auf mehrere Prozesse zu verteilen, aber ich habe keine Ahnung, ob das möglich ist.

War es hilfreich?

Lösung

Wie wäre es, wenn Sie ein RAM-Laufwerk erstellen und die Datei darauf laden ...Vorausgesetzt, das RAM-Laufwerk unterstützt das BIGMEM-Material für Sie.

Sie könnten mehrere Prozesse verwenden:Jeder Prozess lädt eine Ansicht der Datei als gemeinsam genutztes Speichersegment, und der Player-Prozess ordnet die Segmente dann der Reihe nach nach Bedarf zu.

Andere Tipps

Eine Möglichkeit könnte die Verwendung von mmap sein.Sie würden verschiedene Teile Ihrer Daten demselben virtuellen Speicherbereich zuordnen bzw. die Zuordnung aufheben.Sie können jeweils nur einen Satz zuordnen, aber solange genügend physischer Speicher vorhanden ist, sollten die Daten resident bleiben.

Meine Güte, was für ein interessantes Problem :)

(BEARBEITEN:Oh, ich habe gerade Robs Ram-Drive-Beitrag gelesen ... Das Problem hat mich total begeistert ... aber ich habe noch ein bisschen mehr vorzuschlagen, deshalb werde ich es nicht löschen.)

Wäre es möglich, ...

  1. Richten Sie eine Multi-Gigabyte-RAM-Disk ein und dann
  2. das Programm so ändern, dass es alles von der „Festplatte“ liest?

Ich würde vermuten, dass das größte Problem beim RAM-Disk-Teil liegt, da die Größe der RAM-Disk vom Betriebssystem und vom Dateisystem abhängt.Möglicherweise müssen Sie mehrere RAM-Festplatten erstellen und Ihren Code zwischen ihnen springen lassen.Oder vielleicht könnten Sie ein RAID-0-Stripe-Set über mehrere RAM-Festplatten einrichten.Wenn es immer noch Betriebssystemeinschränkungen gibt und Sie es sich leisten können, auf ein paar Riesen (4K?) zu verzichten, richten Sie ein Hardware-RAID-0-Strip-Set mit einigen dieser neuen, blitzschnellen Solid-State-Laufwerke ein.Oder...

Spaß Spaß Spaß.

Unbedingt nachverfolgen!

Ich gehe davon aus, dass Sie die Anwendung ändern können.Wenn ja, wäre es am einfachsten, die Anwendung mehrmals zu starten (einmal für jeden 3-GB-Videoblock), jedes davon einen Videoblock enthalten zu lassen und sie mit einem anderen Programm zu synchronisieren, sodass jeder die Kontrolle über den Framebuffer übernimmt (bzw anderen Videoausgang).

Die Synchronisierung wird vielleicht etwas chaotisch sein, aber sie kann vereinfacht werden, wenn jede App ihren eigenen Framebuffer hat und das Synchronisierungsprogramm den Videocontroller zwischen den Frames auf den richtigen Framebuffer verweist, wenn zur nächsten App gewechselt wird.

@dbr sagte:

Es gibt ein Testgerät mit einem fantastischen Fibre-Channel-RAID-Array, das problemlos 2K-Dateien direkt vom Array abspielen kann.Das Problem liegt bei den Künstler-Workstations, es wäre also kein RAID-Array für 4.000 US-Dollar, sondern Hunderte.

Nun, wenn Sie ein Limit von ~30 GB akzeptieren können, würde dann vielleicht ein einzelnes 36-GB-SSD-Laufwerk ausreichen?Die kosten meiner Meinung nach etwa 1.000 US-Dollar pro Stück, und die Datenraten könnten ausreichen.Das ist vielleicht günstiger als ein reiner RAM-Ansatz.Es sind auch kleinere Größen erhältlich.Wenn ~60 GB ausreichen, könnten Sie wahrscheinlich mit einem JBOD-Array aus 2 zum doppelten Preis auskommen und auf den RAID-Controller verzichten.Schauen Sie sich unbedingt nur die SSD-Optionen der oberen Preisklasse an – die untere Preisklasse ist mit aufgewerteten Speichersticks gefüllt.:P

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top