WEB开发网
开发学院操作系统Linux/Unix IBM Power 服务器上动态逻辑分区操作的若干制约因... 阅读

IBM Power 服务器上动态逻辑分区操作的若干制约因素,第 2 部分: 内存篇

 2010-02-01 00:00:00 来源:WEB开发网   
核心提示:动态逻辑分区(DLPAR)技术是 IBM Power服务器的一项重要的虚拟化特性,可以在分区运行的情况下动态调整逻辑分区资源的分配,IBM Power 服务器上动态逻辑分区操作的若干制约因素,第 2 部分: 内存篇,从而满足不断变化的业务需求,DLPAR 操作的过程或者结果受到一些因素的制约或影响,本文介绍了内存 DL

动态逻辑分区(DLPAR)技术是 IBM Power服务器的一项重要的虚拟化特性,可以在分区运行的情况下动态调整逻辑分区资源的分配,从而满足不断变化的业务需求。DLPAR 操作的过程或者结果受到一些因素的制约或影响,用户应该清楚的知道这些因素,才能在 DLPAR 操作出现问题的时候从容应对。本系列文章探讨了 Power 服务器逻辑分区上 DLPAR 操作的各种典型的制约或影响因素,使读者对 DLPAR 操作有更加深入的认识。

本系列文章的第一部分介绍了处理器 DLPAR 操作过程中的各种制约或影响因素,本文将继续探讨内存 DLPAR 操作的制约因素。内存 DLPAR 操作过程和处理器 DLPAR 有不少类似的地方,两者之间也有一些类似的制约因素,比如操作系统所支持的最大处理器或者最大内存、系统当前空闲的资源,以及最小值和最大值的限制等。同时,POWER Hypervisor 以逻辑内存块为单位对系统内存进行管理和分配,主机通道适配器或者主机以太网适配器的存在对内存 DLPAR 操作也存在影响。还有,并非所有内存块都是可删除的,也不是所有内存 DLPAR 删除操作都能够成功执行。

操作系统的内存限制

表 1 显示了 AIX、RHEL 和 SLES 若干版本的最小内存要求和最大内存限制。同处理器的限制一样,最大内存值也有验证值和理论值。通常一个逻辑分区的内存控制在几个 GB 到几十个 GB 之间,因此这些操作系统支持的最大内存基本上是足够的。受到设备数量、进程数量以及性能要求等诸多因素的影响,在服务器环境下,AIX 或 Linux 对最小内存也是有一定要求的。为了保证系统的高效稳定运行,分区所配置的内存应该大于操作系统要求的最小内存数量。

表 1. 操作系统对 Power 服务器逻辑分区内存配置的要求

版本 最大内存 最小内存
AIX 5.2 16TB 256MB
AIX 5.3 及以上 16TB 128MB
AIX 6 32TB 128MB
RHEL 4 128GB(经过验证的) / 1TB(理论上的) 512MB
RHEL5 512GB(经过验证的) / 1TB(理论上的) 1GB,推荐 2GB
SLES10 512GB(经过验证的) / 1PB(理论上的) 512MB
SLES11 512GB(经过验证的) / 1PB(理论上的)   512MB

系统空闲的内存

在 PowerVM 虚拟化中,Power 服务器的物理内存由 Hypervisor 统一管理,图 1 显示了物理内存的分配情况。Hypervisor 是运行在比分区操作系统更高的运行级别上的一个底层系统,它本身也占用了一些内存,因此服务器内存有一部分被保留来供 Hypervisor 使用。分区所占用的物理内存包括两部分:一部分是分区操作系统所能看到的分区物理内存;另外一部分是用于分区页面映射的硬件页表,它虽被分区使用,却由 Hypervisor 控制,以确保分区之间不能互相访问对方的物理内存。除掉系统保留内存和分区已分配的内存,剩下的就是系统空闲的内存了,可供 DLPAR 添加操作使用。

图 1. Power 服务器的物理内存分配

与处理器 DLPAR 类似,内存 DLPAR 添加操作受系统空闲内存的约束。图 2 是 HMC 上的内存 DLPAR 添加操作界面,页面显示系统剩余的内存为 80GB;但是图 3 显示的系统当前剩余的内存却是 75GB。这说明,与系统空闲的处理器一样,不同方式计算出来的结果并不相同。在 fsp-spike 中,spikelp5 和 taplp2 处于未激活状态,两个分区总共配置了 5GB 内存,这些内存也是空闲的,因此系统空闲的内存应该是 80GB。可见,在 HMC 所管理的 Power 服务器上,空闲内存的数量应以内存 DLPAR 操作界面显示的数值为准。

图 2. HMC 的内存 DLPAR 添加操作界面


