Stockez plus de 3 Go d'images vidéo en mémoire, sur un système d'exploitation 32 bits

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

  •  09-06-2019
  •  | 
  •  

Question

Au travail, nous avons une application pour lire des séquences de films OpenEXR 2K (2048*1556px).Ça marche bien..à part lorsque les séquences dépassent 3 Go (assez courant), il doit alors décharger les anciennes images de la mémoire, malgré le fait que toutes les machines disposent de 8 à 16 Go de mémoire (qui est adressable via le système Linux BIGMEM).

Les images doivent être mises en cache en mémoire pour être lues en temps réel.Le système d'exploitation est une distribution Fedora 32 bits vieille de plusieurs années (impossible de mise à niveau vers 64 bits, dans un avenir prévisible).La limite par processus est de 3 Go par processus.

Fondamentalement, est-il possible de mettre en cache plus de 3 Go de données en mémoire, d'une manière ou d'une autre ?Mon idée initiale était de répartir les données entre plusieurs processus, mais je ne sais pas si cela est possible.

Était-ce utile?

La solution

Que diriez-vous de créer un lecteur RAM et de charger le fichier dedans...en supposant que le lecteur RAM prend en charge les éléments BIGMEM pour vous.

Vous pouvez utiliser plusieurs processus :chaque processus charge une vue du fichier en tant que segment de mémoire partagée, et le processus du lecteur mappe ensuite les segments tour à tour selon les besoins.

Autres conseils

Une possibilité peut être d'utiliser mmap.Vous mapperez/démapperez différentes parties de vos données dans la même région de mémoire virtuelle.Vous ne pouvez mapper qu'un seul ensemble à la fois, mais tant qu'il y a suffisamment de mémoire physique, les données doivent rester résidentes.

Mon Dieu, quel problème intéressant :)

(MODIFIER:Oh, je viens de lire le message de Rob sur le lecteur RAM... J'ai été tout excité par le problème... mais j'ai un peu plus à suggérer, donc je ne supprimerai pas)

Serait-il possible de...

  1. configurez un disque RAM de plusieurs gigaoctets, puis
  2. modifier le programme pour qu'il fasse tout ce qu'il lit à partir du « disque » ?

Je suppose que la partie disque RAM est l'endroit où se situerait tout le problème, car la taille du disque RAM dépendrait du système d'exploitation et du système de fichiers.Vous devrez peut-être créer plusieurs disques RAM et faire passer votre code entre eux.Ou peut-être pourriez-vous configurer un ensemble de bandes RAID-0 sur plusieurs disques RAM.Ou, s'il existe encore des limitations du système d'exploitation et que vous pouvez vous permettre de perdre quelques milliers de dollars (4k ?), configurez un ensemble de bandes matérielles RAID-0 avec certains de ces nouveaux disques SSD ultra-rapides.Ou...

Du plaisir, du plaisir, du plaisir.

Assurez-vous de suivre!

Je suppose que vous pouvez modifier l'application.Si tel est le cas, le plus simple serait de démarrer l'application plusieurs fois (une fois pour chaque morceau de vidéo de 3 Go), de demander à chacun de contenir un morceau de vidéo et d'utiliser un autre programme pour les synchroniser afin qu'ils prennent chacun le contrôle du framebuffer (ou autre sortie vidéo) à tour de rôle.

La synchronisation sera peut-être un peu compliquée, mais elle peut être simplifiée si chaque application a son propre framebuffer et que le programme de synchronisation pointe le contrôleur vidéo vers le framebuffer correct entre les images lors du passage à l'application suivante.

@dbr a dit :

Il existe une machine de révision avec une matrice RAID Fibre Channel absurde qui peut lire facilement des fichiers 2K directement à partir de la matrice.Le problème vient des postes de travail des artistes, donc ce ne serait pas une matrice RAID à 4 000 $, ce serait des centaines.

Eh bien, si vous pouvez accepter une limite d’environ 30 Go, alors peut-être qu’un seul disque SSD de 36 Go suffirait ?Ceux-ci coûtent environ 1 000 $ chacun, je pense, et les débits de données pourraient être suffisants.C'est très bien peut-être moins cher qu'une approche RAM pure.Il existe également des tailles plus petites.Si environ 60 Go suffisent, vous pourriez probablement vous en sortir avec une matrice JBOD de 2 pour le double du coût et ignorer le contrôleur RAID.Assurez-vous de ne regarder que les options SSD haut de gamme – le bas de gamme est rempli de clés USB glorifiées.:P

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top