Хранить более 3 ГБ видеокадров в памяти, на 32-битной ОС

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

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

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


person dbr    schedule 03.09.2008    source источник


Ответы (5)


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

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

person Rob Walker    schedule 03.09.2008
comment
метод множественной обработки использовался Adobe Premiere CS4 до того, как он перешел на 64-разрядную версию. - person phuclv; 18.11.2016

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

person KeithB    schedule 03.09.2008

Боже, какая интересная задачка :)

(РЕДАКТИРОВАТЬ: О, я только что прочитал сообщение Роба о ram-драйве... Меня очень взволновала эта проблема... но есть еще кое-что, что можно предложить, поэтому я не буду удалять)

Можно ли...

  1. установить многогигабайтный RAM-диск, а затем
  2. изменить программу, чтобы она читала все с «диска»?

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

Веселье, веселье, веселье.

Обязательно следите!

person Stu Thompson    schedule 03.09.2008

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

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

person Adam Davis    schedule 03.09.2008

@dbr сказал:

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

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

person Stu Thompson    schedule 05.09.2008