在 IBM 集成虛擬化管理器上進行 Linux 分區的 DLPAR 操作,第 2 部分

火星人 @ 2014-03-12 , reply:0


  
動態邏輯分區(DLPAR)是 IBM System p 伺服器上的一種虛擬化特性,該特性允許用戶在分區運行的時候動態調整分區的資源分配,使得系統資源得到更為有效的利用,並且不影響應用或者服務的正常運行。集成虛擬化管理器(IVM)是一種與 HMC 類似的用於管理 System p 伺服器的平台,也同樣支持 DLPAR,不過與 HMC 上的 DLPAR 存在不少差異。本系列文章介紹 IVM 上 Linux 邏輯分區的 DLPAR,分成四個部分。本文是第二部分,介紹了處理器和內存的 DLPAR 操作。

本文是介紹 IVM 上 Linux 分區 DLPAR 操作這一系列文章的第二部分。在上一部分內容中,我們介紹了 IVM 上 Linux 分區 DLPAR 的一些背景知識,使讀者對 IVM 和 Linux 對 DLPAR 的支持情況、DLPAR 環境的準備過程和 DLPAR 的執行過程有了基本的了解。本文開始介紹具體的 DLPAR 操作過程,由於篇幅的限制,這裡只涉及處理器和內存的 DLPAR 操作,其它類型的 DLPAR 操作留在後續篇章中介紹。處理器和內存的 DLPAR 操作十分類似:1)執行過程相似,都是首先修改暫掛值,然後通過 DLPAR Manager 實現暫掛值到當前值的同步;2)處理器和內存的當前值都受最小值和最大值的限制;3)執行添加或者刪除操作時都需要指定具體數目的處理器或內存資源。正是由於這種相似性,這兩種資源的 DLPAR 操作在本文中一起討論。

本文所舉的例子都是基於本系列文章第一部分中“Linux 分區 DLPAR 環境的準備”一節所描述的實驗環境,該環境是一個安裝了 SLES10 SP2 的 IVM 客戶分區,分區名稱為 uli13lp2。如有需要,讀者可以回過頭去熟悉這一 DLPAR 環境,這裡不再贅述。

處理器 DLPAR 操作

圖形界面操作方式

IVM 上的 DLPAR 操作可以使用基於 Web 的圖形界面來進行,主要是使用如圖1所示的分區屬性頁面。用戶可以通過以下方式打開該頁面:

  • 進入“查看/修改分區”頁面,在“分區詳細信息”區域(如圖2所示)直接點擊“名稱”欄中分區的名稱,比如 uli13lp2
  • 進入“查看/修改分區”頁面,在“分區詳細信息”區域的“選擇”欄中選取所要操作的分區,然後從“--- 更多任務 ---”下拉列表中選擇“屬性”選項

要執行處理器 DLPAR 操作,首先打開分區屬性,然後選擇“處理”標籤,就可以看到如圖1所示的頁面。從圖中“處理單元數”和“虛擬處理器數”區域的“當前”欄可見,分區 uli13lp2 當前已分配的處理單元數是0.2,而虛擬處理器數是2。用戶通過修改“暫掛”欄中的值,然後點擊“確定”按鈕就可以進行處理器資源的 DLPAR 增加或者刪除操作(IVM 不提供邏輯分區之間的處理器 DLPAR 移動操作,用戶可以組合使用刪除和增加兩種操作來達到相同的目的)。在這裡,我們分別輸入新的暫掛值0.3和3,即增加0.1個處理器單元和1個虛擬處理器,用戶可以輸入比當前值小的暫掛值來刪除處理器資源。


圖 1:通過圖形界面進行處理器的 DLPAR 操作

