官术网_书友最值得收藏!

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
主站蜘蛛池模板: 汾西县| 新泰市| 城固县| 惠水县| 平定县| 丹凤县| 青川县| 寿阳县| 内丘县| 保靖县| 东乡县| 衡南县| 乌鲁木齐县| 宾阳县| 潼关县| 神木县| 南宁市| 曲阜市| 芮城县| 景泰县| 丰城市| 大方县| 新昌县| 洛扎县| 乡宁县| 四川省| 临漳县| 红安县| 三江| 长兴县| 军事| 塘沽区| 汝州市| 开封县| 清流县| 屏边| 五台县| 昌乐县| 白河县| 临江市| 翁牛特旗|