Linux 助力《泰坦尼克号》重现
数字领域(Digital Domain)是一家位于加利福尼亚州威尼斯的高级全方位服务制作工作室。在那里,我们为故事片、商业广告以及新媒体应用生成视觉特效。我们的故事片作品包括 《夜访吸血鬼》、 《真实的谎言》、 《阿波罗13号》、 《绝岭雄风》 和 《第五元素》。我们的商业广告作品难以计数,更不用说在此处列出(请访问网站 http://www.d2.com/)。虽然我们以卓越的技术质量而闻名,但我们在对任务的创造性贡献方面也备受尊敬。
电影 《泰坦尼克号》 (由詹姆斯·卡梅隆编剧和导演)于 1997 年 12 月 19 日在影院上映。这个故事设定在泰坦尼克号首次也是最后一次横跨大西洋的航行中,必须在银幕上重现这艘船和这场悲剧的所有辉煌和戏剧性。数字领域被选中为这部要求苛刻的电影制作大量极具挑战性的视觉特效。
数字视觉特效是我们工作的重要组成部分。对于许多数字特效镜头,原始照片图像首先在胶片上拍摄(使用传统的电影方法),然后扫描到计算机中。每个“剪辑”或“场景”都设置为目录集合,其中包含一个“元素”目录,用于存放所有构成最终场景的照片通道。胶片的每一帧都作为单独的文件存储在中央文件服务器上。
然后,数字艺术家开始处理镜头。这项工作可能包括创建全新的元素,例如动画和渲染 3D 模型,或修改现有元素,例如涂抹掉钢丝或隔离原始胶片中感兴趣的区域。
这项工作在艺术家的桌面(通常在 SGI 或 NT 工作站上)完成。一旦完成这项工作的设置,就会对镜头的每一帧重复该过程。这种批处理在设备中的所有可用 CPU 上完成,通常是并行完成的,并且需要分布式文件系统和统一的数据概览。此处理的目标是在可能的情况下保持平台独立性。
最后,一旦创建了所有元素,最终图像就会被“合成”。在此步骤中,对各个元素进行色彩校正以匹配原始照片,进行空间协调和分层以创建最终图像。同样,合成工作的设置通常在桌面 SGI 上完成,而批处理则在整个设备中完成。
由于建造泰坦尼克号的全尺寸模型将非常昂贵,因此只建造了部分全尺寸的船(由制作人员建造),其余场景则使用了微缩模型。在这个模型中,我们添加了场景的其他元素,例如海洋、人、鸟、烟雾和其他细节,使模型看起来像是停靠、航行或沉没在海洋中。为此,我们构建了一个 3D 模型并拍摄了 2D 元素来模拟水下、空中和陆地摄影。
在 《泰坦尼克号》 的制作过程中,该设备大约有 350 个 SGI CPU、200 个 DEC Alpha CPU 和 5 TB 的磁盘,全部通过 100Mbps 或更快的网络连接。
我们的目标始终是在财务和时间限制内创建最高质量的图像。图像创建分两个阶段完成。在第一阶段,数字艺术家在交互式工作站上工作,利用特定的、复杂的软件包和特定的高性能硬件。在第二阶段,工作以批处理模式在尽可能多的 CPU 上处理,而无需考虑其年代、位置或特性,以增强交互性能。
很难改进第一个交互阶段。数字艺术家需要某些软件包,这些软件包并非始终在其他平台上可用。即使有类似的软件包可用,在它们之间进行互操作也会产生巨大的成本。
另一个问题是,某些软件包需要某些高端(通常是 3D)硬件加速。这种质量和性能的 3D 加速可能在其他平台上不可用。
在批处理阶段,更容易找到改进之处,因为基本要求是高带宽计算、对大型存储的访问以及快速网络。如果可以使用合适的应用程序,我们可以改进该部分过程。即使在特定平台上仅可使用应用程序子集的情况下,使用该平台也使我们能够划分工作流程以改善对一般资源的访问。
我们很快得出结论,基于 DEC Alpha 的系统非常适合我们的批处理需求。它们在商品化封装中提供了极高的浮点性能。我们能够将某些浮点密集型应用程序识别为移植目标。Alpha 系统可以配置大量内存和快速网络,且价格极具吸引力。总的来说,DEC Alpha 在性价比方面最符合我们的需求。
下一个问题是使用哪个操作系统。我们有通常的选择:Windows/NT、DEC UNIX 和 Linux。我们知道我们需要在系统上运行哪些程序,因此我们组装了每种类型的系统,并开始评估它们是否适合我们为本次制作需要完成的各种任务。
Windows NT 有几个缺点。首先,我们的标准应用程序(通常在 SGI 硬件上运行)在 NT 下不可用。我们的软件人员可以移植这些工具,但这将非常昂贵。NT 还有其他几个限制;它不支持自动挂载器、NFS 或符号链接,所有这些对于我们的分布式存储架构都至关重要。有第三方应用程序可以填补其中的一些漏洞,但这增加了成本,并且在许多情况下,在处理我们的一般计算需求时性能不佳。
Digital UNIX 表现非常出色,并且很好地集成到我们的环境中。Digital UNIX 的最大限制是成本和缺乏灵活性。我们将购买和重新配置大量系统。为每个系统单独购买 Digital UNIX 将非常耗时且昂贵。Digital UNIX 也没有我们需要的某些扩展,并且无法在可接受的时间范围内提供这些扩展。例如,我们需要与基于 NT 的文件服务器通信,连接两种不常见的磁带驱动器,并允许大量用户在单个系统上;Digital UNIX 均不支持这些。
Linux 非常好地完成了任务。它处理了我们抛给它的每一项工作。在我们的测试阶段,我们利用其模拟 Digital UNIX 应用程序的能力来基准测试标准应用程序,并表明其性能将满足我们的需求。现有设备的灵活性和可用的源代码使 Linux 具有明显的优势。
Linux 的缺点是支持它所需的工程工作量。我们知道,我们需要安排一名工程师来支持这些系统的设置。幸运的是,我们有工程师(作者和系统管理人员的其他成员)在 Intel 系统上的 Linux 方面拥有丰富的经验,并且拥有足够的 Unix 系统经验来进行任何必要的修改。我们仔细测试了各种硬件,以确保所有硬件都与 Linux 完全兼容。
使用的 Linux 发行版是 Red Hat 4.1。当时,Red Hat 发布的是 Linux 2.0.18,它不支持 PC164 主板,因此我们首先要做的就是升级内核。在我们的测试过程中,我们追踪了许多设备问题,并密切关注 2.0 和 2.1 系列内核。我们最终坚持使用 2.1.42 和一些补丁。我们还决定使用带有基于 BSD 的驱动程序的 NCR 810 SCSI 卡和带有 de4x5 驱动程序的 SMC 100MB 以太网卡。事实证明这是一个非常稳定的配置,但是有一个严重的浮点问题导致我们的水渲染软件因意外的浮点异常而崩溃。
事实证明,这是一个棘手的问题,直到 2.0.31-pre5 和 2.1.43 才进入内核源代码。Alpha 内核包含用于捕获浮点异常并根据 IEEE 标准处理它们的代码。该代码未能处理可能生成异常的浮点指令之一。结果,当这种情况发生时,应用程序将因浮点异常而退出。修复后,我们的应用程序在 Alpha 系统上运行非常流畅。
此时,决定从加利福尼亚州新港海滩的 Carrera Computers 购买 160 台 433MHz DEC Alpha 系统。在这 160 台机器中,有 105 台运行 Linux,另外 55 台运行 NT。这些机器通过 100Mbps 以太网相互连接,并连接到我们设施的其余部分。
Carrera 的员工非常乐于助人,为我们的项目提供了不可估量的支持。这种支持从工厂开始,一直到交付、支持和维修的后续支持。
我们创建了一个主磁盘,并将其提供给 Carrera,以及一个初始化脚本,该脚本会将通用主磁盘配置为 160 个唯一身份之一,方法是设置诸如系统名称和 IP 地址之类的参数。Carrera 构建、配置和老化了机器,然后以特殊用户身份登录,导致设置脚本执行。脚本完成后,机器自动关闭。
此过程使 Carrera 和我们都能轻松配置机器。当主机到达时,我们只需插入它们并拨动开关,它们就会在网络上启动。所有 160 台机器都放置在数字领域的一个小房间内的十个 19 英寸机架中。它们都通过切换系统连接到中央屏幕、键盘和鼠标,以便操作员可以坐在房间中央并在房间中任何机器的控制台上工作。
房间在两周内组装完成,包括电气、计算和网络设备的安装。创建初始化脚本所花费的时间非常值得,因为它使机器能够相对轻松地放置到位。此时,我们开始通过 Alpha 的“渲染农场”运行 《泰坦尼克号》 的工作。
此工作分区的第一个部分是模拟和渲染水元素。我们知道水元素在计算上非常昂贵,因此此过程是购买 Alpha 的主要原因之一。
这些作业计算大约 45 分钟,然后生成数百兆字节的图像数据,这些数据将存储在中央存储服务器上。中间数据存储在 Alpha 的本地 SCSI 磁盘上。DEC Alpha 的浮点能力使作业运行速度比我们旧的 SGI 系统快约 3.5 倍。
随着水渲染完成,任务负载随后切换到合成。这些作业更多的是 I/O 密集型,因为它们必须从分布在整个设施的服务器上的磁盘读取元素,并将它们组合成帧以集中存储。即便如此,我们仍然看到这些任务的性能提高了两倍。
我们对结果非常满意。在 6 月初到 8 月底之间,Alpha Linux 系统处理了超过 30 万帧。这些系统每周 7 天、每天 24 小时运行。没有长时间的停机时间,许多机器一次运行了一个多月。
我们使用各种技术解决了许多不同的问题。其中一些问题是 Alpha 特有的,而另一些问题是整个 Linux 社区的问题。希望这些问题能够帮助处于相同境地的其他人,并为 Linux 社区提供反馈。
硬件兼容性,尤其是与 Alpha Linux 的兼容性,仍然是一个问题。Carrera 非常合作,向我们发送了多种卡类型,以便我们可以进行广泛的测试。选择范围足够大,我们能够找到一种有效的组合。我们不得不仔细注意我们正在使用的产品,因为特定的芯片修订版在一个案例中有所不同。
浮点问题(如上所述)是我们必须解决的最棘手的问题。当我们开始这个项目时,我们没想到会发现这种问题。这是一个长期存在的错误,从未被追踪到——我们将这一事实归因于相对较小的 Alpha Linux 社区。
Alpha 的 Linux 软件似乎不如 Intel 处理器的同等软件经过充分测试——同样,这是用户群规模的功能。Alpha Linux 使用 glibc 而不是 libc5 加剧了这种情况,这在我们的代码中以及我们怀疑在其他软件包中引入了问题。
我们有很多与我们设施规模相关的小配置问题。其中大多数只是内核中的参数更改,但它们花了一些力气来追踪。例如,我们不得不增加同时挂载的文件系统数量(64 个不足)。此外,NFS 目录读取预计在一个页面内完成(Intel 上为 4K,Alpha 上为 8K);我们不得不将此数字加倍以支持存储在单个目录中的平均帧数。
Linux Alpha 下的启动管理比我们希望的更困难。我们认为文档需要改进才能使其更有用。启动管理需要对 ARC、MILO 和 Linux 有广泛的了解才能使其工作。ARC 需要输入相当多的数据才能使 MILO 启动。MILO 工作良好并提供了一组不错的选项,但我们从未设法让软重启正常运行。我们一直在与 DEC 的工程师合作以改进其中的一些问题。
当前 Linux 内核中最薄弱的环节似乎是 NFS 实现,这导致了我们的大多数系统崩溃。我们通常同时挂载了大量文件系统,并且这些文件系统经常处于重负载下。当中央服务器死机或出现问题时,Linux 系统无法恢复。这些问题的常见症状是陈旧的 NFS 句柄和内核挂起。当所有服务器都运行时,Linux 计算机可以正常工作。总的来说,NFS 实现工作正常,但它应该更健壮。
Linux 系统在解决我们的问题方面表现非常出色。即使包括我们投入到问题中的工程资源,成本效益也非常积极。Alpha Linux 比最初预期的要稍微困难一些,但 Alpha Linux 的状态正在迅速改善,现在应该好得多。
数字领域将继续改进和扩展我们在这些系统上可用的工具。我们正在促进更多可在 Linux 上使用的商业和内部应用程序的开发。我们正在请求供应商移植他们的应用程序和库。目前,Linux 系统仅用于批处理,但我们希望我们的合成软件能够被我们的数字艺术家交互式使用。该软件不需要专用的加速硬件,Alpha 处理器提供的速度对生产力大有裨益。
故事片和电视视觉特效开发为 Linux 提供了一个高性能、对成本敏感的试验场。我们相信,该平台的通用性和商品定价使其在行业以外的领域具有广泛的应用。Linux 的低入门成本、多功能性和互操作性非常具有吸引力,值得更广泛的调查、实验和部署。我们目前处于我们行业内这项发展的前沿,并希望很快能得到同行的加入。
为什么要冒险使用 Linux?生产视角 作者:Wook 目前,数字领域的核心业务是作为故事片和商业制作行业视觉特效创意和服务的首要供应商。因此,为了满足积极的交付计划和最苛刻的产品质量标准,我们通常对基础设施和方法论的变更采取保守的方法。 在最近几部故事片的制作过程中,我们遇到了设备安装基础不足以满足不断变化的制作计划和动态视觉特效需求(在工作量和复杂性不断增加方面)的情况。我们需要正面迎接这些挑战,而不会影响现有的流程,也不会创建需要重新设计或重新培训的新方法或系统。Linux Alpha 帮助我们以经济高效且快速的方式(罕见的组合)克服了这些挑战。 选择 Linux 作为电影 《泰坦尼克号》 制作流程的一部分,需要满足几个目标。如果我们没有满足这些要求,我们不太可能及时为制作提供足够的计算资源。我们需要与我们的 SGI/Irix 系统进行互操作性和一定程度的兼容性。在之前的努力(《丹特峰》)中,已经证明了与 Linux 的互操作性和兼容性。我们使用现有员工在几天而不是几周内将关键的基础设施元素(以支持分布式处理)移植到 Linux 环境。这些工具的开发人员能够快速部署到 Linux 环境,这表明我们可以在短时间内利用该环境。我们需要性能,因为制作计划以及工作量意味着工作室处理能力增加 100% 或更多。正如我们已经表明 Alpha Linux 提供的性能是我们 SGI 系统的三到四倍(参见主要文章),因此有可能在当前设施的物理限制(空气、电力和占地面积)内提供这种性能提升。 至于成本效益,我们需要两倍以上的 Intel 机器才能达到我们的性能目标。SGI 是一个有效的竞争者,但在每个 CPU 的价格基础上无法与之竞争。我们还需要一个可行的交付、安装和支持结构。Carrera Computers 已经证明了他们有能力在此订单之前及时且经济高效地为我们提供和支持,并且该公司在整个 《泰坦尼克号》 项目中继续提供非凡水平的服务。 总而言之,这种冒险获得了项目质量和时间的巨大回报。由于情况的紧迫性要求我们“跳出框框”思考,因此我们能够在完全兼容我们正常运营模式的框架内交付卓越的解决方案,并使生产力提高了相当于我们之前基础设施的两倍。这种成功带来的满足感实际上弥补了冒着失去工作和职业生涯的风险所带来的压力。 |

Wook 担任软件工程师超过 20 年,在 14 岁时发现了计算机并成为一个十足的极客。多年来,他曾在许多公司工作过,最终在数字领域安顿下来,在那里他被认为不适合担任软件工程师的任务,而被降级为(数字)工程总监的职位。