從本系列文章第一部分中“DLPAR 的基本過程”一節的討論中我們知道,處理器的 DLPAR 包括 DLPAR 命令修改暫掛值和 DLPAR Manager 執行資源同步這兩部分。暫掛值的修改相對簡單,通常很快就能完成。DLPAR Manager 執行的同步過程則需要經過兩個步驟:1)通知固件把暫掛值同步到當前值;2)通知 Linux 操作系統使用 drmgr 命令來 vary on/off 處理器資源。由於 Linux 操作系統只知道虛擬處理器,而不需要管理處理單元,因此 Linux 只 vary on/off 虛擬處理器,這也說明虛擬處理器的同步要比處理單元麻煩。Linux 操作系統上資源同步的速度依賴於當前系統的負載,當負載較高時,同步操作可能需要花費比較長的時間才能完成。

點擊“確定”按鈕后,處理器 DLPAR 開始執行,圖形界面返回“查看/修改分區”頁面(如圖2所示)。從圖中可以看出,分區 uli13lp2 的“處理器數”(虛擬處理器數)和“授權的處理單元數”(處理單元數)兩個域已經變成用戶期望的數值了,但是由於 DLPAR Manager 還未全部完成虛擬處理器的同步,因此“處理器數”欄顯示了一個警告標誌和一個“詳細信息”鏈接,用戶可以點擊該鏈接來查看詳細的同步信息(如圖3所示)。從圖3可見,DLPAR Manager 已經完成了處理單元的同步,而虛擬處理器的同步還在進行,Linux 正在使用 drmgr 命令執行虛擬處理器的同步。當同步完成後,IVM 就會清除掉警告標誌和詳細信息鏈接。不僅僅是處理器,當內存資源處於不同步狀態時,IVM 也會以相同方式告知用戶。


圖 2:處理器 DLPAR 的同步


圖 3:處理器 DLPAR 詳細的同步信息

命令行操作方式

除了上述圖形界面操作方式之外,用戶還可以使用命令 chsyscfg 或 chhwres 進行處理器 DLPAR。清單 1 顯示了使用命令行操作方式的一個例子,讀者可以通過查看用戶手冊了解更多的選項。兩個命令實現相同的處理器 DLPAR 功能,圖形方式下處理器和內存 DLPAR 所使用後台命令是 chsyscfg 而不是 chhwres,讀者可以通過對比 DLPAR 前後應用程序日誌的變化得到這一結論。


清單 1:使用命令 chsyscfg 和 chhwres 進行處理器 DLPAR 操作
DPLAR 前 uli13lp2 的處理器配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2"  \  -F min_proc_units,desired_proc_units,max_proc_units  0.10,0.20,0.40  $ lshwres -r proc --level lpar --filter "lpar_names=uli13lp2"  \  -F curr_min_proc_units,curr_proc_units,curr_max_proc_units  0.10,0.20,0.40    用 chsyscfg 增加處理器:  $ chsyscfg -r prof -i "lpar_name=uli13lp2,desired_proc_units+=0.1"    chsyscfg 后 uli13lp2 的處理器配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2"   \  -F min_proc_units,desired_proc_units,max_proc_units  0.10,0.30,0.40  $ lshwres -r proc --level lpar --filter "lpar_names=uli13lp2"   \  -F curr_min_proc_units,curr_proc_units,curr_max_proc_units  0.10,0.30,0.40    用 chhwres 刪除處理器:  $ chhwres -r proc -o r -p uli13lp2 --procunits 0.1  	  chhwres 后 uli13lp2 的處理器配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2"   \  -F min_proc_units,desired_proc_units,max_proc_units  0.10,0.20,0.40  $ lshwres -r proc --level lpar --filter "lpar_names=uli13lp2"  \  -F curr_min_proc_units,curr_proc_units,curr_max_proc_units  0.10,0.20,0.40  

結果的驗證

