DLPAR 脚本执行的操作

对添加和除去操作都会启动应用程序脚本。

在除去资源时,提供了脚本以解决由防止资源被除去的应用程序所带来的强制条件。 特定的处理器绑定的出现和可固定内存的缺少可能造成除去请求失败。 提供了一组命令以标识这些情况,以便撰写脚本来解决它们。

要识别并解析 DLPAR 依赖关系,可以使用以下命令:
  • ps 命令显示过程级别上的 bindprocessor 连接和 plock 系统调用状态。
  • bindprocessor 命令显示联机处理器并创建新的连接。
  • kill 命令将信号发送到进程。
  • ipcs 命令在显示过程级别上的固定共享内存段。
  • lsrset 命令显示处理器组。
  • lsclass 命令显示 Workload Manager 类,这些类可能包含处理器集。
  • chclass 命令用于更改类定义。

脚本还可用于可伸缩性和通用性能方面。 资源被除去时,可以减少所使用线程的数量或应用程序缓冲区的大小。 当资源被添加时,可增加这些参数。 可以提供可用于动态地进行调整的命令,它们命令由这些脚本触发。 安装脚本以在 DLPAR 操作的上下文中启动这些命令。

DLPAR 脚本的高级别结构

本节提供了对脚本(可能是 Perl 脚本、shell 脚本或命令)的概述。 应用程序脚本需要提供以下命令:
  • scriptinfo

    标识版本、日期和脚本的供应商。 它在安装脚本时被调用。

  • 注册

    标识由脚本管理的资源。 如果脚本返回资源名称 cpumemcapacityvar_weight,当 DLPAR 尝试重新配置处理器,内存和 授权容量或可变权重。 当脚本随 DLPAR 子系统一起安装时,将调用 register 命令。

  • 用法 resource_name

    返回描述应用程序如何使用资源的信息。 此描述应该是相关的以便用户可以确定是否安装或卸载该脚本。 它应该标识受影响的应用程序的软件能力。 对每个由 register 命令标识的资源调用 usage 命令。

  • checkrelease 资源名称

    指示 DLPAR 子系统是否应继续除去指定的资源。 如果应用程序不具有 DLPAR感知能力,并且该应用程序被视为对系统操作至关重要,那么脚本可能指示不应移除该资源。

  • 预发行版 resource_name

    重新配置、暂挂或终止应用程序,以便释放它对命名的资源的控制。

  • 发布后 resource_name

    继续或重新启动应用程序。

  • undoprerelease resource_name

    在遇到错误且资源没有释放时启动该命令。

  • 检查获取 resource_name

    指示 DLPAR 子系统是否应继续添加资源。 许可证管理器可使用它以阻止添加新的资源(例如 cpu),知道该资源得到许可。

  • 预获取 resource_name

    被用来为添加资源作准备。

  • 取消获取 resource_name

    在与获取阶段遇到错误或时间进行时启动该命令

  • postacquire resource_name

    继续或启动应用程序。

  • 预事件 resource_name

    用于准备 DLPAR 更新。

  • postaccevent resource_name

    继续或启动应用程序。

  • undopreaccevent resource_name

    preaccevent 阶段遇到错误或在执行时间时启动该命令。

  • pretopolgyupdate resource_name

    用于准备系统拓扑更新。

  • postopolgyupdate resource_name

    继续或启动应用程序。

使用 drmgr 命令来安装应用程序脚本

drmgr 命令维护一个已安装脚本信息的内部数据库。 在引导系统时收集该信息并在安装或卸载新的脚本时刷新该信息。 该信息得自 scriptinforegisterusage 命令。 drmgr 命令支持脚本的安装,该命令将指定的脚本复制到脚本存储库,以后可在其中访问该脚本。 此存储库的缺省位置为 /usr/lib/dr/scripts/all。 在工作负载分区中,缺省脚本存储库的位置是 /var/dr/scripts。 可以对此资源库指定备用位置。 要确定在其上使用脚本的机器,请在安装脚本时指定目标主机名。

