企鹅与恐龙

作者:Adam J. Thornton

虽然 Linux 最初是在 Intel x86 架构上诞生的,并且至今仍在该架构上拥有强大的根基,但它具有高度的可移植性。Linux 几乎可以在所有设备上运行,从高端的 SGI 工作站到低端的 Palm Pilots、Psion PDA 和微小的嵌入式微控制器。

Linux 的世界变得更大了。它现在可以在 IBM System/390 大型机上运行。没错;现在有一个 Linux 移植版可以用于 IBM System/390 大型机架构。一旦您启动它,它的工作方式就和您期望的任何其他 Linux 系统一样。事实上,有 两个 移植版:一个是 IBM 的,它仅在相对较新的 System/390 机器上运行,并且是秘密开发的;另一个是 Linas Vepstas 的 “Bigfoot” 移植版,它也在较旧的 System/370 机器上运行,并且是作为一个适当的开源项目完成的。当 IBM 投下重磅炸弹时,Bigfoot 已经非常接近运行了——它可以启动内核并加载 /bin/sh。这两个项目的协调是一个持续且有些尖锐的问题。

大型机上的 VM

我可以听到一些读者困惑地挠头。如果您有一台大型机,您大概已经为其配备了一个非常出色且极其昂贵的操作系统,对吧?在这种机器上运行 Linux 意味着要关闭一台几乎可以肯定是极其昂贵且可能负载很高的生产机器——这不是一个好主意。

嗯,第一部分是真的。但是,如果您拥有最新的 S/390 任何版本的 VM(虚拟机),您完全不必中断服务就可以在您的生产机器上试用其他操作系统。如果您是从 Linux/x86 世界来到这里的,您可能听说过 VMWare,它可以有效地拆分您的 PC,让您在 Linux 下的虚拟机中启动 Windows NT(如果您还没有听说过,您应该了解一下——这是一个非常酷的应用程序)。嗯,IBM 大型机是第一个做到这一点的。

VM 操作系统(也称为 “hypervisor”,就像类固醇上的 supervisor)从一开始就被设计为专门用于此目的;本质上,在 VM 下,每个用户都获得了他或她自己的机器副本。它看起来完全像一台 System/390,配备了连接的外围设备,并且用户拥有(实际上是 root 用户)该虚拟机。当然,在幕后,外围设备是模拟的并且由 VM 管理,硬件设计有 VM 利用的虚拟化辅助功能。这类似于 VMWare 通过将每个磁盘模拟为 Linux 文件系统中的文件来提供 “磁盘访问” 的方式。如果适合您的需求,VM 也可以简单地呈现一个实际的物理设备。

当您意识到您可以在自己的虚拟机中运行 VM 时,这变得 真的 非常有趣。事实上,VM 的一个非常常见的用途是二级测试新系统;也就是说,在实际在裸机上运行的 VM 实例下运行。这使您可以确保所有现有程序仍然可以工作。只有当您解决了新系统中的所有错误后,您才需要短暂地关闭机器,然后重新启动它,让新系统在实际机器而不是虚拟机上运行。您可以确信它会工作,因为您已经对其进行了广泛的测试。

您可以使用 VM 做其他技巧。IBM 的大型机摇钱树是 OS/390,以前称为 MVS。您可以在虚拟机中运行 OS/390——或 VSE,第三个大型机操作系统——尽管您不能在 OS/390 下运行客户操作系统。因此,VM 让您可以对 OS/390 执行与 VM 本身相同的测试升级过程。虚拟机不必反映物理机器的硬件配置:虚拟机可以是多处理器机器,即使在单处理器真实系统上也是如此,反之亦然。为每台机器提供您认为它应该拥有的内存量及其自己的一组打印机、磁带、LAN 适配器等等。

这是一个非常实用的功能,以至于 IBM 在其较新的机器中包含了一个硬件功能,该功能充当微代码中精简版的 VM;它 是否 实际上是精简版的旧版本 VM 仍然是一个有争议的话题。无论如何,即使不运行 VM,您也可以获得 LPAR(“逻辑分区”)的好处,它可以有效地将您的大型机划分为少量(通常少于 15 个)概念机器。IBM 的大型机竞争对手以不同的名称提供基本相同的功能,例如 Amdahl 的 MDF。