雖然用戶可以在 IVM 上使用圖形或命令行界面來查看 DLPAR 是否達到預期的效果,由此來驗證 DLPAR 是否正確執行,但是由於各種可能的原因(比如 Linux 上的 DLPAR bug 等),Linux 操作系統所能看到的資源並不一定和 IVM 上看到的相同。儘管這種不正常的情況在經過良好測試的 System p 系統中應該不會出現,但是還是建議用戶在完成 DLPAR 后登陸到 Linux 上去驗證 DLPAR 是否成功執行。對於那些從事開發或者測試 DLPAR 相關功能的用戶,DLPAR 結果的驗證是非常必要的。清單 2 和 3 顯示了上述 DLPAR 操作前後 uli13lp2 上處理器的相關信息,使用了4種不同的查看方式,用戶可以選擇自己喜歡的方式。

  • lparcfg 文件:即 /proc/ppc64/lparcfg,該文件記錄了 Linux 分區的配置信息,比如所屬伺服器的機型和序列號、分區的 ID、處理器和內存的配置等,其中 partition_entitled_capacity 和 partition_active_processors 分別表示分區所使用的處理單元數(以0.01為單位)和虛擬處理器數。該方式的優點是能夠看到處理單元數和虛擬處理器數,而其它方式只能夠查看虛擬處理器數(Linux 操作系統只需要知道虛擬處理器數,而不需要知道處理單元數,虛擬處理器到處理單元的映射由固件去處理)。對比兩個清單可見,上述處理器 DLPAR 操作是成功的。
  • cpuinfo 文件:即 /proc/cpuinfo,該文件顯示了各個處理器的頻率和版本以及伺服器的機型等信息。由於 POWER5 之後的處理器支持 SMT(Simultaneous Multi-Threading),並且本系列文章所使用的實驗系統是基於 POWER6 的 JS22 刀片伺服器,因此 Linux 分區可以使用 SMT 來充分的利用處理器的計算能力。由於 uli13lp2 上的 Linux 操作系統激活了 SMT,因此實際上看到的處理器個數是 partition_active_processors 的兩倍。對比兩個清單可見,上述處理器 DLPAR 操作是成功的。
  • open firmware 設備樹:該設備樹在 /proc/device-tree/ 下面,由 Linux 操作系統從 open firmware 中導出並創建在 proc 文件系統中,處理器相關的信息被存儲在 /proc/device-tree/cpus/ 子目錄下。可以看到,這裡所顯示的處理器個數並不考慮是否有 SMT,而是與 lparcfg 文件中的 partition_active_processors 相同。對比兩個清單可見,上述處理器 DLPAR 操作是成功的。
  • sysfs 文件系統:該文件系統通常被掛接在 /sys/ 目錄上,與 open firmware 設備樹類似,該文件系統記錄了分區所使用的資源。與處理器相關的信息記錄在 /sys/devices/system/cpu/ 目錄下面,所顯示的處理器個數是考慮了 SMT 后的結果。對比兩個清單可見,上述處理器 DLPAR 操作是成功的。

清單 2:處理器 DLPAR 前
查看 proc 文件系統中的 lparcfg 文件:  uli13lp2:~ # cat /proc/ppc64/lparcfg | grep  \  -E "partition_entitled_capacity|partition_active_processors"  images/imagepartition_entitled_capacity=20  images/imagepartition_active_processors=2    查看 proc 文件系統中的 cpuinfo 文件:  uli13lp2:~ # ppc64_cpu --smt  smt is on  uli13lp2:~ # cat /proc/cpuinfo | grep processor  images/imageprocessor       : 0  images/imageprocessor       : 1  images/imageprocessor       : 2  images/imageprocessor       : 3    查看 proc 文件系統中的 open firmware 設備樹:  uli13lp2:~ # ls /proc/device-tree/cpus/  #address-cells ibm,drc-names  ibm,drc-types  linux,phandle  images/imagePowerPC,POWER6@0    #size-cells  ibm,drc-indexes  ibm,drc-power-domains  ibm,phandle    name      images/imagePowerPC,POWER6@2  smp-enabled    查看 sysfs 文件系統:  uli13lp2:~ # find /sys/devices/system/cpu -name purr  /sys/devices/system/cpu/images/imagecpu3/purr  /sys/devices/system/cpu/images/imagecpu2/purr  /sys/devices/system/cpu/images/imagecpu1/purr  /sys/devices/system/cpu/images/imagecpu0/purr  