要指定基本资源库的位置,请使用以下命令:
drmgr -R base_directory_path
要安装脚本,请使用以下命令:
drmgr -i script_name [-f] [-w mins] [-D hostname]
定义了以下标记:
  • -i 标记用于命名脚本。
  • -f 标记必须用于替换已注册的脚本。
  • -w 标记用于指定脚本预计要执行的分钟数。 它是作为对由供应商所指定的值的覆盖选项而提供的。
  • -D 标记用于注册将用在特定主机上的脚本。
要卸载脚本,请使用以下命令:
drmgr -u script_name [-D hostname]
定义了以下标记:
  • -u 标记用于表示应该卸载的哪个脚本。
  • -D 标记用于卸载对特定目录而注册的脚本。
要显示有关已安装脚本的信息,请使用以下命令:
drmgr -l

脚本的命名约定

建议从供应商名称和被其控制的子系统来构建脚本名称。 系统管理员应该以 sysadmin 前缀命名其脚本。 例如,要提供用于控制 工作负载管理器 分配的脚本的系统管理员可能会将该脚本命名为 sysadmin_wlm

脚本执行环境和输入参数

脚本随以下执行环境启动:
  • 进程 UID 设为脚本的 UID。
  • 进程 GID 设为脚本的 GID。
  • PATH 环境变量设为 /usr/bin:/etc:/usr/sbin 目录。
  • LANG 环境变量可设也可不设。
  • 当前工作目录设置为 /tmp
  • 命令参数和环境变量用于描述 DLPAR 事件。

脚本通过命令参数和环境变量接收输入参数,并通过将 name=value 对写入到标准输出(其中 name=value 对以新的行为界限)中来提供输出。 name 被定义为所预期的返回数据项的名称,而 value 为与该数据项相关的值。 文本字符串必须包含在圆括号内,例如 DR_ERROR="text"。 所有的环境变量和 name=value 对必须用为与应用程序脚本通信而保留的 DR_ 开头。

该脚本使用 DR_ERROR name=value 环境变量对以提供错误描述。

您可以检查脚本的命令参数,以确定 DLPAR 操作的阶段,操作类型以及作为暂挂 DLPAR 请求主题的资源类型。 例如,如果脚本命令参数为 checkrelease mem,那么阶段为 check,操作为 remove,资源类型为 memory。 所涉及的特定资源可通过检测环境变量来标识。

对内存添加和除去设置以下环境变量:
注: 在以下描述中,一个帧等于 4 KB。
  • DR_FREE_FRAME=0xFFFFFFFF

    以十六进制格式表示的当前在系统中的空闲帧的数量。

  • DR_MEM_SIZE_COMPLETED=n

    以十进制格式表示的成功添加或除去的 MB 数。

  • DR_MEM_SIZE_REQUEST=n

    以十进制格式、MB 为单位表示的内存请求的大小。

  • DR_PINNABLE_FRAME=0xFFFFFFFF

    以十六进制格式表示的当前在系统中的可固定帧的总数。 在除去内存时该参数提供了宝贵的信息,因为该信息可被用于确定系统何时接近可固定内存的极限,而这是内存除去请求失败的主要原因。

  • DR_TOTAL_FRAME=0xFFFFFFFF

    以十六进制格式表示的当前在系统中的帧的总数。

对处理器添加和除去设置以下环境变量:
  • DR_BCPUID=N

    以十进制格式表示的正在添加或除去的处理器所绑定的 CPU 标识。 该处理器的 bindprocessor 连接不一定意味着该连接必须被取消。 仅当它是系统中的第 N 个处理器时才为 true,因为第 N 个处理器位置是中央处理器 (CPU) 除去操作中总是被除去的那个。 绑定标识其性质是连续的,从 0 到 N 而且就是用来标识唯一的联机处理器的。 使用 bindprocessor 命令以确定联机 CPU 的数量。

  • DR_LCPUID=N

    以十进制格式表示的正在添加或除去的处理器的逻辑中央处理器 (CPU) 标识。

