《阿凡达》打破票房销售纪录,全球票房收入超过27亿美元,而此数字仍在攀升。WetaDigital是负责该部影片视觉特效的公司,在为《阿凡达》制作炫目三维效果时也必须打破自己的一些纪录。在《指环王》三部曲和最近其它影片的制作中,WetaDigital在密集图形渲染方面已表现得相当纯熟,但《阿凡达》的制作仍是一项巨大的技术工程。
WetaDigital挑战了自己的计算和存储基础结构的极限,其程度远超过以往任何时候。2006年开始着手《阿凡达》方面的工作时,WetaDigital刚刚完成《金刚》的制作。那时,WetaDigital的“渲染墙”中大约包含4400个CPU核心,存储大约有100TB。到《阿凡达》制作结束时,公司的渲染墙中大约有35000个CPU核心,存储也达到3000TB。仅渲染墙中的RAM容量现在就已超过《金刚》制作完成时WetaDigital拥有的总磁盘存储容量。
我于2003年开始作为系统管理员在WetaDigital工作,当时最后一部《指环王》影片将要制作完成。自那时起,我便主要担任WetaDigital基础结构小组的组长。我们的小组负责所有服务器、网络和存储方面的相关工作。我们的工作是构建使《阿凡达》得以成功制作的基础结构,以及解决随之而来的任何技术问题。
应对规模问题
尽管在制作《阿凡达》期间WetaDigital经历了巨大增长,但管理规模上的变化没有像我们所担心的那样具有挑战性。其中大部分原因是由于我们有一支经验丰富的团队,他们知道如何相互协作。我们的团队齐心协力,当出现问题时,我们会全身心地投入进去,解决问题。我们工作努力,绝大多数情况下,我们都设法做到积极主动,而不是消极被动。
我们很快就认识到,为了实现《阿凡达》所要求的目标,我们必须采取两大措施。
•建立新的数据中心。WetaDigital一直使用分散在几座大楼中的几个小型机房。新数据中心提供一个中心位置来整合我们在从事《阿凡达》项目期间需要增加的新基础结构。(有关数据中心的详细信息,请参见侧边栏。)
•实施高速光纤。WetaDigital没有集中式园区。我们的园区由分散在惠灵顿郊区的几座独立的大楼组成。我们实施高速光纤环网将这几座大楼与新数据中心连接起来。每座大楼都具有最低10Gbps的冗余连接,同时配备40Gbps的以太通道干线,以备任何时候存储和渲染墙需要相互通信时使用。
这两个要素为我们提供了随数据增长对基础结构进行扩展的物理容量和在两个位置之间自由移动数据的带宽。更新的渲染墙的新服务器基础结构使用HP刀片服务器创建。由于每个刀片服务器包含8个核心和24GB的RAM,我们可为每个机架配置1024个核心和3TB的RAM。新数据中心由多排机架构成,其中每排包含10个机架,因此,我们以10个机架或10240个核心为单位来增扩我们的服务器。我们先放入10000个核心,稍后,再增加另外10000个核心,再等待稍长一点时间,再增加另外10000个核心,之后放入最后5000个核心完成该过程。
我们拥有多供应商存储基础结构,但存储核心由提供大约1000TB容量的NetApp®存储系统组成。到《阿凡达》制作结束时,我们已经用FAS6080群集存储替换了所有旧的FAS980和FAS3050系统。在该项目的后八个月,我们还增加了四个SA600存储加速设备,以解决一个特别棘手的性能问题。
通过自适式高速缓存缩短纹理文件访问时间
在视觉特效行业,纹理是应用于三维模型以使其看起来更真实的图像。纹理将模型包裹起来,赋予其细节、颜色和阴影,使其看起来不只是一个光滑的灰色模型。“纹理集”是必须应用于特定模型以使其看起来像树、人或动物的所有不同图片。包含对象的大多数渲染操作也可将纹理应用于对象,因此,渲染墙对纹理的需求很高,纹理会被再三地使用。
随时可能有几千个核心需要一组指定纹理集,而另外几千个核心可能需要一个重叠组内的贴图,诸如此类。我们为提高纹理提供速度所做的任何工作都会从总体上对渲染墙的性能产生巨大影响。
任何单一文件服务器都无法交付提供纹理集所必需的带宽,因此我们开发了一个发布流程,该流程专用于在创建新纹理集后为每个新纹理集创建副本。图1对此进行了说明。
当在渲染墙上运行的作业需要访问纹理集时,它会随机选择一个文件服务器并从该副本访问纹理。此流程使我们可以将纹理负载分摊给多个文件服务器,从而极大地改善了性能。尽管该解决方案要优于依靠单一文件服务器,但发布和复制流程很复杂,并需要进行非常耗时的一致性检查来确保副本保持相同。
我们开始注意到NetAppFlexCache®和SA600存储加速器在解决由纹理集导致的性能问题方面是一种更为简单的方法。FlexCache软件在存储基础结构中创建一个缓存层,自动适应不断变化的使用模式,从而消除性能瓶颈。此外,FlexCache可使用本地高速缓存卷自动复制和提供基础结构中任何位置的热数据集。
无需手动将纹理数据复制到多个文件服务器,FlexCache允许我们动态地缓存当前常用的纹理并通过SA600提供给渲染墙。我们对该解决方案进行了测试,结果发现该解决方案在我们的环境中运行得非常好,因此,在《阿凡达》预定完成前的八个月,我们做了一次大胆的尝试:安装了四个SA600系统,每个系统都安装有两个16GB性能加速器模块(PAM)。(PAM作为高速缓冲存储器以进一步降低延迟。)
总纹理集大约有5TB,但FlexCache准备就绪后,我们发现在给定的任意时间里仅大约500GB的纹理集是热数据集。每个SA600都有足够的本地磁盘来容纳热数据集,并且当热数据集更改时,无需我们干预,高速缓存会自适应这种变化。总吞吐量超过4GB/秒,远远超过我们以前曾经达到的吞吐量。
通过FlexCache缓存纹理是卓越的解决方案。它使作业运行得更快,并简化了管理纹理集的工作。我们进入了四年电影项目的最后一年。如果我们引入SA600后遇到无法快速解决的问题,我们可能不得不撤消SA600的部署。但是,一星期过去了,我们几乎忘记了它们,直到影片结束才注意到。这正是令IT人员感到高兴的事情。
存储性能对渲染发生的速度有很大影响。存储瓶颈可能会阻碍渲染库的吞吐量。在《阿凡达》制作的最后一年,我们开始深入研究这种瓶颈产生的影响,并在每项作业中增加了许多监控功能和统计信息。
有许多固定的待办作业等待运行;每天有许多比渲染墙可能实际完成的作业还要多的作业等待渲染。WetaDigital的“牧马人”团队负责监控作业,以确保每项作业都能按预期进行。我们引入FlexCache后的一天早晨,“牧马人”团队的组长来到我的办公室报告一切工作都已完成。FlexCache运行得实在是太快了,他猜想我们可能打破了某些记录。
为什么选择NetApp?
我是NetApp的忠实用户已经有很长时间了。第一次使用NetApp是在90年代末网络公司兴起之时,当时我在阿拉斯加一家ISP工作。那次使用经历让我印象非常深刻,以至于后来在其他几家公司我都引入了NetApp存储。当我来到WetaDigital时,我高兴地发现该公司已经在使用NetApp存储了。
对于像WetaDigital这样的公司,发生故障也会泰然处之,因为没有任何其它公司使用与WetaDigital完全一样的方式来实施基础结构。关键在于,当故障发生时,你需要有供应商来帮助你修复它。即使我在规模较小的公司工作时,NetApp都始终有专人花时间同我一起研究问题,直到问题解决为止。你可能会认为这只是公事公办罢了,但依我的经验来看,能做到这种程度的公司并不多见。
存储可能很复杂。NetApp技术使存储尽量简单。当然,我觉得NetApp也有不足之处,但跟我所知道的其它公司相比,NetApp不仅能做出易于使用的多功能产品,而且能够给予客户强有力的支持。这就是我们为什么继续选择NetApp的原因。