分享

在 IBM 集成虚拟化管理器上进行 Linux 分区的 DLPAR 操作,第 2 部分

 soulhiking 2012-05-18

在 IBM 集成虚拟化管理器上进行 Linux 分区的 DLPAR 操作,第 2 部分

处理器和内存 DLPAR

沈 林峰, 软件工程师, IBM
冯 苗涛 (fengmt@cn.ibm.com), 软件工程师, IBM

简介: 动态逻辑分区(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 命令修改暂挂值和 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 的同步
处理器 DLPAR 的同步

图 3:处理器 DLPAR 详细的同步信息
处理器 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 操作

同处理器 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 操作过程。

声明:本文仅代表作者个人之观点,不代表 IBM 公司之观点。

IBM 和 System p 是国际商业机器公司在美国和/或其他国家或地区的商标或注册商标。


参考资料

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多