VM 下的虚拟化效率如何?该架构在设计时就考虑了自虚拟化,因此它比 VMWare 高效得多。当 VM 下的虚拟机不执行任何操作时,它消耗的资源非常少。中型到大型 VM 系统通常支持大约 5000 个同时登录(请注意,每个登录都带有自己的虚拟机),而不会出现问题。

Dimension Enterprises 的 David Boyes 最近进行了一项 Web 服务器压力测试——在一个 LPAR 中运行单个 VM 实例,所以 他的 机器在二级中型 S/390 上运行,而他的每台 Linux 机器都在 三级 运行。他的唯一目标是看看他可以启动多少台 Linux 机器,同时为请求提供服务。结果有些令人震惊。

您坐好了吗?他在 41,400 台同时运行的 Linux 机器上耗尽了资源——四万一千四百台。稍后我会谈到 有什么好处;不过,一台物理机器上拥有 41,400 台 Web 服务器的概念应该能让您了解一些情况。

结论是,如果您可以访问最新的 System/390,您几乎肯定可以抽出资源来试用 Linux/390,而不会明显影响您的生产系统。如果您 没有 访问大型机的权限,那么,请继续阅读。我有一个小小的惊喜要来了。

大型机上的 Linux

一个显而易见的问题是,“这有什么好处?” 让我们看几个场景。Scott Courtney 在他在 LinuxPlanet 上的文章中精彩地解决了这个问题(请参阅“资源”),如果您对 L/390 感兴趣,则应该阅读这篇文章——它比我的文章更深入。

UNIX 管理和开发技能比大型机技能更常见且更便宜。因此,与找到 OS/390、VSE 或 VM 专家相比,找到在您的大型机上使用 Linux 的人会更容易。

大型机有什么好处?传统上,大型机的 CPU 功率很小(现在不再是这样了——您可以从中获得充足的原始 CPU 速度),但具有绝对出色的 I/O 功能。当然,大型 Web 服务器场或大型电子商务服务器的主要需求之一是 I/O。

对于那些寻求弱化大型机但又不能简单地将其退役的组织来说,Linux/390 提供了一条有趣的迁移路径,因为它提供了其他环境中根本无法提供的服务。我个人见过这种情况发生过两次:一次在莱斯大学,一次在普林斯顿大学。关闭恐龙的计划被宣布,然后在明确校园的重要部分将陷入停顿后被撤回,因为某些大型机服务根本没有可行的替代方案。将那些它 可以 完成的事情转移到 Linux 可以提供更平稳、更廉价的过渡,而无需额外的硬件。让我们面对现实:如果您的组织要远离 OS/390 或 VM,那么他们最好迁移到 Linux 而不是其他操作系统。由于运行 Samba 的 Linux 已经是 NT 的良好后台替代品,您可以为您的用户提供 Windows 浏览服务,而无需任何 PC 硬件,更不用说 NT 许可证了。

另一个令人兴奋的可能性是 VM 许可证往往由学术机构持有。想象一下,一个三年级计算机科学专业的操作系统或网络课程。现在想象一下,每个学生都获得了他自己的 Linux 机器来玩。有完整的操作系统源代码、完整的开发环境以及与生产系统和其他学生的隔离。围绕在这种环境中研究 Linux 内核可以开发一门很棒的课程,而一台 中型 S/390 可以支持一个 25 名学生的班级,所有学生同时重新编译内核,而不会费力。

这种场景的商业版本是商业 Web 托管服务器。传统上,这意味着您可以专用访问某个地方机架空间中的一台机器,由 ISP 进行物理管理。稍后我们将进行一些计算,但简而言之,如果您要大规模进行此操作,那么大型机和 VM 许可证的价格很快就会被一大堆快速的机架式 PC 的价格所淹没。您的劳动力成本也大幅下降,因为您不必再物理设置另一台 PC;您只需在您的 VM 盒子上创建一个虚拟机,并为其提供已安装系统磁盘的副本即可。