清單 3:處理器 DLPAR 后
查看 proc 文件系統中的 lparcfg 文件:  uli13lp2:~ # cat /proc/ppc64/lparcfg | grep   \  -E "partition_entitled_capacity|partition_active_processors"  partition_entitled_capacity=30  partition_active_processors=3    查看 proc 文件系統中的 cpuinfo 文件:  uli13lp2:~ # cat /proc/cpuinfo | grep processor  processor       : 0  processor       : 1  processor       : 2  processor       : 3  processor       : 4  processor       : 5    查看 proc 文件系統中的 open firmware 設備樹:  uli13lp2:~ # ls /proc/device-tree/cpus/  #address-cells         ibm,drc-types  PowerPC,POWER6@0  smp-enabled  ibm,drc-indexes        ibm,phandle    PowerPC,POWER6@2  ibm,drc-names          linux,phandle  PowerPC,POWER6@4  ibm,drc-power-domains  name           #size-cells    查看 sysfs 文件系統:  uli13lp2:~ # find /sys/devices/system/cpu -name purr  /sys/devices/system/cpu/cpu5/purr  /sys/devices/system/cpu/cpu4/purr  /sys/devices/system/cpu/cpu3/purr  /sys/devices/system/cpu/cpu2/purr  /sys/devices/system/cpu/cpu1/purr  /sys/devices/system/cpu/cpu0/purr  

暫掛值的約束關係

在處理器 DLPAR 中,暫掛值必須滿足一定的約束關係,否則 IVM 會檢測並報告錯誤,導致該次 DLPAR 操作不能順利完成。在專用處理器模式(Dedicated Mode)下,有效的暫掛值必須滿足如下條件:處理器的最小值 < = 已分配的處理器的暫掛值 < = 處理器的最大值。而在共享處理器模式(Shared Mode)下,這種約束關係則更加複雜,不僅有處理單元數值之間的約束關係,虛擬處理器數值之間的約束關係,還有兩者之間的約束關係:

  1. 處理單元數之間的約束關係:處理單元的最小值 < = 已分配的處理單元的暫掛值 < = 處理單元的最大值
  2. 虛擬處理器數之間的約束關係:虛擬處理器的最小值 < = 已分配的虛擬處理器的暫掛值 < = 虛擬處理器的最大值
  3. 處理單元數和虛擬處理器數之間的約束關係:0.1 < = 處理單元數 / 虛擬處理器數 < = 1.0,處理單元數和虛擬處理器數的最小值、已分配和最大值這三組數值都必須滿足該關係,即
  1. 0.1 < = 處理單元的最小值 / 虛擬處理器的最小值 < = 1.0,且
  2. 0.1 < = 已分配的處理單元的暫掛值 / 已分配的虛擬處理器的暫掛值 < = 1.0,且
  3. 0.1 < = 處理單元的最大值 / 虛擬處理器的最大值 < = 1.0




內存 DLPAR 操作

操作方式

要使用圖形界面執行內存 DLPAR,首先打開分區屬性,然後選擇“內存”標籤,就可以看到如圖4所示的頁面。從圖中可見,分區 uli13lp2 當前所佔用的內存是 1GB。要進行內存 DLPAR,用戶在“暫掛值”欄中輸入期望分配到的內存數量,然後點擊“確定”按鈕。內存 DLPAR 的暫掛值必須滿足如下關係:1)最小內存 < = 分配的內存的暫掛值 < = 最大內存;2)暫掛值必須是 LMB(Logical Memory Block)大小的整數倍,在這裡,LMB 大小是 32MB,用戶可以在“查看/修改系統屬性”頁面 -> “內存”標籤 -> “Memory Region Size”區域中查看或修改 LMB 的大小。當暫掛值大於當前已分配的內存數量時,IVM 執行 DLPAR 增加操作;當暫掛值小於當前已分配的內存數量時,執行 DLPAR 刪除操作;與處理器類似,IVM 也不提供內存 DLPAR 移動操作。

