【问题标题】:Store more than 3GB of video-frames in memory, on 32-bit OS在 32 位操作系统上在内存中存储超过 3GB 的视频帧
【发布时间】:2010-09-07 16:26:27
【问题描述】:

在工作中,我们有一个应用程序可以播放 2K (2048*1556px) OpenEXR 电影序列。它运行良好.. 除了超过 3GB 的序列(很常见)之外,它必须从内存中卸载旧帧,尽管事实上所有机器都有 8-16GB 内存(可通过 linux BIGMEM 东西寻址)。

帧必须缓存到内存中才能实时播放。该操作系统是使用了几年的 32 位 Fedora Distro(在可预见的未来无法升级到 64 位)。每个进程的限制是每个进程 3GB。

基本上,是否有可能以某种方式在内存中缓存超过 3GB 的数据?我最初的想法是在多个进程之间传播数据,但我不知道这是否可能..

【问题讨论】:

    标签: linux memory 32-bit


    【解决方案1】:

    一种可能是使用 mmap。您可以将数据的不同部分映射/取消映射到同一虚拟内存区域。一次只能映射一组,但只要有足够的物理内存,数据就应该保持常驻。

    【讨论】:

      【解决方案2】:

      如何创建一个 RAM 驱动器并将文件加载到其中...假设 RAM 驱动器支持 BIGMEM 内容。

      您可以使用多个进程:每个进程将文件视图加载为共享内存段,然后播放器进程根据需要依次映射这些段。

      【讨论】:

      • Adobe Premiere CS4 在迁移到 64 位之前使用了多进程技术
      【解决方案3】:

      我的,多么有趣的问题:)

      编辑:哦,我刚刚阅读了 Rob 的 ram drive 帖子...我对这个问题感到非常兴奋...但是还有更多建议,所以我不会删除)

      有没有可能……

      1. 设置一个千兆字节的内存磁盘,然后
      2. 修改程序以完成它从“磁盘”中读取的所有内容?

      我猜 ram 磁盘部分是所有问题所在,因为 ram 磁盘的大小将取决于操作系统和文件系统。您可能必须创建多个 ram 磁盘并让您的代码在它们之间跳转。或者,也许您可​​以在多个 ram 磁盘上设置 RAID-0 条带集。或者,如果仍然存在操作系统限制,并且您可以承受掉几个大(4k?),设置一个硬件 RAID-0 条带集,其中包含一些新的超快固态驱动器。或者……

      有趣,有趣,有趣。

      一定要跟进!

      【讨论】:

        【解决方案4】:

        我假设您可以修改应用程序。如果是这样,最简单的方法是多次启动应用程序(每 3GB 视频块启动一次),让每个人都拥有一个视频块,然后使用另一个程序同步它们,以便它们各自控制帧缓冲区(或其他视频输出)依次。

        同步可能会有点混乱,但如果每个应用都有自己的帧缓冲区并且同步程序在切换到下一个应用时将视频控制器指向帧之间的正确帧缓冲区,则可以简化同步。

        【讨论】:

          【解决方案5】:

          @dbr 说:

          有一台带有荒谬的光纤通道RAID阵列的评论机,可以轻松地直接从阵列播放2K文件。问题在于艺术家工作站,所以它不会是一个 4000 美元的 RAID 阵列,而是数百个......

          好吧,如果您可以接受 ~30GB 的限制,那么单个 36GB SSD 驱动器可能就足够了?我认为这些价格约为 1000 美元,数据速率可能就足够了。这可能比纯 RAM 方法便宜。也有更小的尺寸可供选择。如果 ~60GB 就足够了,您可能会以双倍的成本购买 2 个 JBOD 阵列,并跳过 RAID 控制器。确保只查看高端 SSD 选项 - 低端充满了美化的记忆棒。 :P

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-20
            • 1970-01-01
            • 1970-01-01
            • 2011-09-13
            • 2010-10-12
            • 2012-12-02
            • 2014-07-05
            • 1970-01-01
            相关资源
            最近更新 更多