存储 频道

探秘"阿凡达"生命背后的集群存储系统

  缩短皮肤纹理文件的渲染时间

  在视觉特效行业,纹理是应用于三维模型以使其看起来更真实的图像。纹理将模型包裹起来,赋予其细节、颜色和阴影,使其看起来不只是一个光滑的灰色模型。“纹理集”是必须应用于特定模型以使其看起来像树、人或动物的所有不同图片。包含对象的大多数渲染操作也可将纹理应用于对象,因此,渲染墙对纹理的需求很高,纹理会被再三地使用。

  随时可能有几千个核心需要一组指定纹理集, 而另外几千个核心可能需要一个重叠组内的贴图,诸如此类。我们为提高纹理提供速度所做的任何工作都会从总体上对渲染墙的性能产生巨大影响。

  任何单一文件服务器都无法交付提供纹理集所必需的带宽,因此我们开发了一个发布流程,该流程专用于在创建新纹理集后为每个新纹理集创建副本。图 1 对此进行了说明。

缩短皮肤纹理文件的渲染时间
图 1) 增加纹理集带宽的旧方法。

  当在渲染墙上运行的作业需要访问纹理集时,它会随机选择一个文件服务器并从该副本访问纹理。此流程使我们可以将纹理负载分摊给多个文件服务器,从而极大地改善了性能。尽管该解决方案要优于依靠单一文件服务器,但发布和复制流程很复杂,并需要进行非常耗时的一致性检查来确保副本保持相同。

  我们开始注意到 NetApp FlexCache® 和 SA600 存储加速器在解决由纹理集导致的性能问题方面是一种更为简单的方法。FlexCache 软件在存储基础结构中创建一个缓存层,自动适应不断变化的使用模式,从而消除性能瓶颈。此外,FlexCache 可使用本地高速缓存卷自动复制和提供基础结构中任何位置的热数据集。

  无需手动将纹理数据复制到多个文件服务器,FlexCache 允许我们动态地缓存当前常用的纹理并通过 SA600 提供给渲染墙。我们对该解决方案进行了测试,结果发现该解决方案在我们的环境中运行得非常好,因此,在《阿凡达》预定完成前的八个月,我们做了一次大胆的尝试:安装了四个 SA600 系统,每个系统都安装有两个 16 GB 性能加速器模块 (PAM)。(PAM 作为高速缓冲存储器以进一步降低延迟。)

缩短皮肤纹理文件的渲染时间
图 2) 使用 NetApp FlexCache、SA600 和 PAM 增加纹理集带宽的改进方法。

  总纹理集大约有 5 TB,但 FlexCache 准备就绪后,我们发现在给定的任意时间里仅大约 500 GB 的纹理集是热数据集。每个 SA600 都有足够的本地磁盘来容纳热数据集,并且当热数据集更改时,无需我们干预,高速缓存会自适应这种变化。总吞吐量超过 4 GB/秒,远远超过我们以前曾经达到的吞吐量。

  通过 FlexCache 缓存纹理是卓越的解决方案。它使作业运行得更快,并简化了管理纹理集的工作。我们进入了四年电影项目的最后一年。如果我们引入 SA600 后遇到无法快速解决的问题,我们可能不得不撤消 SA600 的部署。但是,一星期过去了,我们几乎忘记了它们,直到影片结束才注意到。这正是令 IT 人员感到高兴的事情。

  存储性能对渲染发生的速度有很大影响。存储瓶颈可能会阻碍渲染库的吞吐量。在《阿凡达》制作的最后一年,我们开始深入研究这种瓶颈产生的影响,并在每项作业中增加了许多监控功能和统计信息。

  有许多固定的待办作业等待运行;每天有许多比渲染墙可能实际完成的作业还要多的作业等待渲染。Weta Digital 的“牧马人”团队负责监控作业,以确保每项作业都能按预期进行。我们引入 FlexCache 后的一天早晨,“牧马人”团队的组长来到我的办公室报告一切工作都已完成。FlexCache 运行得实在是太快了,他猜想我们可能打破了某些记录。

0
相关文章