图 3. HMC 管理的 POWER6 实验系统的内存资源

在本系列文章第一部分的图 5 中,POWER5 实验系统 fsp-gallus 当前剩余的内存是 2.5GB,分区 galluslp2 处于未激活状态,使用了 4GB 的内存。在图 4 所示的 IVM 内存 DLPAR 操作界面中,试图把已分配的内存增加到 6GB,即添加 3GB 的内存,结果 IVM 拒绝了该操作,错误信息表明系统空闲的内存为 2.5GB。由此看来,即使分区处于未激活状态,所占用的内存也不能释放出来供其它分区使用。如果想要释放部分内存,可以先减少该分区已分配的内存数量,激活该分区,然后再关闭该分区。

图 4. IVM 的内存 DLPAR 操作界面

  查看原图(大图)

最小值和最大值

在 HMC 上,内存 DLPAR 操作也受到最小值和最大值的约束(如下关系所示),相比处理器 DLPAR,这种限制简单了很多。从参考资料 2 中可知,在 IVM 上,内存的最小值、期望值和最大值均存在暂挂值和当前值。三个暂挂值之间要满足上述约束关系,用于控制命令 chsyscfg 或 chhwres 对内存暂挂值的修改;三个当前值之间也要满足该限制,用于控制 DLPAR Manager 执行的内存暂挂值到当前值的同步过程。

内存的最小值 < = 期望的内存 < = 内存的最大值

本系列文章的第一部分探讨了处理器的最小值和最大值是否能动态修改的问题,内存是否也有相同的行为呢?在 HMC 所管理的分区 spikelp2 的概要文件中,将内存的最大值从 8GB 修改成 10GB(如图 5 所示),然后进行内存 DLPAR 操作,试着将已分配的内存调整成 10GB(如图 6 所示),HMC 拒绝了该操作(如图 7 所示)。这说明,在 HMC 上内存的最小值和最大值不能动态修改。对于 IVM,从参考资料 2 中可知,最小值和最大值的暂挂值可以动态修改,但是它们的当前值却只能在分区重启或者关闭的时候才能从暂挂值中同步过来。

图 5. 修改分区概要文件的内存最大值


图 6. 验证新的最大值是否动态生效


图 7. 新的内存最大值不能动态生效

逻辑内存块的大小

和通用操作系统类似,Hypervisor 也是以一定内存大小为单位对物理内存进行管理的,称为逻辑内存块(如图 8 所示)。在 Power 服务器中,逻辑内存块的大小是可以调整的,通过 ASMI(Advanced System Management Interface)进行设置,不过需要重启服务器才能生效。当逻辑内存块较小时,内存碎片较小,内存使用率较高,但是页面映射效率较低,可能降低分区性能;反之,页面映射效率较高,但是可能降低内存的使用率。在当分区启动的时候,Hypervisor 根据分区概要文件的定义分配若干内存块,然后映射到分区的逻辑内存地址空间,其中分区的逻辑内存地址空间的低端必须映射到连续的物理内存,供启动过程中的实模式使用。在内存 DLPAR 操作过程中,必须以逻辑内存块的大小为单位进行内存的增加、删除或者移动等操作。

图 8. Power 服务器的内存虚拟化

Infiniband 主机通道适配器

Infiniband 主机通道适配器(HCA:Host Channel Adapters)是直接安装在服务器内部的接口,提供处理器、Infiniband fabric 和服务器内存之间的通信。图 9 显示了一个安装有 HCA 适配器的 POWER6 服务器逻辑分区,在图 10 所示的页面中进行内存 DLPAR 操作,试着添加 128MB 内存,从图 11 可见,内存 DLPAR 操作失败。在带有 Infiniband 的逻辑分区上,不同版本的操作系统对内存 DLPAR 的支持有所不同。从参考资料 7 中可知,AIX5.3 不支持这种内存 DLPAR 操作;而实验表明 AIX6 支持该操作。

图 9. 带有 Infiniband HCA 适配器的逻辑分区

  查看原图(大图)

图 10. 在分区上进行内存 DLPAR 操作


图 11. 内存 DLPAR 操作失败

与 AIX 相比,Linux 在安装了 Infiniband 的逻辑分区上对内存 DLPAR 的支持更加糟糕,目前还没有任何 Linux 版本支持该操作。清单 1 中,drslot_chrp_mem 是内存 DLPAR 操作在 Linux 分区端所执行的命令,在分区安装了 HCA 的情况下,Linux 拒绝任何内存 DLPAR 操作。该限制在 SLES11 的发行说明里面有所描述:只要 HCA 设备驱动已经加载,Linux 就会拒绝内存 DLPAR 操作;用户可以在进行 DLPAR 操作之前卸载 HCA 设备驱动,在 DLPAR 之后重新加载该模块,虽然这样可以完成内存 DLPAR 操作,但是 HCA 适配器的初始化可能会失败,如果遇到这种情况,必须先关闭然后再重新激活分区从错误中恢复过来。如果用户发现内存 DLPAR 操作失败,可以通过查看文件 /var/log/messages 来确认是否受到 HCA 模块的影响。

