走入IBM小型机世界
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 CPU特性

CPU是计算机的核心,操作系统、程序都依靠CPU执行,CPU的特性对程序和操作系统的使用影响巨大。

2.2.1 32/64位问题

尽管32位、64位已经成为过时的话题,但是很多32位的设备还在运行,特别是从我们“攒机器”的角度来看,经常要碰到旧机器,32位和64位成为不得不考虑的问题。这其中,有三种32/64位的技术分别:CPU有32位和64位之分,操作系统AIX(内核)有32位、64位之分,甚至应用程序接口(API)也有32/64位之分。

● 通过查看CPU型号,可以得到硬件32/64位信息:

        #lsattr -El proc0

将显示CPU型号,其中64位的CPU包括:

(1)PowerPC_RS64。

(2)PowerPC_RS64 II。

(3)PowerPC_RS64 III。

(4)PowerPC_Power3。

(5)PowerPC_Power3 II。

(6)PowerPC_POWER4。

(7)PowerPC_POWER5。

(8)PowerPC_POWER6。

如果是以上类型CPU,则表示硬件支持64位。

● 检查程序32/64位:

        #dump -ov filename | grep bit
        Magic = 0x1df(32-bit XCOFF)

如果是32,则这是32位程序,否则是64位的。

        # bootinfo -y

64 →64位硬件,否则是32位硬件。

        # bootinfo -K

32 →32位内核,否则是64位内核。

32位和64位的不同组合对我们有什么影响?最主要是兼容性问题。如表2-1所示,图2-5则显示了匹配关系。

表2-1 32位和64位内核的不同组合

注1:尽管AIX 5版本支持64位内核,但即使在64位硬件上安装,在一些比较老的操作系统版本,例如5.1版本上,默认情况下也没有开启64位内核(执行64位程序没有问题),需要手工开启64位。

图2-5 硬件、系统内核、应用程序(API)之间32/64位匹配关系

AIX 4.3或者5.1以上版本都可以提供对64位程序运行支持,但有如下要求:

1.安装bos.64bit

如果没有安装,则找不到/etc/methods/cfg64文件,在SMIT中也就不能打开、关闭64位执行环境(实际上就是在inittab文件中增加了执行这个支持64位的程序)。通过:

        #lslpp -l bos.64bit

可以检查是否安装了bos.64bit程序包(通常在硬件支持64位的机器上安装操作系统会自动安装此程序包)。但安装了此程序包也不等于可以打开64位运行环境,如果你在32位硬件的机器上安装了此程序包,则你可以在这台32位的机器上直接编译出64位的执行程序,然而你不能执行它!

2.需要64位硬件

硬件列表请参考支持64位的CPU型号。

3.开启内核64位支持

        #genkex | grep syscalls64

可能得到这样的提示输出:

        1ac8170           2b0 /usr/lib/drivers/syscalls64.ext

注意

安装了64位驱动扩展并不等于内核是64位的。只有在AIX v5以上版本,才可能有真正64位内核。这个内核扩展驱动仅仅代表着可以在此32位内核的机器上编译出64位的执行程序。而如果64位的CPU,但使用了32位的内核,则此syscalls64.ext程序允许执行64位的应用。

将内核彻底变为64位而不仅仅支持64位程序需要使用AIX 5以上版本的系统。在AIX 5.1以后版中,从64位内核转为32位内核:

        #ln -sf /usr/lib/boot/unix_64 /unix
        #ln -sf /usr/lib/boot/unix_64 /usr/lib/boot/unix
        #lslv -m hd5         注:如果hd5有镜像,则要在每个镜像磁盘上都进行bosboot操作
        #bosboot -ad /dev/ipldevice(或者bosboot -ad /dev/hdisk0,以及另一个镜像盘)
        #shutdown -Fr

