Храните в памяти более 3 ГБ видеокадров в 32-разрядной операционной системе

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

  •  09-06-2019
  •  | 
  •  

Вопрос

На работе у нас есть приложение для воспроизведения фрагментов фильмов OpenEXR размером 2K (2048 * 1556 пикселей).Это хорошо работает..за исключением случаев, когда последовательности превышают 3 ГБ (довольно часто), тогда ему приходится выгружать старые кадры из памяти, несмотря на то, что все машины имеют 8-16 ГБ памяти (которая адресуется через linux BIGMEM).

Кадры должны быть кэшированы в память для воспроизведения в реальном времени.Операционная система представляет собой 32-разрядный дистрибутив Fedora, выпущенный несколько лет назад (обновление до 64-разрядной версии в обозримом будущем невозможно).Ограничение для каждого процесса составляет 3 ГБ на процесс.

В принципе, возможно ли каким-то образом кэшировать более 3 ГБ данных в памяти?Моя первоначальная идея состояла в том, чтобы распределить данные между несколькими процессами, но я понятия не имею, возможно ли это..

Это было полезно?

Решение

Как насчет того , чтобы создать оперативный накопитель и загрузить на него файл?..предполагая, что RAM-накопитель поддерживает работу BIGMEM для вас.

Вы могли бы использовать несколько процессов:каждый процесс загружает представление файла в виде сегмента общей памяти, а затем процесс воспроизведения поочередно отображает сегменты по мере необходимости.

Другие советы

Одной из возможностей может быть использование mmap.Вы бы сопоставили / разобрали различные части ваших данных в одной и той же области виртуальной памяти.Одновременно вы могли бы сопоставлять только один набор, но до тех пор, пока имеется достаточно физической памяти, данные должны оставаться постоянными.

Боже, какая интересная проблема :)

(Редактировать:О, я только что прочитал сообщение Роба о ram drive...Я был очень взволнован этой проблемой ... но у меня есть еще кое-что предложить, так что я не буду удалять)

Было бы ли это возможно?....

  1. установите многогигабайтный диск оперативной памяти, а затем
  2. модифицировать программу, чтобы она выполняла все, что считывает с "диска"?

Я бы предположил, что вся проблема будет в части ram-диска, поскольку размер ram-диска будет зависеть от операционной системы и файловой системы.Возможно, вам придется создать несколько дисков оперативной памяти и переключать ваш код между ними.Или, может быть, вы могли бы настроить полосу RAID-0, установленную на нескольких дисках оперативной памяти.Или, если все еще существуют ограничения операционной системы и вы можете позволить себе сбросить пару тысяч (4k?), установите аппаратный набор RAID-0 с некоторыми из этих новых сверхбыстрых твердотельных накопителей.Или...

Весело, забавно, забавно.

Обязательно проследите за этим!

Я предполагаю, что вы можете изменить приложение.Если это так, то проще всего было бы запустить приложение несколько раз (по одному разу для каждого фрагмента видео объемом 3 ГБ), заставить каждое из них хранить фрагмент видео и использовать другую программу для их синхронизации, чтобы каждое из них по очереди управляло фреймбуфером (или другим видеовыходом).

Возможно, синхронизация будет немного запутанной, но ее можно упростить, если у каждого приложения есть свой собственный фреймбуфер, а программа синхронизации направляет видеоконтроллер на правильный фреймбуфер между кадрами при переключении на следующее приложение.

@dbr сказал:

Существует обзорная машина с абсурдным оптоволоконным RAID-массивом, которая может легко воспроизводить 2K файлов прямо из массива.Проблема связана с рабочими станциями исполнителей, так что это был бы не один RAID-массив стоимостью 4000 долларов, а сотни..

Что ж, если вы можете принять ограничение в ~ 30 ГБ, то, может быть, одного SSD-накопителя объемом 36 ГБ будет достаточно?Я думаю, они стоят ~ 1 тысячу долларов США за штуку, и скорости передачи данных может быть достаточно.Это, возможно, дешевле, чем использование чистой оперативной памяти.Есть в наличии и меньшие размеры.Если ~ 60 ГБ достаточно, вы, вероятно, могли бы обойтись массивом JBOD из 2 за двойную стоимость и пропустить RAID-контроллер.Обязательно смотрите только на варианты твердотельных накопителей более высокого класса - в младшем классе используются прославленные карты памяти.:P

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top