清单 1. SLES11 上 drmgr 命令的错误信息

  discolp3:~ # cat /etc/issue 
 
Welcome to SUSE Linux Enterprise Server 11 (ppc64) - Kernel \r (\l). 
 
discolp3:~ # tail -f /var/log/messages 
 
… 
 
Jan 4 20:39:29 discolp3 : drmgr: drslot_chrp_mem -a -c mem -q 1 -w 5 -d 1 
 
Jan 4 20:39:29 discolp3 kernel: PU0001 EHCA_ERR:ehca_mem_notifier DMEM operations 
are not allowed in conjunction with eHCA 

主机以太网适配器

主机以太网适配器(HEA:Host Ethernet Adapter)是一种在 POWER6 服务器中广泛使用的网络适配器。一个 HEA 物理适配器可以虚拟出若干个逻辑适配器,通过 HMC 直接分配给分区使用,使多个分区能够共享同一个物理设备。与通过 VLAN 和 VIOS SEA(Share Ethernet Adapter)间接共享和使用物理网卡不同,分区直接访问 HEA,提高了网络的吞吐率。

跟 HCA 类似,在带有 HEA 的逻辑分区上,不同的操作系统版本对内存 DLPAR 操作的支持有所不同。AIX 支持这种操作;而虽然 Redhat 和 Novell/SUSE 分别从 RHEL5 和 SLES10 开始就支持内存的 DLPAR 添加操作,但是只有 RHEL5 U2 和 SLES10 SP2 或者更高版本的 Linux(比如 SLES11)才支持带有 HEA 的内存 DLPAR 操作。当 RHEL 和 SLES 的版本低于上述要求时,Linux 拒绝内存 DLPAR 操作,清单 2 显示了出错时 HMC 上所显示的信息。

清单 2. 当 HEA 不支持内存 DLPAR 添加操作时的 HMC 错误信息

HSCL2931 DLPAR ADD Memory resources failed: 
 
drslot_chrp_mem: Memory DLPAR is not supported on partitions using HEA adapters 

可删除的逻辑内存块

从上面讨论可知,执行内存 DLPAR 删除操作时,分区当前分配的内存不能小于最小内存值。这是否也意味着通过内存 DLPAR 就一定能把当前内存删除到最小内存值呢?为了举例说明,这里使用了一个最小内存为 2GB 的逻辑分区,当前内存为 5GB 512MB。图 12 中,把当前内存从 5GB 512MB 修改成 4GB,即试图删除掉 1GB 512MB。按照前面讨论的最小值和最大值的限制,分区最多可以删除 3GB 512MB 内存,因此该操作看起来似乎应该可以成功。但是实际上,图 13 提示内存操作失败,HMC 所输出的错误信息表明该分区中可删除的内存不足。

图 12. 试图删除 1GB 512MB 内存


图 13. 内存 DLPAR 删除操作失败

当执行内存 DLPAR 删除操作的时候,操作系统以逻辑内存块为单位进行操作,也就是说,如果所要删除的内存数量较大时,操作系统将其划分成多个逻辑内存块分别进行操作。对于每个内存块,操作系统首先要找到一些空闲的内存,把所要删除的内存块中的内容拷贝到空闲内存,然后释放源逻辑内存块。删除操作是否能够成功,要看操作系统能否找到足够的资源来完成数据的移动,并且移动过程不能出错。并非所有内存删除操作都能成功执行,当空闲内存较多时,删除操作成功的概率较大,反之较小。 AIX 和 Linux 并不提供某种方式能够精确的告知用户当前系统有多少内存一定可以删掉,用户可以通过 DLPAR 的输出信息来判断是否还有可以删除的内存。

小结

继本系列文章第一部分讨论了处理器 DLPAR 的制约因素后,本文介绍了内存 DLPAR 操作过程中的各种制约或影响因素,包括操作系统所支持的最大内存和对最小内存配置的要求、系统空闲的内存、内存配置的最小值和最大值和逻辑内存块的大小;主机通道适配器、主机以太网适配器和可删除的逻辑内存块等因素也制约着内存 DLPAR 操作。我们将在文章的第三部分中阐述适配器 DLPAR 操作的制约因素。

Tags:IBM Power 服务器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接