顺便说一句,记住网络总拥有成本通常分解为不到四分之一的硬件,大约三分之一的服务和设施,其余部分是支持它所需的员工(IDC,1996 年),这并没有什么坏处。当整个 Linux 机器网络都包含在一个盒子中时,管理任务显然会大大简化。

将各种服务分离到各种虚拟机上也是完全可行的。Sendmail 将获得其自己的(虚拟)Linux 盒子,DNS 获得另一个,Samba 获得另一个。从安全角度(一台机器上的漏洞只会危及一项服务)和可靠性角度来看,这将是很好的。您还可以将多层应用程序的各个部分(例如,Web 前端、中间的业务规则处理引擎和后端的 RDBMS)拆分到单独的虚拟机中,如果您愿意,可以在 OS/390 上运行您的数据库。隔离将使调试和开发都变得更容易。我 知道 我们总是嘲笑 NT 人员需要这样做,但 Linux-on-a-virtual-machine 服务隔离方法有三个优势

  • 额外的硬件成本为零,而不是每台机器几千美元。

  • 额外的软件成本为零,而不是每台机器的 NT 许可证成本。

  • 实际资源利用开销非常低,因为除非 VM 的虚拟机实际运行,否则它们几乎不消耗任何资源。

价格和性能

大型机很昂贵。这是无法回避的事实。它们比以前便宜了,但它们肯定不是 800 美元的 PC。我不太 了解 IBM 的定价结构,但让我们以一百万美元作为高端价格。一百万美元将为您购买 很多 大型机;您将获得一份很棒的 IBM 支持合同和一个 VM 许可证,以及一个备份解决方案。大多数大型机商店都运行 OS/390,通常与 VM 结合使用,但如果您的目的是运行许多 Linux 虚拟机,那么您需要 VM,并且除非您也想进行传统的大型机计算,否则您将不需要 OS/390。我被告知,配备数 TB DASD 的全新顶级系统更接近 60 万美元,而不是一百万美元,而且二手的要便宜得多。但是,为了便于讨论,让我们坚持一百万美元这个整数。

您为此价格获得了什么?一台可以运行——我在这里非常保守——1000 台同时运行的 Linux 机器而不会出现问题的机器。您说的是每台 Linux 机器 1000 美元:与低端机架式 Linux 系统的成本相差不大,因此价格就在那里被抵消了。

显然,租用一台 S/390 及其相关磁盘阵列的空间比租用 1000 台物理 Linux 机器的空间便宜得多;即使采用单单元包装,每机架 42 个单元,您仍然需要 24 个机架。这肯定比一台大型 S/390 所需的空间还要多。网络也变得更容易;在您的 OSA 卡上购买 155MBps ATM 选件,将多达 12 个 ATM 接口插入您的机器(如果您需要更高的可扩展性,可以选择其他选项),并通过虚拟 LAN 协调您的虚拟机之间的内部通信。内部虚拟 LAN 比物理交换机拓扑和 Cat5 和光纤线路更容易且更简洁地管理。

您也可以减少资源使用量。如果您的某些机器具有相同的文件系统(例如,在 UNIX 世界中,只读挂载 /usr 并使用符号链接到需要可写的内容是很常见的),那么您可以维护一个包含共享文件系统的磁盘,并从每个虚拟机挂载它。这就像通过 NFS 共享文件系统一样,只是没有 NFS 的丑陋。顺便说一句,这就是 David Boyes 在运行他的 41,400 台机器时所做的事情:所有机器都共享 /usr 和 /bin;再稍微耍些花招,/lib 也可以共享。此外,无需为您的 Linux 机器指定太多——或者实际上任何——交换空间;VM 了解内存管理的一切,并且非常有效地执行内存管理。为您的每台 Linux 机器提供大量虚拟内存,让 VM hypervisor 担心分页进出。

现在让我们看看可靠性。我们假设这些 1000 美元的机器的 MTBF 为 1000 天。如果您相当努力地推动它,对于一台千美元的机器来说,这可能算是高的。以 1000 美元的价格,您不会获得 RAID,您的磁盘可能是 IDE,甚至不太可能有冗余电源。如果您在一个房间里有 1000 个这样的盒子,那么您一天内不会有任何一个盒子发生故障的概率是 1-(1/1000)<+>1000<+>,或者大约 37%。换句话说,每三天中,有两天您将不得不更换一些东西。