Micro-Partitioning® 设置了以下环境变量。
DR_CPU_CAPACITY=N
共享的物理处理器的分区的百分比。
DR_VAR_WEIGHT=N
用于确定如何分配共享池空闲循环的分区的相对优先级。
DR_CPU_CAPACITY_DELTA=N
共享物理处理器的分区百分比的当前值和该操作完成时它将被更改为的值之间的差别。
DR_VAR_WEIGHT_DELTA=N
分区的变量权重的当前值和该操作完成时它将被更改为的值之间的差别。

操作员可以使用 HMC 上的详细信息级别来显示有关当前 DLPAR 请求的信息,以观察事件发生时的情况。 此参数是使用 DR_DETAIL_LEVEL=N 环境变量对脚本指定的,其中 N 的范围可以从 05。 缺省值为零 (0) ,表示无信息。 值一 (1) 为操作系统而保留,并用于给出高级流。 余下的级别 (2-5) 可由脚本使用以提供信息(假定数字越大提供的信息越详细)。

脚本通过将以下 name=value 对写入标准输出来提供详细数据:
name=value 对 描述
DR_LOG_ERR=消息 LOG_ERR 环境变量的 syslog 级别记录该消息。
DR_LOG_WARNING=消息 LOG_WARNING 环境变量的 syslog 级别记录该消息。
DR_LOG_INFO=消息 LOG_INFO 环境变量的 syslog 级别记录该消息。
DR_LOG_EMERG=消息 LOG_EMERG 环境变量的 syslog 级别记录该消息。
DR_LOG_DEBUG=消息 LOG_DEBUG 环境变量的 syslog 级别记录该消息。

此外,操作员还可以设置一个通过使用 syslog 工具来保存的信息日志,在此情况下,以上信息还会被路由到该设备。 如果这样您必须配置 syslog 工具。

DLPAR 脚本命令

本部分描述了 DLPAR的脚本命令:
scriptinfo
提供了有关已安装脚本的信息,例如其创建日期和资源。
注册
启动该命令以收集由脚本管理的资源的列表。 drmgr 命令使用这些列表以启动基于正在重新配置的资源类型的脚本。
使用
提供了人们可阅读的描述由命名的资源提供所提供的服务的字符串。 该消息的上下文应该能帮助用户决定在重新配置命名的资源时所提供的应用程序和服务的相互关系。 此命令在安装脚本时启动,而此命令提供的信息在 drmgr 命令使用的内部数据库中进行维护。 使用 drmgr 命令的 -l list 选项显示信息。
checkrelease
在除去资源时,drmgr 命令评估除去该资源带来的影响。 这包括执行实现 checkrelease 命令的 DLPAR 脚本。 每个 DLPAR 脚本都将能够评估其应用程序的特殊性,并向使用脚本返回码的 drmgr 命令指示资源移除是否会影响关联的应用程序。 如果它发现除去该资源可安全完成,那么返回成功的退出状态。 如果应用程序处于资源对其执行非常重要的状态,并无法在不中断其执行的条件下对其进行重新配置,那么该脚本会通过返回错误来指出不应该除去该资源。 当用户指定 FORCE 选项时,它将应用于整个 DLPAR 操作 (包括其阶段) , drmgr 命令跳过 checkrelease 命令并从 prerelease 命令开始。
prerelease
在释放资源之前,将指示 DLPAR 脚本通过减少或不使用应用程序中的资源来帮助释放指定资源。 然而,如果该脚本检测到不能从应用程序释放该资源,它应该通过返回错误来指出没有从应用程序释放该资源。 这不会阻碍系统用强制或非强制执行方式以试图除去该资源,且该脚本将在之后阶段被调用,无论 prerelease 命令采取操作或采取不操作。 操作系统采取的操作是安全的。 如果不能完全除去资源,那么操作将失败。