在本例中,新的暫掛值為 1056MB,也就是說增加 32MB 內存。雖然 SLES10 SP2 不支持內存的 DLPAR 刪除操作,但是由於支持增加操作,因此內存 DLPAR 能力處於激活狀態,而且 IVM 並不限制用戶使用比當前值小的暫掛值。當用戶使用了比當前值小的暫掛值進行內存 DLPAR 時,IVM 顯示內存的不同步狀態。由於 SLES10 SP2 不支持內存 DLPAR 刪除操作,因此 DLPAR Manager 不可能在 Linux 分區運行時完成內存資源同步,用戶只能關閉然後激活分區來使該暫掛值生效。


圖 4:通過圖形界面進行內存 DLPAR 操作

同處理器 DLPAR 操作一樣,用戶也可以使用命令 chsyscfg 或 chhwres 進行內存 DLPAR 操作。內存和處理器 DLPAR 操作的命令行非常類似,清單4顯示了使用命令行操作方式的一個例子,讀者可以查看用戶手冊了解更多的選項,這裡不再贅述。


清單 4:使用命令 chsyscfg 和 chhwres 進行內存 DLPAR 操作
DPLAR 前 uli13lp2 的內存配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2" \   -F min_mem,desired_mem,max_mem  128,1024,1280  $ lshwres -r mem --level lpar --filter "lpar_names=uli13lp2"  \  -F curr_min_mem,curr_mem,curr_max_mem  128,1024,1280    用 chsyscfg 增加內存:  $ chsyscfg -r prof -i "lpar_name=uli13lp2,desired_mem+=32"    chsyscfg 后 uli13lp2 的內存配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2"  \  -F min_mem,desired_mem,max_mem  128,1056,1280  $ lshwres -r mem --level lpar --filter "lpar_names=uli13lp2"   \  -F curr_min_mem,curr_mem,curr_max_mem  128,1056,1280    用 chhwres 增加內存:	  $ chhwres -r mem -o a -p uli13lp2 -q 32    chhwres 后 uli13lp2 的內存配置:  $ lssyscfg -r prof --filter "lpar_names=uli13lp2"  \  -F min_mem,desired_mem,max_mem  128,1088,1280  $ lshwres -r mem --level lpar --filter "lpar_names=uli13lp2"  \  -F curr_min_mem,curr_mem,curr_max_mem  128,1088,1280  

結果的驗證

清單5和6顯示了上述內存 DLPAR(增加 32MB 內存)前後 Linux 操作系統上內存信息的變化。這裡同樣使用了與處理器類似的4種不同的查看方式,用戶可以選擇合適的或者其它可行的方式。由於文件 lparcfg 和 meminfo 以及命令 free 等查看方式簡單明了,這裡就不再詳細解釋了,讓我們來看看 open firmware 設備樹和 sysfs 在 DLPAR 前後的變化。

  • open firmware 設備樹:在設備樹的根目錄 /proc/device-tree/ 下,存在著若干以“memory@”開頭的子目錄名稱。每個子目錄代表了一個特定的內存區域,子目錄下的 reg 文件記錄了該區域的起始地址和大小(見參考資料4《PowerPC Microprocessor Common Hardware Reference Platform (CHRP) Binding》中的5.4.1節),子目錄名稱中“memory@”後面的16進位數字部分表明了該區域的起始地址。比如“memory@0 ”代表了一個起始地址為0(0000 0000 0000 0000),大小為 128MB(0000 0000 0800 0000)的內存區域;而其它內存區域(如memory@8000000)的大小則為 32MB,與 LMB 大小相同。這樣在 DLPAR 前,內存的大小為 128MB * 1 + 32MB * 28 = 1GB。在 DLPAR 后,設備樹中增加了一個大小為 32MB 的內存區域 memory@4e000000,顯然,這符合我們的預期。“memory@0 ”用於系統啟動過程中的實模式,通常由若干個連續的 LMB 組成(見參考資料5《Logical Partitions on IBM PowerPC》中的2.3.2節),因此該區域通常大於其它內存區域。注意:不同的固件版本可能以不同方式組織設備樹,因此在其它環境下 Linux 所導出的 open firmware 設備樹可能與讀者在本文中見到的不一樣。
  • sysfs 文件系統:sysfs 也記錄了一些跟內存相關的信息,在 SLES10 SP2 中,這些信息存放在目錄 /sys/devices/system/memory/ 下(其它 Linux 版本可能用不同的方式記錄內存信息,用戶可以針對具體的版本在 /sys/ 目錄下搜索與內存相關的文件)。該目錄下有若干以“memory”為開頭的子目錄名稱,每個子目錄也代表了一個特定的內存區域。與上述 open firmware 設備樹所描述的內存區域不同,這裡的區域是 Linux 對內存的邏輯劃分。每個內存區域大小相等,文件 block_size_bytes 存儲了該大小的值。在 uli13lp2 上該值是 16MB,因此 DLPAR 前內存的大小為 16MB * 64 = 1GB;DLPAR 后增加的 memory64 和 memory65 表明內存增量為 32MB,也就是說上述內存 DLPAR 是成功的。

