動態邏輯分區(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所示的分區屬性頁面。用戶可以通過以下方式打開該頁面:
要執行處理器 DLPAR 操作,首先打開分區屬性,然後選擇“處理”標籤,就可以看到如圖1所示的頁面。從圖中“處理單元數”和“虛擬處理器數”區域的“當前”欄可見,分區 uli13lp2 當前已分配的處理單元數是0.2,而虛擬處理器數是2。用戶通過修改“暫掛”欄中的值,然後點擊“確定”按鈕就可以進行處理器資源的 DLPAR 增加或者刪除操作(IVM 不提供邏輯分區之間的處理器 DLPAR 移動操作,用戶可以組合使用刪除和增加兩種操作來達到相同的目的)。在這裡,我們分別輸入新的暫掛值0.3和3,即增加0.1個處理器單元和1個虛擬處理器,用戶可以輸入比當前值小的暫掛值來刪除處理器資源。
從本系列文章第一部分中“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 也會以相同方式告知用戶。
命令行操作方式
除了上述圖形界面操作方式之外,用戶還可以使用命令 chsyscfg 或 chhwres 進行處理器 DLPAR。清單 1 顯示了使用命令行操作方式的一個例子,讀者可以通過查看用戶手冊了解更多的選項。兩個命令實現相同的處理器 DLPAR 功能,圖形方式下處理器和內存 DLPAR 所使用後台命令是 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種不同的查看方式,用戶可以選擇自己喜歡的方式。
查看 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 |
查看 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)下,這種約束關係則更加複雜,不僅有處理單元數值之間的約束關係,虛擬處理器數值之間的約束關係,還有兩者之間的約束關係:
內存 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 分區運行時完成內存資源同步,用戶只能關閉然後激活分區來使該暫掛值生效。
同處理器 DLPAR 操作一樣,用戶也可以使用命令 chsyscfg 或 chhwres 進行內存 DLPAR 操作。內存和處理器 DLPAR 操作的命令行非常類似,清單4顯示了使用命令行操作方式的一個例子,讀者可以查看用戶手冊了解更多的選項,這裡不再贅述。
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 前後的變化。
查看 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 |
查看 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。
$ 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 進行同步的過程中,所有當前值也必須遵循該約束關係。
小結
本系列文章介紹了 IBM 集成虛擬化管理器 — IVM 上 Linux 邏輯分區的 DLPAR,本文是其中的第二部分,介紹了處理器和內存 DLPAR 的圖形界面和命令行操作方式、在 Linux 分區上確認 DLPAR 是否成功執行的方法、以及處理器和內存 DLPAR 過程中的各種約束關係。我們將在本系列文章的後續篇章中分別介紹適配器、虛擬磁碟和光學設備等其它各種資源的 DLPAR 操作過程。(責任編輯:A6)
[火星人 ] 在 IBM 集成虛擬化管理器上進行 Linux 分區的 DLPAR 操作,第 2 部分已經有965次圍觀