Храните в памяти более 3 ГБ видеокадров в 32-разрядной операционной системе
Вопрос
На работе у нас есть приложение для воспроизведения фрагментов фильмов OpenEXR размером 2K (2048 * 1556 пикселей).Это хорошо работает..за исключением случаев, когда последовательности превышают 3 ГБ (довольно часто), тогда ему приходится выгружать старые кадры из памяти, несмотря на то, что все машины имеют 8-16 ГБ памяти (которая адресуется через linux BIGMEM).
Кадры должны быть кэшированы в память для воспроизведения в реальном времени.Операционная система представляет собой 32-разрядный дистрибутив Fedora, выпущенный несколько лет назад (обновление до 64-разрядной версии в обозримом будущем невозможно).Ограничение для каждого процесса составляет 3 ГБ на процесс.
В принципе, возможно ли каким-то образом кэшировать более 3 ГБ данных в памяти?Моя первоначальная идея состояла в том, чтобы распределить данные между несколькими процессами, но я понятия не имею, возможно ли это..
Решение
Как насчет того , чтобы создать оперативный накопитель и загрузить на него файл?..предполагая, что RAM-накопитель поддерживает работу BIGMEM для вас.
Вы могли бы использовать несколько процессов:каждый процесс загружает представление файла в виде сегмента общей памяти, а затем процесс воспроизведения поочередно отображает сегменты по мере необходимости.
Другие советы
Одной из возможностей может быть использование mmap.Вы бы сопоставили / разобрали различные части ваших данных в одной и той же области виртуальной памяти.Одновременно вы могли бы сопоставлять только один набор, но до тех пор, пока имеется достаточно физической памяти, данные должны оставаться постоянными.
Боже, какая интересная проблема :)
(Редактировать:О, я только что прочитал сообщение Роба о ram drive...Я был очень взволнован этой проблемой ... но у меня есть еще кое-что предложить, так что я не буду удалять)
Было бы ли это возможно?....
- установите многогигабайтный диск оперативной памяти, а затем
- модифицировать программу, чтобы она выполняла все, что считывает с "диска"?
Я бы предположил, что вся проблема будет в части ram-диска, поскольку размер ram-диска будет зависеть от операционной системы и файловой системы.Возможно, вам придется создать несколько дисков оперативной памяти и переключать ваш код между ними.Или, может быть, вы могли бы настроить полосу RAID-0, установленную на нескольких дисках оперативной памяти.Или, если все еще существуют ограничения операционной системы и вы можете позволить себе сбросить пару тысяч (4k?), установите аппаратный набор RAID-0 с некоторыми из этих новых сверхбыстрых твердотельных накопителей.Или...
Весело, забавно, забавно.
Обязательно проследите за этим!
Я предполагаю, что вы можете изменить приложение.Если это так, то проще всего было бы запустить приложение несколько раз (по одному разу для каждого фрагмента видео объемом 3 ГБ), заставить каждое из них хранить фрагмент видео и использовать другую программу для их синхронизации, чтобы каждое из них по очереди управляло фреймбуфером (или другим видеовыходом).
Возможно, синхронизация будет немного запутанной, но ее можно упростить, если у каждого приложения есть свой собственный фреймбуфер, а программа синхронизации направляет видеоконтроллер на правильный фреймбуфер между кадрами при переключении на следующее приложение.
@dbr сказал:
Существует обзорная машина с абсурдным оптоволоконным RAID-массивом, которая может легко воспроизводить 2K файлов прямо из массива.Проблема связана с рабочими станциями исполнителей, так что это был бы не один RAID-массив стоимостью 4000 долларов, а сотни..
Что ж, если вы можете принять ограничение в ~ 30 ГБ, то, может быть, одного SSD-накопителя объемом 36 ГБ будет достаточно?Я думаю, они стоят ~ 1 тысячу долларов США за штуку, и скорости передачи данных может быть достаточно.Это, возможно, дешевле, чем использование чистой оперативной памяти.Есть в наличии и меньшие размеры.Если ~ 60 ГБ достаточно, вы, вероятно, могли бы обойтись массивом JBOD из 2 за двойную стоимость и пропустить RAID-контроллер.Обязательно смотрите только на варианты твердотельных накопителей более высокого класса - в младшем классе используются прославленные карты памяти.:P