清單 5:內存 DLPAR 前
查看 proc 文件系統中的 lparcfg 文件:  uli13lp2:~ # cat /proc/ppc64/lparcfg | grep DesMem  DesMem=1024    查看 proc 文件系統中的 meminfo 文件或用 free 命令:  uli13lp2:~ # cat /proc/meminfo | grep MemTotal  MemTotal:      1011732 kB  uli13lp2:~ # free -k               total    used       free     shared    buffers     cached  Mem:       1011732    248672     763060          0      43556     144660  -/+ buffers/cache:      60456     951276  Swap:            0          0          0    查看 proc 文件系統中的 open firmware 設備樹:  uli13lp2:~ # ls /proc/device-tree/  #address-cells              ibm,drc-types                      ibm,migratable-partition  memory@0    memory@28000000  memory@a000000  aliases                      ibm,eeh-default                    ibm,model-class      memory@10000000  memory@2a000000  memory@c000000  chosen                       ibm,enable-ci64-capable           ibm,partition-name   memory@12000000  memory@2c000000  memory@e000000  clock-frequency            ibm,extended-address               ibm,partition-no   memory@14000000  memory@2e000000  model  compatible    ibm,extended-clock-frequency  ibm,partition-performance-parameters-level  memory@16000000  memory@30000000  name  cpus                          ibm,fault-behavior                ibm,pci-full-cfg     memory@18000000  memory@32000000  openprom  device_type                 ibm,fru-9006-deactivate          ibm,phandle     memory@1a000000  memory@34000000  options  event-sources         ibm,fw-bytes-per-boot-device    ibm,platform-hardware-notification  memory@1c000000  memory@36000000  packages  ibm,aix-diagnostics        ibm,fw-net-compatibility         ibm,plat-res-int-priorities     memory@1e000000  memory@38000000  rtas  ibm,converged-loc-codes   ibm,fw-net-version                ibm,preconfigure-usb-kvm    memory@20000000  memory@3a000000  #size-cells  ibm,drc-indexes             ibm,lpar-capable                  ibm,serial      memory@22000000  memory@3c000000  system-id  ibm,drc-names               ibm,max-boot-devices              interrupt-controller@0        memory@24000000  memory@3e000000  vdevice  ibm,drc-power-domains     ibm,max-vios-function-level      linux,phandle    memory@26000000  memory@8000000  uli13lp2:~ # ls /proc/device-tree/memory@0  #address-cells available device_type  ibm,associativity  ibm,phandle linux,phandle name    reg  #size-cells  uli13lp2:~ # xxd /proc/device-tree/memory@0/reg  0000000: 0000 0000 0000 0000 0000 0000 0800 0000  ................  uli13lp2:~ # ls /proc/device-tree/memory@8000000  device_type  ibm,associativity  ibm,my-drc-index  ibm,phandle  linux,phandle  name  reg  uli13lp2:~ # xxd /proc/device-tree/memory@8000000/reg  0000000: 0000 0000 0800 0000 0000 0000 0200 0000  ................    查看 sysfs 文件系統:  uli13lp2:~ # ls /sys/devices/system/memory/  block_size_bytes   memory17  memory26  memory35  memory44  memory53  memory62  memory0           memory18  memory27  memory36  memory45  memory54  memory63  memory1           memory19  memory28  memory37  memory46  memory55  memory7  memory10          memory2   memory29  memory38  memory47  memory56  memory8  memory11          memory20  memory3   memory39  memory48  memory57  memory9  memory12          memory21  memory30  memory4   memory49  memory58  probe  memory13          memory22  memory31  memory40  memory5   memory59  memory14          memory23  memory32  memory41  memory50  memory6  memory15          memory24  memory33  memory42  memory51  memory60  memory16          memory25  memory34  memory43  memory52  memory61  uli13lp2:~ # cat /sys/devices/system/memory/block_size_bytes  1000000  