当然,如果大型机发生故障,所有 机器都会发生故障。但是,您为一百万美元支付的费用之一是坚如磐石的可靠性:System/390 的构建具有足够的冗余,如果发生故障,系统的其余部分会保持正常运行并且可以热插拔。这不仅仅是磁盘:在多处理器机器上,您可以在不关闭系统的情况下更换发生故障的处理器。当我看到微软宣称它在 NT 上实现了 99.5% 的正常运行时间时,我咯咯地笑了。因此,在异常良好的情况下,经过适当的管理和维护,NT 平均每周停机时间略少于一小时。我从 1992 年到 1994 年是一名 VM 系统程序员;在那段时间里,我们通常每年计划停机时间不到一小时。计划外 停机时间为零。

备份不再是一个问题;由于 VM 管理着虚拟机的全部磁盘,因此它们的所有数据都与 VM 备份一起备份。数据完整性也是如此;为了获得这种现金,您可以获得良好实施的热插拔 RAID,其中复杂性甚至对 Linux 机器都不可见,因为它们看到的磁盘空间只是 VM 呈现给它们的设备。基本上,无论您有多少虚拟机,您都只有一台实际机器需要保护,因此这样做的成本保持不变,而不是随着机器数量的增加而增加。

此外,VM 具有极其高效的缓存。经常访问的磁盘块将保存在缓存中,并且请求永远不会发送到驱动器。如果您在机器之间共享磁盘,或者如果您运行服务器场,那么这是一个巨大的胜利。

大型机市场也有低端产品。P/390 是一张 PCI 卡,其中包含一个带有 S/390 指令集的芯片。它与另一张 PCI 卡一起销售,该卡提供通道接口(因此您可以驱动您的真实 S/390 外围设备)、运行 OS/2 的 PC 和一些驱动程序软件;您可以在该卡上运行 VM、VSE、OS/390 或 Linux。PC Server System/390 的价格现在低于 10,000 美元。还有稍贵一点的 R/390,它位于 AIX 盒子中。一万美元完全在一家小型软件开发公司的预算之内。当然,这些盒子不支持一千台同时运行的机器,但它们可以相当舒适地支持五十台(它们支持大约 130 个同时运行的 CMS 用户)。事实上,我正计划使用这样一套系统来玩虚拟 Beowulf 集群,以及其他东西,也许还可以尝试 MOSIX。

在这两端之间也有很多中间地带。简而言之,从纯硬件的角度来看,将 N 台虚拟 Linux 盒子放在大型机上并不比简单地购买 N 台盒子贵多少,并且随着 N 的增加,它会变得更便宜。

但它是 Linux 吗?

简短的答案是,是的,它是 Linux。我在 penguinvm.princeton.edu 上运行的版本是 2.2.13。S/390 补丁已经包含在股票 2.2.14 源代码中,IBM 团队正在努力将 L/390 集成到 2.3.x 中。当您阅读本文时,它应该已经相当无缝地合并到主线开发内核树中。

System/390 上的 Linux 与 Linux/PPC、Linux/SPARC、Linux/m68k 或 Linux/Alpha 一样都是 Linux。System/390 端口已集成到主内核源代码树中;与 ELKS 或 RT-Linux 不同,它是股票内核,而不是子集或扩展。从用户的角度来看,在 390 上运行它与在 x86 机器上运行它没有什么不同。shell 的工作方式相同,X 应用程序的工作方式相同,GNOME 已被移植(通过在配置脚本中添加几行代码),并且一切都正常工作。没什么令人兴奋的,因为如果它带有源代码,那么您很可能可以以最小的努力构建和运行它。随着 “Think Blue Linux” 的启动,您应该能够使用 RPM 安装二进制文件。在撰写本文时,他们大约有 420 个 RPM 可用;应该很快就会有更多。

