문제

직장에는 2K(2048*1556px) OpenEXR 영화 시퀀스를 재생하는 애플리케이션이 있습니다.잘 작동한다..3GB를 초과하는 시퀀스(매우 일반적인 경우)를 제외하고는 모든 시스템에 8~16GB의 메모리가 있음에도 불구하고 메모리에서 이전 프레임을 언로드해야 합니다(리눅스 BIGMEM 항목을 통해 주소 지정 가능).

실시간으로 재생하려면 프레임을 메모리에 캐시해야 합니다.OS는 몇 년 된 32비트 Fedora Distro입니다(가까운 미래에는 64비트로 업그레이드가 불가능함).프로세스당 제한은 프로세스당 3GB입니다.

기본적으로 3GB 이상의 데이터를 메모리에 캐시하는 것이 어떻게든 가능할까요?내 초기 아이디어는 여러 프로세스 간에 데이터를 분산시키는 것이었지만 이것이 가능한지 잘 모르겠습니다.

도움이 되었습니까?

해결책

RAM 드라이브를 생성하고 거기에 파일을 로드하는 것은 어떻습니까?RAM 드라이브가 BIGMEM 기능을 지원한다고 가정합니다.

여러 프로세스를 사용할 수 있습니다.각 프로세스는 파일 보기를 공유 메모리 세그먼트로 로드하고 플레이어 프로세스는 필요에 따라 세그먼트를 차례로 매핑합니다.

다른 팁

한 가지 가능성은 mmap을 사용하는 것입니다.데이터의 다른 부분을 동일한 가상 메모리 영역에 매핑/매핑 해제합니다.한 번에 하나의 세트만 매핑할 수 있지만 물리적 메모리가 충분한 한 데이터는 계속 상주해야 합니다.

정말 흥미로운 문제네요 :)

(편집하다:아, 방금 Rob의 램 드라이브 게시물을 읽었습니다... 문제가 너무 흥미로워서... 제안할 내용이 좀 더 있으므로 삭제하지 않겠습니다.)

가능할까요...

  1. 멀티 기가바이트 램 디스크를 설정한 다음
  2. "디스크"에서 읽는 모든 작업을 수행하도록 프로그램을 수정하시겠습니까?

램 디스크의 크기는 OS와 파일 시스템에 따라 다르기 때문에 램 디스크 부분에 모든 문제가 있을 것이라고 생각합니다.여러 개의 램 디스크를 생성하고 그 사이에 코드를 점프해야 할 수도 있습니다.아니면 여러 램 디스크에 RAID-0 스트라이프 세트를 설정할 수도 있습니다.또는 여전히 OS 제한이 있고 몇 천 달러(4k?)를 떨어뜨릴 여유가 있는 경우 새롭고 빠른 SSD를 사용하여 하드웨어 RAID-0 스트립 세트를 설정하십시오.또는...

재미있고, 재미있고, 재미있어요.

반드시 후속조치를 취하세요!

나는 당신이 응용 프로그램을 수정할 수 있다고 가정합니다.그렇다면 가장 쉬운 방법은 응용 프로그램을 여러 번 시작하고(3GB 비디오 청크마다 한 번씩) 각 응용 프로그램에 비디오 청크를 보관하도록 한 다음 다른 프로그램을 사용하여 동기화하여 각자가 프레임 버퍼를 제어하도록 하는 것입니다(또는 다른 비디오 출력)을 차례로 실행합니다.

동기화는 다소 지저분할 수 있지만 각 앱에 자체 프레임 버퍼가 있고 동기화 프로그램이 다음 앱으로 전환할 때 프레임 사이에서 비디오 컨트롤러를 올바른 프레임 버퍼로 지정하면 단순화될 수 있습니다.

@dbr이 말했습니다.

어레이에서 직접 2K 파일을 쉽게 재생할 수 있는 터무니없는 파이버 채널 RAID 어레이를 갖춘 검토 시스템이 있습니다.문제는 아티스트 워크스테이션에 관한 것이므로 4000달러짜리 RAID 어레이 하나가 아니라 수백 개가 될 것입니다.

글쎄, 최대 30GB의 제한을 수용할 수 있다면 단일 36GB SSD 드라이브로 충분할까요?제 생각에는 각각 ~US$1,000 정도이고 데이터 요금은 충분할 것 같습니다.이는 순수한 RAM 접근 방식보다 훨씬 저렴할 수도 있습니다.더 작은 사이즈도 있습니다.~60GB가 충분하다면 두 배의 비용으로 2개의 JBOD 어레이를 사용하고 RAID 컨트롤러를 건너뛸 수 있습니다.고급 SSD 옵션만 살펴보십시오. 저가형 SSD 옵션은 미화된 메모리 스틱으로 가득 차 있습니다.:피

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top