期望 DLPAR 脚本在内部记录 prerelease 命令执行的操作,以便在发生错误时可以在后阶段复原这些操作。 如果实现了重新发现,也可在之后阶段中管理它。 如果指定了 force 选项,应用程序可能需要采取严厉措施。

postrelease
成功释放资源后,将启动每个已安装的 DLPAR 脚本的 postrelease 命令。 每个 DLPAR 脚本都会执行此步骤期间所需的任何后处理。 被中断的应用程序应该被重新启动。

调用程序将忽略任何由 postrelease 命令报告的错误,且认为操作成功,虽然那些可能发生的错误的指示也将向用户报告。 为此提供了 DR_ERROR 环境变量消息,这样消息应该能标识没有正确地重新配置的应用程序。

undoprerelease
drmgr 命令向 DLPAR 脚本发出 prerelease 命令之后,如果 drmgr 命令未能除去或释放资源,那么它将尝试还原为旧状态。 在此过程中, drmgr 命令将向 DLPAR 脚本发出 undoprerelease 命令。 仅当先前调用了脚本以释放当前 DLPAR 请求中的资源时,才会启动 undoprerelease 命令。 在此情况下,该脚本应该撤销任何由其 prerelease 命令所采取的操作。 为此,脚本可能需要记录其操作,或者提供重新发现系统状态和重新配置应用程序的功能,以便实际上不会发生 DLPAR 事件。
checkacquire
此命令是在获取新资源序列中调用的第一个基于 DLPAR 脚本的命令。 对每个在以前指出其支持这种的正在被添加的资源的特定类型的已安装脚本调用该命令。 检查获取阶段的主要目的之一是启用基于处理器的许可证管理器,它可能需要使处理器的增加失败。 无论 FORCE 环境变量为何值,会始终启动 checkacquire 命令,而且调用程序响应脚本的返回码。 如果脚本或 DLPAR感知程序在检查阶段中的 DLPAR 操作失败,那么用户无法强制添加新处理器。

简而言之,FORCE 环境变量没有真正应用于 checkacquire 命令,虽然它的确应用于其他阶段。 在预获取阶段中,它指出在重新配置应用程序时脚本走多远。 force 选项可由脚本用于控制策略,通过该策略停止和重新启动应用程序,类似于释放资源时 (这通常是一个 DLPAR安全问题)。