从应用程序程序员的角度来看,它也差不多。config.sub 和 config.guess 有几个非常小的补丁,用于使 configure 识别 S/390 架构(这些补丁已经提交给 Red Hat 的 Ben Elliston,他维护 autoconf)。在其下一个版本中,configure 应该无需修改即可支持 L/390。一旦应用了补丁,任何使用 autoconf 的东西都可以开箱即用地构建和运行。这包括 Bochs(x86 模拟器);显然,有人勇敢地构建了 Bochs,并在 L/390 下非常缓慢地启动了 NT Server。

另一个主要问题是字节序。与 x86 不同,S/390 是大端序。假设 Intel 字节顺序的程序将会失败。但是,如果这些程序已经移植到例如 Linux/PPC(另一个 32 位大端序平台),那么这些错误已经被消除。这不是一个 390 特有的问题,而是一个一般的可移植性问题。

在撰写本文时,我使用的 L/390 版本中的 pthreads 支持仍然存在错误,这导致 VNC 和 Hercules 模拟器出现奇怪的错误;这显然已经修复,但我还没有使用最新的补丁重新构建系统。同样,GCC 中存在一个优化器错误,导致它使用 -O2 及以上级别生成错误代码;这也已经修复,并且在本文发表时应该不再是一个问题。

在内核的深处,事情变得相当复杂。IBM 已根据 GPL 发布了其内核代码和 glibc 修改,并且可以从 IBM DeveloperWorks 页面获得;所有内容都在那里,并且注释良好。这非常吸引人,尤其是 x86 中断设计与 S/390 与其外围设备通信的方式之间的巨大差异,但这远远超出了本文的范围。

网络通过 OSA-2(以太网或令牌环)设备驱动程序或点对点高速通道处理。(OSA 是具有讽刺意味的 “开放系统适配器”:设备驱动程序是 OCO——仅对象代码,意味着没有源代码。)如果您在 VM 下运行,您可以设置称为 IUCV(用户间通信工具)的东西,它基本上允许您与另一个虚拟机建立 PPP 连接。顺便说一句,如果您开始感觉到 IBM 有自己的语言,全是首字母缩略词,那么您绝对是对的。这个 IUCV 的意思是它是纯内部的——没有与 IUCV 适配器对应的真实世界设备。您还可以设置虚拟 CTCA 接口(通道到通道适配器)。通道 真实世界的接口,现在通过光纤电缆实现。IUCV 的运行速度为 500MBps,CTCA 的运行速度为 250MBps。您的虚拟机之间的通信不应成为瓶颈。写信给 IBM 敦促他们更改其 OSA-2 OCO 政策不太可能有所帮助,但可能会让您感觉更好。

目前,penguinvm.princeton.edu 使用 CTCA 与 VM hypervisor 的 TCP/IP 堆栈通信,但也可以设置一个 Linux 虚拟机并将其用作防火墙,为后面的机器执行数据包过滤和网络地址转换。然后,该机器可以使用其 OSA-2 接口直接与外部世界通信,或者使用不同的 IUCV/CTCA 接口与 VM 的堆栈通信。

安装

安装仍然很麻烦。基本上,除非您了解如何在 System/390 上安装新的操作系统,并且 您了解如何安装和设置 Linux,否则您将一事无成。这是一个四步过程

  • 从提供的文件构建引导加载程序映像。

  • 引导加载程序。

  • 将文件系统 tar 存档转储到新创建的 EXT2 分区。

  • 重新启动并回答配置问题。

前两个步骤需要 S/390 知识,后两个步骤需要 Linux 知识。您 可能 能够从文档中弄清楚,但如果您在某个领域或另一个领域不稳固,那么最好找一个涵盖另一个基础知识的人。

Marist College 一直处于 Linux/390 开发的最前沿。Marist 的页面包含入门所需的磁带和磁盘映像,以及文档,是开始的地方。Marist 还托管了一个非常活跃的邮件列表 Linux-VM,它不是 VM 特定的,而是专门用于大型机上的 Linux,无论是否使用 VM。如果您习惯了 Red Hat 或 SuSE,Marist 磁盘的文件系统布局会有点奇怪。随着实际发行版的移植,这将发生变化。