从64位内核转为32位内核:

        #ln -sf /usr/lib/boot/unix_up /unix
        注:多CPU的机器使用unix_mp替代unix_up,下同
        #ln -sf /usr/lib/boot/unix_up /usr/lib/boot/unix
        #lslv -m hd5
        #bosboot -ad /dev/ipldevice(或者bosboot -ad /dev/hdisk0,以及另一个镜像盘)
        #shutdown -Fr

注意

最新发布的POWER 6小型机以及AIX 6.1操作系统已经不再提供对32位硬件和操作系统的支持,也就是AIX 6.1不提供32位内核,而POWER 6也不能运行32位内核。但这并不影响32位程序在POWER6和AIX 6.1上执行。

除了兼容问题,32/64位还有什么影响?系统性能和一些限制参数也随32/64位情况不同,已经超出本书希望讲述的内容,请参考后续出版的图书。表2-2所列出的是32/64位内核所影响的系统参数。

表2-2 32/64位内核所影响的系统参数

注:

① 每个VG都有一个Major Number,有一些已经为操作系统和设备保留(例如rootvg的Major Number总是10),执行lvlstmajor命令可以查看可用的Major Number。Major数限制了一个操作系统中允许的最大设备数量,包括硬件设备和逻辑设备(例如一个逻辑卷或者一个VG)。

② 需要VMM映射的设备是被挂接(mount)后的JFS/CDRFS(日志/光盘)类型的文件系统、打开的JFS log(可以理解为是日志文件系统的更改记录)设备、交换区(paging spaces),其中512,16保留给交换区。这些设备通过内核PDT(Page Device Table,内存页面分配表)检索,内核中的PDT是一个固定大小的数组。

③ 想达到最大的存储空间1TB,必须用npbi=65,536(或者更高)的参数创建文件系统,而且frag设置为4096。

