处理器释放对应用程序的影响

处理器释放对于包含驱动程序和内核扩展在内的大多数应用程序是透明的。 但是,您可以使用发布的接口确定是应用程序还是内核扩展在多处理器机器上运行、查找处理器的数量以及将线程绑定到特定的处理器。

将进程或线程绑定到处理器的 bindprocessor 接口使用绑定 CPU 号。 绑定 CPU 号在[0..N-1]范围内,其中 N 是 CPU 的总数。 为了避免破坏假定 CPU 编号中没有 "漏洞 "的应用程序或内核扩展,AIX总是让应用程序认为是 "最后"(最高编号)绑定的 CPU 被释放。 例如,在 8 通道 SMP 上,绑定 CPU 号为[0..7]。 如果已释放一个处理器,那么可用的 CPU 总数为 7,并且它们的编号为[0..6]。 无论哪个物理处理器发生了故障,CPU 7 在外部都看似已消失。

注: 在此描述的其余部分中,术语 CPU 用于逻辑实体,而术语 处理器 用于物理实体。

如果 AIX 在需要取消分配某个处理器时以静默方式终止绑定的线程或强制将这些线程移动到另一个 CPU ,那么可能导致绑定进程或线程的应用程序或内核扩展中断。 动态处理器释放 提供了编程接口,以便可以通知此类应用程序和内核扩展即将进行处理器释放。 当这些应用程序和内核扩展接收通知时,它们将负责将它们的已绑定线程和关联资源(例如计时器请求块)从最后的绑定 CPU ID 移出,并且使它们自身适应新的 CPU 配置。

在通知后,如果某些线程仍绑定到最后一个绑定 CPU 标识,那么释放将异常中止,异常中止的释放将记录在错误日志中,并且 AIX 将继续使用发生故障的处理器。 当处理器最终发生故障时,它将导致整个系统发生故障。 因此,应用程序或内核扩展接收即将发生处理器释放的通知并根据此通知采取措施是很重要的。

即使在极少情况下,取消分配无法进行, 动态处理器释放 仍会向系统管理员提供高级警告。 通过在错误日志中记录错误,将提供在系统上调度维护操作的机会,以在发生全局系统故障之前替换有故障的组件。