动态逻辑分区(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)下,这种约束关系则更加复杂,不仅有处理单元数值之间的约束关系,虚拟处理器数值之间的约束关系,还有两者之间的约束关系:
- 处理单元数之间的约束关系:处理单元的最小值 < = 已分配的处理单元的暂挂值 < = 处理单元的最大值
- 虚拟处理器数之间的约束关系:虚拟处理器的最小值 < = 已分配的虚拟处理器的暂挂值 < = 虚拟处理器的最大值
- 处理单元数和虚拟处理器数之间的约束关系:0.1 < = 处理单元数 / 虚拟处理器数 < = 1.0,处理单元数和虚拟处理器数的最小值、已分配和最大值这三组数值都必须满足该关系,即
- 0.1 < = 处理单元的最小值 / 虚拟处理器的最小值 < = 1.0,且
- 0.1 < = 已分配的处理单元的暂挂值 / 已分配的虚拟处理器的暂挂值 < = 1.0,且
- 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)