已经有一个用于 S/390 的发行版:“Think Blue Linux” 或 “Iron Penguin”,基于 Red Hat 6.1。在撰写本文时,它只是一个可下载的软件包集合,尚未在 CD 或磁带上提供。

一旦我在弗吉尼亚州可用的测试平台 P/390 启动并联网(当您阅读本文时,这也应该早已发生),Richard Higson 和我将开始移植 Debian Potato 的过程。我预计它会相当容易,因为 Debian 已经支持相当多的平台。

简而言之,到本文发表时,安装应该比现在简单得多。即使现在也不是非常困难,但它与 1993 年初 Linux/x86 的情况相当,当时 SLS 开始起步。它肯定不是 Lizard 或 YAST2,并且安装需要您了解 System/390 和 Linux。

这很棒,但我没有大型机

也许我已经说服您 Linux/390 很酷,并且您想亲眼看看它。现在,您可能有一个问题:您无法访问 System/390。至少有三种方法可以在没有实际 System/390 的情况下试用 Linux/390。

最不有趣的选项是做 IBM 员工最初所做的事情,下载他们的 glibc、gcc 和内核补丁,并在 Linux/x86 下托管的交叉编译环境中构建 L/390 软件。当然,这可行,但这并不是很有趣。为了获得体验,您需要运行 L/390 本身,这需要 System/390。

昂贵的选择是购买一台大型机。二手市场上最少的 P/390 将花费您不到 10,000 美元。这不算太多,对吧?好吧,所以 10,000 美元对于一个有趣的玩具来说可能有点贵。

您仍然想玩,但又不能花一万美元?那么 “免费” 听起来如何?免费,就像啤酒 言论自由一样。Roger Bowler 编写了一个非常酷的模拟器 Hercules,它可以在 Linux 下运行,并模拟 System/370(上一代 IBM 大型机)或 System/390;它还模拟了许多更常见的大型机外围设备。它是开源的(不是 GPL,但许可证非常合理,基本上只是禁止商业用途)并且非常容易构建。该模拟器足够彻底,可以启动 OS/MFT(一个更简单的 IBM 大型机操作系统,大约在 1966 年)并使用 MFT 构建和启动 OS/MVT(MVS 的前身)。正在努力在其上启动 MVS 3.8。

更重要的是,Hercules 模拟 System/390 的效果足以启动 Linux/390。我已经发布了一个页面解释如何操作;请参阅 “资源” 部分。目前,它还不太实用;没有网络设备模拟,因此将东西输入和输出机器很困难。我们认为,可以使用提供的工具和磁带映像文件来完成。当您阅读本文时,可能有人已经弄清楚如何将 Marist 文件系统加载到 3330 映像中,这将允许实际开发。希望不会花费太长时间来开发足够的网络支持,以允许虚拟 S/390 出现在网络上,就像 VMWare 机器一样。

请注意:您需要耐心。在我的 PII-300 上,Hercules 需要将近一个小时才能启动 Linux,尽管一旦启动并运行,交互性能实际上还不错(我开始在 4MB 386/25 上玩 Linux,Hercules 并不比那时更痛苦)。Hercules 邮件列表上的许多人(从 Hercules 主页注册)都在积极致力于调整 Hercules 的性能,因此其速度应该会显着提高。引用的页面将包含更新,因为我们将 Hercules 变成 L/390 的合理开发环境,因此请经常回来查看。

这是一场伟大的冒险;我们每天都在探索新的领域。我们需要您的帮助。跳上船,带上您的企鹅。恐龙不会咬人。真的。

资源

词汇表

The Penguin and the Dinosaur
电子邮件:adam@io.com

Adam J. Thornton 从 0.09 版本开始使用 Linux,这使他比他愿意承认的年龄还要大。他清楚地记得认为 SLS 是给娘娘腔用的。当他不象穴居人一样弓着腰坐在显示器前时,他喜欢和他的大瑞士山地犬 Vinnie 玩耍,和他的未婚妻 Amy 一起骑自行车,以及喝苏格兰威士忌,但不是同时进行。请写信给他:adam@io.com。

加载 Disqus 评论