清單 6:內存 DLPAR 后
查看 proc 文件系統中的 lparcfg 文件:  uli13lp2:~ # cat /proc/ppc64/lparcfg | grep DesMem  DesMem=1056    查看 proc 文件系統中的 meminfo 文件或用 free 命令:  uli13lp2:~ # cat /proc/meminfo | grep MemTotal  MemTotal:      1044500 kB  uli13lp2:~ # free -k               total       used       free     shared    buffers     cached  Mem:       1044500     276140     768360         0      43560     144656  -/+ buffers/cache:      60692     983808  Swap:            0          0          0    查看 proc 文件系統中的 open firmware 設備樹:  uli13lp2:~ # ls /proc/device-tree/  #address-cells              ibm,drc-types                      ibm,migratable-partition  memory@0          memory@28000000  memory@8000000  aliases                      ibm,eeh-default                    ibm,model-class   memory@10000000  memory@2a000000  memory@a000000  chosen                       ibm,enable-ci64-capable           ibm,partition-name   memory@12000000  memory@2c000000  memory@c000000  clock-frequency            ibm,extended-address               ibm,partition-no   memory@14000000  memory@2e000000  memory@e000000  compatible    ibm,extended-clock-frequency     ibm,partition-performance-parameters-level  memory@16000000  memory@30000000  model  cpus                          ibm,fault-behavior                ibm,pci-full-cfg   memory@18000000  memory@32000000  name  device_type                 ibm,fru-9006-deactivate          ibm,phandle    memory@1a000000  memory@34000000  openprom  event-sources       ibm,fw-bytes-per-boot-device    ibm,platform-hardware-notification    memory@1c000000  memory@36000000  options  ibm,aix-diagnostics        ibm,fw-net-compatibility         ibm,plat-res-int-priorities   memory@1e000000  memory@38000000  packages  ibm,converged-loc-codes   ibm,fw-net-version                ibm,preconfigure-usb-kvm  memory@20000000  memory@3a000000  rtas  ibm,drc-indexes             ibm,lpar-capable                  ibm,serial       memory@22000000  memory@3c000000  #size-cells  ibm,drc-names               ibm,max-boot-devices              interrupt-controller@0    memory@24000000  memory@3e000000  system-id  ibm,drc-power-domains     ibm,max-vios-function-level      linux,phandle    memory@26000000  memory@4e000000 vdevice  uli13lp2:~ # xxd /proc/device-tree/memory@4e000000/reg  0000000: 0000 0000 4e00 0000 0000 0000 0200 0000  ....N...........    查看 sysfs 文件系統:    uli13lp2:~ # ls /sys/devices/system/memory/  block_size_bytes  memory12  memory17  memory21  memory26  memory30  memory35  memory4     memory44  memory49  memory53  memory58  memory62   memory8  memory0             memory13  memory18  memory22  memory27  memory31  memory36  memory40    memory45  memory5   memory54  memory59  memory63   memory9  memory1             memory14  memory19  memory23  memory28  memory32  memory37  memory41    memory46  memory50  memory55  memory6   memory64   probe  memory10            memory15  memory2   memory24  memory29  memory33  memory38  memory42    memory47  memory51  memory56  memory60  memory65  memory11            memory16  memory20  memory25  memory3   memory34  memory39  memory43    memory48  memory52  memory57  memory61  memory7  





約束關係的進步一討論

