图书馆实时更新

当 AIX 操作系统更新时,实时库更新(LLU)功能可消除工作负载的停机时间。 AIX更新包括内核更新和用户空间更新。 内核更新需要重新启动逻辑分区或进行实时内核更新(LKU)。 LLU 功能可在不停机的情况下,将应用程序从使用旧库转移到更新后的新库。

程序库是一个实体,它提供一组变量和函数供程序使用。 库可以是一个归档文件,也可以是一个共享对象文件。 在 AIX 操作系统上,归档文件既可以包含静态对象文件,也可以包含作为成员的共享对象文件。 在 LLU 环境中,库指的是归档文件中包含的共享对象文件。

LLU 功能要求将库构建为拆分库。 当一个库的共享对象文件被分成两个独立的实体时,该库就被称为分割库(或 LLU-capable)。 目前, libclibpthreads 图书馆可以使用 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} program

      llu选项启用 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命令。