级别: 初级 Nikolay Yevik (yevik@us.ibm.com), Linux on POWER 技术顾问, IBM
2004 年 12 月 12 日 本文展示了如何在用于 IBM® POWER™ 和 IBM PowerPC® 硬件的 Linux™ 发行版本和用于 Apple PowerPC 硬件上的 Linux 中使用全功能的而且得到产品检验的 IBM Java™ 开发工具。
要意识到 IBM Java 环境在 Apple PPC 硬件上的使用并没有得到 IBM 的支持。IBM 不为这些配置提供服务,所以作者不鼓励用户在将 Linux 发行版本运行于 Apple PPC 硬件之上的环境中去使用它们。
介绍
IBM 为运行于 IBM POWER 和 PowerPC 硬件上的 Linux 发行版本提供了一些版本的 Java 开发工具和运行期环境;
也就是运行于以下平台上的 Linux 发行版本:IBM eServer™ iSeries™,包括 eServer i5;
eServer pSeries®,包括 eServer p5;eServer BladeCenter™ JS20;和 eServer OpenPower™。
现在有很多 Linux 发行版本是为 POWER 或 PowerPC 硬件创建的,比如:
- CRUX PPC
- Debian Linux
- Gentoo Linux
- Mandrakelinux
- Yellow Dog Linux
- ROCK Linux
- Red Hat Enterprise Linux
- SUSE LINUX Enterprise Server
列出一些主要的发行版本。
IBM JVM 并不设计为支持现有 Linux 发行版本与所有 PowerPC 硬件的所有可能组合,有一些并不在 IBM 的计划之列。
因此,用于 IBM eServer iSeries、eServer pSeries 或者 eServer OpenPower 之上的 Linux 的 IBM 开发工具和
运行期环境的兼容性,当涉及用于 Apple PPC 硬件的 Linux 发行版本时,要取决于特定 Linux 发行版本与特定
Apple 硬件的组合。
要深入了解 IBM Java 开发工具与用于 IBM POWER 和 PowerPC 硬件的 Linux 的兼容性,请参考
IBM developer kit for Linux: Tested platforms 和
IBM Developer kit for Linux 下载页。
依赖于运行在 Apple PowerPC 硬件(比如 G3、G4 和 G5 处理器)之上的 Linux 发行版本,Java 环境的可用性与具体要求变化非常大。有一些根本不提供任何 JDK 或者 JRE,有一些只
提供 JRE。就算是用于 Apple PPC 硬件的特定 Linux 发行版本提供了 JRE 和/或 JDK,那个 JRE
和/或 JDK 可能也不是满足用户具体用途的版本。
在用于 Apple PPC 硬件的 Linux 中使用用于 IBM POWER 和 IBM PPC 硬件的 IBM Java 开发工具
要在 Apple PPC 硬件上使用用于 IBM POWER 和 IBM PPC 硬件的 IBM Java 开发工具和运行期环境,
您需要知道您的系统的主机处理器是哪种类型(G3、G4 或者 G5)。您还需要知道 JVM 能否确定主机处理器的体系
结构,以使得 JIT 编译器可以为那个体系结构生成正确的指令集。
为了生成主机处理器的正确的指令集,JIT 编译器需要明确地确定底层的处理器的体系结构类型。
如果不能确定处理器类型(可能是因为不支持),那么 JIT 为那个特定的 JVM 版本中设置的默认
处理器生成一组指令。为默认处理器生成的指令可能超出主机处理器所能理解的指令集的范围。
这样将由于传递给处理器要执行的指令非法而致使 JVM 非正常终止 —— SIGILL 崩溃。
完全禁用 JIT 意味着 JVM 将以完全解释的模式运行应用程序的 Java 字节代码。最终的性能将不可能
令人满意。尝试忽略对某些方法的基本 JIT 编译,因为那样编译得到的一些 ISA 指令不属于
主机处理器能够理解的集合,没有什么意义。JIT 调试通常是一个复杂而且耗时的过程。即使可以强制
所有的方法在第一次导入到 JVM 时被 JIT 编译,也很难预计在任何适度复杂的 Java 应用程序的执行过程
中何时哪些方法会导入到 JVM。
为了让 JIT 编译器可以确定正确的处理器类型,需要使用
systemcfg_init()
函数检查系统配置信息。如果函数返回 NULL,则解析并检查 /proc 文件系统中的 /proc/cpuinfo 文本文件。
有一些 Linux 发行版本在 /proc 文件系统中没有 cpuinfo 文件。使 cpuinfo 文件在 /proc 文件
系统中可用,可能是一个解决方案。
即使正确地确定了处理器的类型,JIT 可能也不具备为未得到支持的处理器生成 PPC 指令子集的条件。
举一个例子,Apple G4 处理器,Motorola 7400,通常被分类到 PowerPC 700 家族。IBM JVM 的 JIT
编译器不支持此处理器。解决方案是,指示 JIT 生成一组 PowerPC 604 指令。PowerPC 604 是最快的
PowerPC 处理器之一,它的指令构成所有 PowerPC 处理器的核心子集。换句话说,每个 PowerPC 处理
器都应该可以执行基本的 PowerPC 604 指令。将全局变量 JITC_PROCESSOR_TYPE 设置为 "6"
将指示 JIT 生成 G4 能够执行的 PowerPC 604 指令。
表 1 给出了 JITC_PROCESSOR_TYPE 变量的可能的值以及它们如何对应于各种 POWER 和 PPC 处理器体系结构。
表 1. JITC_PROCESSOR_TYPE 值和与它们对应的 POWER/PPC 体系结构
|
值
|
POWER/PPC 芯片
|
| 1 | POWER(RS1) | | 2 | POWER I (RSC) | | 3 | POWER II | | 4 | PPC 601 | | 5 | PPC 603 | | 6 | PPC 604 | | 7 | PPC 620 | | 8 | PPC 630/POWER III | | 9 | Star POWER RS64 | | 10 | Star POWER RS64II | | 11 | Star POWER RS64III | | 12 | POWER4 | | 13 | POWER4+ | | 14 | POWER5 |
结束语
通过分辩特定系统的处理器类型,您可以确定将 JITC_PROCESSOR_TYPE 设置为什么值,以使得
在用于 IBM Power 和 IBM PPC 硬件的 Linux 发行版本中使用的普通的 IBM JVM 可以在用于 Apple 硬件的
Linux 发行版本中使用。您也可以查看是否处理器的类型不能被确定,或者不被支持。
如果用于 IBM Power 和 IBM PPC 硬件的 Linux 发行版本中使用的 IBM JVM 识别出了主机处理器并支持
那种处理器的指令集,那么就没有必要这样做。例如,当在 Apple G5 上运行 Yellow Dog Linux 版本 3 或 4 时,
上面的全部没有必要,因为 Apple G5 基于 IBM PowerPC 970 处理器,因而基于单核(single-core)版本的
IBM POWER4 芯片,IBM JVM JIT 可以为其生成指令。
术语表
i5 - IBM eServer i5 是使用 POWER5 处理器的下一代 iSeries。
ISA - 指令集体系结构(Instruction Set Architecture)。
iSeries - 基于 POWER 体系结构的 IBM 集成的服务器。
JDK - Java 开发工具包(Java Development Kit)。JRE 的超集。包括 JRE 和开发工具,比如
编译器、调试器等等。
JIT - 同 JITC。
JITC - 即时编译器(Just-In-Time Compiler),将 Java 字节代码转换为主机体系结构的本地机器代码。
JRE - Java 运行期环境(Java Runtime Environment)。JDK 的子集。不包括开发工具。提供 JVM,在各处运行经过编译的 Java 字节代码。
JSDK - Java 软件开发工具包(Java Software Development Kit)。缩写为 SDK 或 JDK,可互换。
JVM - Java 虚拟机(Java Virtual Machine)。
NPTL - Native POSIX Threads Library。NPTL 为 Linux 带来了企业级线程支持,远远超过 LinuxThreads 的性能。
OpenPower - 为 Linux 进行了调整的基于 IBM POWER5 微处理器的系统。
p5 - IBM eServer p5 是使用 POWER5 处理器的下一代 pSeries。
POWER - Performance Optimization with Enhanced RISC 体系结构。用于 IBM eServer pSeries、iSeries 和 OpenPower
服务器的通用芯片体系结构的名称。
POWER3 - 当前可用的 POWER 芯片之一,用于入门级 pSeries 服务器。
POWER4 - POWER4 体系结构在大范围的商业和高性能计算环境中具有更高的性能。基于 POWER4 的 iSeries 和
pSeries 服务器支持动态逻辑分区。
POWER4+ - 也称为 POWER4-II。是 POWER4 的升级,频率更高,耗电更少。
POWER5 - 当前最新的可用的 POWER 芯片。类似于 POWER3 和 POWER4,POWER5 技术统一了 POWER 和 PowerPC
体系结构。它的特色是通信加速、芯片多进程和同步多线程(simultaneous multithreading,SMT)。
PowerPC - 继承自 POWER 的硬件体系结构。
PPC - PowerPC 的缩写。
pSeries - IBM 的基于 UNIX 的服务器,运行 AIX 和/或 用于基于 IBM POWER 硬件的 Linux。
RHEL - Red Hat Enterprise Linux。
RISC - 精简指令集计算机(Reduced Instructions Set Computer)
SDK - 软件开发工具包(Software Development Kit)。缩写为 SDK 或 JSDK,可互换。
SLES - SUSE LINUX Enterprise Server。
SR - 服务刷新(Service Refresh)。
参考资料
关于作者  | |  |
Nikolay Yevik 是 IBM eServer Solutions Enablement 团队的一名 Linux on POWER 技术顾问,
有 7 年多的 UNIX 平台开发经验,以及 AIX 和 Linux 系统管理经验。 |
对本文的评价
|