图书馆实时更新
当 AIX 操作系统更新时,实时库更新(LLU)功能可消除工作负载的停机时间。 AIX更新包括内核更新和用户空间更新。 内核更新需要重新启动逻辑分区或进行实时内核更新(LKU)。 LLU 功能可在不停机的情况下,将应用程序从使用旧库转移到更新后的新库。
程序库是一个实体,它提供一组变量和函数供程序使用。 库可以是一个归档文件,也可以是一个共享对象文件。 在 AIX 操作系统上,归档文件既可以包含静态对象文件,也可以包含作为成员的共享对象文件。 在 LLU 环境中,库指的是归档文件中包含的共享对象文件。
LLU 功能要求将库构建为拆分库。 当一个库的共享对象文件被分成两个独立的实体时,该库就被称为分割库(或 LLU-capable)。 目前, libc 和 libpthreads 图书馆可以使用 LLU。
您可以使用 "llvupdate命令运行 LLU 操作。 支持 LLU 的进程意味着该进程使用的至少一个库可以通过 "llvupdate命令动态替换。
启用实时图书馆更新系统
在 AIX 操作系统更新操作过程中,系统加载器会考虑以下标准,以确定进程是否支持 LLU:
- llu_mode可调参数的值。 llu_mode可调参数是一个全系统可调参数,可以通过以下命令进行设置:
raso -o llu_mode=0无论 LLU 程序属性如何,所有进程都将禁用 LLU 功能。
raso -o llu_mode=1启用 LLU 程序属性的进程将启用 LLU 功能。
- LLU 程序属性的值。 如果 "llu_mode可调参数设置为1,则默认情况下所有进程都将启用 LLU 功能,除非使用 LLU 程序属性明确覆盖该功能。 可以使用下列命令或方法之一重写 LLU 功能:
ld -o program main.o -lc /lib/crt0.o -b {llu|nollu}llu选项启用 LLU 功能,"nollu选项禁用 LLU 功能。
ldedit -b {llu|nollu} programllu选项启用 LLU 功能,"nollu选项禁用 LLU 功能。
LDR_CNTRL=LLU={yes|no}LDR_CNTRL环境变量优先于 LLU 程序属性。
raso -o llu_mode=2除非使用
LDR_CNTRL环境变量明确启用,否则所有进程都将禁用 LLU 功能。
在 LLU 操作中使用 llvupdate 命令的限制条件
要使用 llvupdate 命令执行 LLU 操作,请考虑以下限制:
- 进行实时更新操作时,不能单独运行 "llvupdate命令。
- 当运行 "llvupdate命令时,无法运行实时更新操作。
若进程未能在超时期限内更新其库文件,则无法为该进程提供更新后的库文件。 更多信息,请参阅 /var/adm/ras/liveupdate/llvupdate 日志文件。 例如,处于不可中断状态的一个或多个线程可能无法进入暂停模式。
在运行时,系统会刻意将基础进程、内核进程以及处于终止状态的进程排除在实时库更新之外。 有关更多信息,请参阅 lvupdateSetProcs 命令和内核进程简介章节。
虽然进程可以使用 LLU,但 llvupdate 命令必须用于具有以下状态的进程:
处于以下状态的进程所使用的库无法更新:
- 正在调试的进程
dbx - 正在追踪的进程
ptrace - 被探测的过程
probevue - 处于停止状态的进程
sigstop
- 正在调试的进程
- 静态链接库无法更新。
- 使用系统加载器域功能的进程所使用的库无法更新。
- 只有 root 用户才能运行 "llvupdate命令。