在 HMC 上,處理器和內存 DLPAR 受限於最小值和最大值,處理器或者內存的當前數量不能夠小於最小值,同時不能夠大於最大值。從上述討論中我們知道,IVM 上處理器和內存的 DLPAR 也要遵循類似的約束關係,但是由於 IVM 上的 DLPAR 存在暫掛值的概念,因此這種約束關係變得更加複雜。

在本文前面所舉的例子中,處理器和內存的最小值或最大值的當前值和暫掛值是相同的。由於 IVM 的圖形界面不允許用戶修改最小值和最大值的暫掛值(如圖5所示),因此這一條件通常是成立的。但是,用戶仍然可以使用命令行去修改這些暫掛值(見清單7),由於 Linux 分區運行時 DLPAR Manager 並不同步這些值,因此最小值和最大值的當前值和暫掛值總是處於不一致的狀態(只有當分區被關閉時,這些暫掛值才被同步到當前值)。在這種情況下,處理器和內存 DLPAR 是否還存在其它限制條件呢?下面就以處理器為例進行討論,所得到的結論同樣適用於內存 DLPAR。


清單 7:修改最小值和最大值的暫掛值
$ lshwres -r proc --level lpar --filter "lpar_names=uli13lp2"  \  -F pend_min_proc_units,pend_proc_units,pend_max_proc_units, \  pend_min_procs,pend_procs,pend_max_procs  0.10,0.20,0.40,1,2,4  $ chsyscfg -r prof -i "lpar_name=uli13lp2,min_proc_units=0.2,max_proc_units=0.6"  $ lshwres -r proc --level lpar --filter "lpar_names=uli13lp2"   \  -F pend_min_proc_units,pend_proc_units,pend_max_proc_units,  \  pend_min_procs,pend_procs,pend_max_procs  0.20,0.20,0.60,1,2,4  

在清單 7 中,我們把處理單元數最小值和最大值的暫掛值從 0.1 和 0.4 分別修改成 0.2 和 0.6,在圖 5 中可以看到當前值和暫掛值處於不一致狀態。在圖 5 所示的頁面中,我們把已分配的處理單元數的暫掛值修改成 0.1,點擊“確定”按鈕后 IVM 報告錯誤。顯然,本文“處理器 DLPAR 操作”一節所討論的處理器 DLPAR 所必須遵循的約束關係仍然有效,但是需要注意的是,已分配處理單元的暫掛值受限於最小和最大值的暫掛值,而不是它們的當前值,因此約束關係修正為:處理單元的最小值的暫掛值 < = 已分配的處理單元的暫掛值 < = 處理單元的最大值的暫掛值(其它約束關係也必須做類似的修正)。

接著,我們把已分配的處理單元數的暫掛值修改成 0.6 並確認,這次 IVM 沒有報告任何錯誤。再次打開屬性頁面(如圖 6 所示),我們可以看到,暫掛值修改成功(值為 0.6)並被同步到了當前值,但是由於最大值的當前值的限制,已分配的處理單元數的當前值被同步成0.4而不是0.6。由此可見,在處理器和內存 DLPAR 過程中,不僅在 chsyscfg 或 chhwres 執行過程中所有暫掛值必須遵循上述的約束關係,而且在 DLPAR Manager 進行同步的過程中,所有當前值也必須遵循該約束關係。


圖 5:修改已分配的處理單元數的暫掛值


圖 6:增加已分配的處理單元數的暫掛值之後





小結

本系列文章介紹了 IBM 集成虛擬化管理器 — IVM 上 Linux 邏輯分區的 DLPAR,本文是其中的第二部分,介紹了處理器和內存 DLPAR 的圖形界面和命令行操作方式、在 Linux 分區上確認 DLPAR 是否成功執行的方法、以及處理器和內存 DLPAR 過程中的各種約束關係。我們將在本系列文章的後續篇章中分別介紹適配器、虛擬磁碟和光學設備等其它各種資源的 DLPAR 操作過程。(責任編輯:A6)






[火星人 via ] 在 IBM 集成虛擬化管理器上進行 Linux 分區的 DLPAR 操作,第 2 部分已經有213次圍觀

http://www.coctec.com/docs/linux/show-post-68967.html