④ 为达到64G文件大小,文件系统必须用-a bf=true标记创建(或者在smit中选择创建“big file enabled filesystem”,而且需要更改/etc/security/limits文件中对最大文件的限制(默认为2GB)。

2.2.2 查看CPU类型和主频

非常遗憾,AIX 5.1以前的版本没有专门的命令去查看CPU的频率,但通过下面的命令可以看到一些关于CPU情况的信息:

        $uname -M
        IBM,7028-6C4

这个结果并不是那么明确,你需要“查表”来分析所得的结果。如果安装了bos.pmapi perfagent.tools这个程序集则可以使用:

        # which_fileset pmcycles
        /usr/bin/pmcycles -> /usr/pmapi/bin/pmcycles bos.pmapi.pmsvcs 5.2.0.0
        /usr/pmapi/bin/pmcycles                  bos.pmapi.pmsvcs 5.2.0.0
        $pmcycles        → 查看CPU主频

在5.1以上版本这个问题得以解决,直接执行prtconf可以得到我们所需要的关于设备的几乎全部你需要了解的信息:

        $prtconf

另外有一个免费的程序可以查看CPU的类型,这就是lsc,可以从以下站点下载(下载后需要先用uncompress解压缩,再用tar解包):

ftp://ftp.software.ibm.com/aix/tools/perftools/perfpmr/perf53/perf53.tar.Z

2.2.3 HMT,SMT,HT技术

SMT(Simultaneous Multi-Thread,并发多线程)是POWER 5以后芯片的新技术,它支持一个CPU内核同时处理两条指令,因此可以最高达到单一CPU两倍的处理速度(实际测试通常能达到1.3倍,某些应用下可以实现最高1.7倍左右的性能)。平均而言,打开SMT支持(默认)比关闭SMT能提升30%以上的CPU处理能力。SMT的能力来源于CPU中有许多寄存器,但是由于CPU通常在每一时间点只能执行一条指令(即使是流水线方式,某个时间点真正执行占据运算器的也只有一条指令,其他并行执行的指令只能处于解码、寻址等状态),因此大部分寄存器都没有工作,处于闲置。

针对这种情况,IBM特别设计了一种寄存器结构,能够对CPU的处理状态进行跟踪,当发现有闲置的寄存器,而此时另一个线程又可以使用它的时候(恰好需要另一个寄存器,例如一个在执行整数运算,另一个执行浮点运算),就在保持当前线程正常运行的前提下,让另一个线程同时执行(使用另一个寄存器),这样在同一时间,一个CPU就可以处理两个线程的指令。实际上并非如此简单,因为一个RISC CPU通常采用超流水线的方式同时执行多条指令,因此实现SMT需要进行比较复杂的判断,而且也并不能保证CPU永远可以同时执行两个线程,所以通常SMT并不能将性能翻倍,而只可以提高30%左右。

与SMT类似,HMT(Hardware Multi-Thread,硬件多线程)也是试图同时执行多条指令线程的一种技术,但与SMT的不同之处在于HMT必须等当前指令流空闲下来,才能切换到另一条指令线程执行。在CPU执行指令发生中断的时候,就是当前指令流空闲的时候,通常可能原因是指令/数据缓存未命中(由于跳转和地址越界,缓存中没有当前需要执行的指令)。由于HMT对指令是否可并行执行的要求更为苛刻,所以对性能提高并不十分显著。不同多线程技术的区别如图2-6所示。

图2-6 不同的多线程技术区别

在图2-6中,Coarse Gain Threading(粗并行线程方式)是最基本的多线程技术,几乎每种操作系统、硬件都提供对这种功能的支持。在这种方式下,当一个指令流暂时中断(例如等待IO),系统/CPU就可以切换到下一个指令流执行;Fine Gain Threading(精细并行线程方式)是HMT的实现方式,Simultaneous Multi-Threading是SMT或者HT(Hyper Thread,Intel对并发多线程的一种称呼)的实现方式。

IBM的POWER系列CPU从RS64开始支持HMT,到POWER 5开始更增添了对SMT的支持,其中HMT是无条件使用,而SMT则可以通过操作系统开关控制使用或者关闭。

        #smtctl -?
        smtctl: Usage error : Usage: smtctl [ -m off | on [ -w boot | now]]
        -m用于开启或者关闭SMT,-w用于控制此开关是重启动后生效还是现在生效
        # smtctl -m off -w now               → 关闭SMT
        smtctl: SMT is now disabled.
        # smtctl                               → 查看SMT状态
        This system is SSMT capable
        SMT is currently enabled
        SMT boot mod is not set
        Processor 0 has 2 SMT threads
        SMT thread 0 is bound with processor 0
        SMT thread 1 is bound with processor 1
        # lsdev -Cc processor                → 查看物理CPU状态
        proc0 Available 00-00 Processor
        proc2 Available 00-02 Processor
        # bindprocessor -q                    → 查看可用的逻辑CPU
        The available processors are:  0 1 2 3
        # lsattr -El proc0                    → 查看CPU参数状态
        frequency   1656000000     Processor Speed       False
        smt_enabled true            Processor SMT enabled False
        smt_threads 2               Processor SMT threads False
        state       enable         Processor state       False
        type        PowerPC_POWER5 Processor type        False
        AIX 5.3 SMT off with 1 CPU
        Shows one CPU for physical CPU
        # sar -P ALL 1 2                                    → SMT关闭状态
        AIX chosin 3 5 00CC1C2C3C40    01/01/70
        System configuration: lcpu=1
        20:48:21 cpu    %usr    %sys    %wio   %idle
        20:48:22  3        0       0       0     100
        20:48:21 cpu    %usr    %sys    %wio   %idle
        20:48:22  3        0       0       0     100
                -        0       0       0     100
        # sar -P ALL 1 2                                    → SMT开启状态
        AIX chosin 3 5 00CC1C2C3C40    01/01/70
        System configuration: lcpu=2 ent=1.00
        20:36:24 cpu    %usr    %sys    %wio   %idle   physc   %entc
        20:36:25 2       50      10       0      70    0.60    60.0
                3        30      10       0      70    0.40    40.0
                -        80      20       0       0    1.00   100.0