preacquire
假定在检查获取阶段中没有报告错误,系统前进到预获取阶段,其中调用相同的脚本组以准备获取新的资源,该资源通过 preacquire 命令得到支持。 除非报告了错误且用户没有指定 FORCE 环境变量,在系统真正试图集成该资源前,这些脚本中的每一个都将被调用。 如果在指定了 FORCE 环境变量,系统将继续该集成阶段,无论脚本的状态返回码是什么。 在指定 FORCE 环境变量时不会检测到错误,因为通过取消应用程序的配置可以避免所有错误,在指定了 FORCE 环境变量时这是一个公认的惯例。 如果遇到错误且没有指定 FORCE 环境变量,系统将继续进入撤销预获取阶段,但在当前阶段中只有以前执行过的脚本被重新运行。 在后面的阶段中,该脚本被指向执行恢复操作。
undopreacquire
提供撤销预获取阶段以便脚本可以执行恢复操作。 如果脚本在撤销预获取阶段中被调用,可以假定其成功地完成了 preacquire 命令。
postacquire
在资源被系统成功集成后执行 postacquire 命令。 将再次调用先前在检查和预阶段中调用的每个 DLPAR 脚本。 此命令用来将新的资源合并入应用程序中。 例如,应用程序可能需要创建新的线程、扩展其缓冲区,或可能需要重新启动应用程序(如果它以前被中断过)。
checkmigrate
此命令是在迁移序列中被调用的第一个基于 DLPAR 脚本的命令。 对每个在以前指出其支持这种的正在被添加的资源的特定类型的已安装脚本调用该命令。 无论 FORCE 环境变量为何值,会始终启动 checkmigrate 命令,而且调用程序响应脚本的返回码。 如果脚本或知晓 DLPAR 的程序在检查阶段无法完成 DLPAR 操作,那么用户不能强制分区迁移。
premigrate
假定在 checkmigrate 阶段中没有报告错误,系统将前进到 premigrate 阶段,在此阶段启动相同的脚本组以准备进行分区。 在系统真正试图迁移分区前,这些脚本中的每一个都将被调用。 无论脚本的状态返回码是什么,系统都会继续进入迁移阶段。 如果遇到错误,那么系统将继续进入 undopremigrate 阶段,但在当前阶段中只有以前执行过的脚本将重新运行。 在后面的阶段中,该脚本被指向执行恢复操作。
undopremigrate
提供 undopremigrate 阶段以便脚本可以执行恢复操作。 如果脚本在 undopremigrate 阶段中被调用,可以假定其成功地完成了 premigrate 命令。
postmigrate
在分区成功迁移之后执行 postmigrate 命令。 每个以前在检查和之前阶段中被调用过的 DLPAR 脚本被再次调用。
pretopologyupdate
先执行 pretopologyupdate 命令,然后发生将影响分区拓扑的操作,例如添加或除去处理器或内存。 此命令表示通知脚本拓扑操作已发生,且不会失败。 系统会继续该集成阶段,无论脚本的状态返回码是什么。
posttopologyupdate
分区成功完成拓扑操作后执行 posttopologyupdate 命令。 以前在每个阶段中被调用过的每个 DLPAR 脚本被再次调用。
checkhibernate
此命令是在休眠序列中被调用的第一个基于 DLPAR 脚本的命令。 对每个在以前指出其支持这种的正在被添加的资源的特定类型的已安装脚本调用该命令。 无论 FORCE 环境变量为何值,会始终启动 checkhibernate 命令,而且调用程序响应脚本的返回码。 如果脚本或知晓 DLPAR 的程序在检查阶段无法完成 DLPAR 操作,那么用户不能强制分区休眠。
prehibernate
假定在 heckhibernate 阶段中没有报告错误,系统前进到 prehibernate 阶段,其中启动相同的脚本组以准备进行分区。 在系统真正试图休眠分区前,这些脚本中的每一个都将被调用。 无论脚本的状态返回码是什么,系统都会继续进入休眠阶段。 如果遇到错误,那么系统将继续进入 undohibernate 阶段,但在当前阶段中只有以前执行过的脚本将重新运行。 在后面的阶段中,该脚本被指向执行恢复操作。
undohibernate
提供 undohibernate 阶段以便脚本可以执行恢复操作。 如果脚本在 checkhibernate 阶段中被调用,可以假定它成功地完成了 checkhibernate 命令。
posthibernate
在成功休眠分区后执行 posthibernate 命令。 将再次调用先前在检查和预阶段中调用的每个 DLPAR 脚本。
preaccevent
此命令是在加密加速器 DLPAR 序列中调用的第一个基于 DLPAR 脚本的命令。 如果安装的脚本先前指示其支持正在添加或释放的特定类型资源,那么会针对这些脚本分别调用该命令。 在调用该命令时尚未知道下一个操作是不是添加或释放加密加速器。 在下列其中一个后期阶段,将提供该操作。
postaccevent
在系统已成功处理资源后,会执行 postaccevent 命令。 将再次调用先前在预阶段中调用的每个 DLPAR 脚本。 此命令用来将新资源状态并入应用程序。
undoaccevent
提供 undoaccevent 阶段以便脚本可以执行恢复操作。 如果在 undoaccevent 阶段调用了该脚本,那么该脚本会成功地完成 preaccevent 命令。