并发多线程处理
同时多线程 是单个物理处理器从多个硬件线程上下文同时分派指令的能力。 因为每个物理处理器有两个硬件线程,其他的指令可以同时运行。
同时多线程 允许您通过在同一处理器上同时调度两个应用程序来利用处理器的超标量性质。 没有单个的应用程序能够使处理器完全饱和。
从 同时多线程中受益
主要在商业环境中十分有益,该环境中个别事务的速度没有执行的事务总数重要。 同时多线程 预期会增加具有大型或频繁更改的工作集 (例如数据库服务器和 Web 服务器) 的工作负载的吞吐量。
具有最大 同时多线程 优势的工作负载是具有高 "每个指令周期数" (CPI) 计数的工作负载。 这些工作负载很少使用处理器和内存资源。 大的 CPI 通常由来自大型工作集的较高的高速缓存不命中率引起。 大的商业工作负载或多或少依赖于两个硬件线程是否共享指令或数据,或者硬件线程是否完全不同。 通常,大的商业工作负载具有此特性。 共享指令或数据的工作负载 (包括在操作系统或单个应用程序中广泛运行的工作负载) 可能会从 同时多线程中获得更多好处。
从 同时多线程 中获益不大的工作负载是那些大多数单个软件线程使用处理器或内存中大量任何资源的工作负载。 例如,浮点密集型工作负载可能很少从 并发多线程 中获得收益,并且是最有可能失去性能的工作负载。 这些工作负载频繁使用浮点单元或者内存带宽。 带有低 CPI 和低高速缓存不命中率的工作负载可能获得一些小的收益。
在带有商业工作负载的专用分区上采取的测量表明吞吐量增加了 25%-40%。 同时多线程 应有助于共享处理器分区处理。 在分派 并发多线程 之后,额外的线程会为分区提供一个提升,因为分区会更快地恢复其工作集。 随后,线程就像在专用分区中一样地执行。 虽然这可能有点反直觉,但当高速缓存的性能处于最差时, 并发多线程 性能最佳。
使用 smtctl 命令来设置方式
AIX允许使用 "smtctl命令控制分区的模式,以实现同步多线程运行。 使用此命令,可以立即或下次系统引导时打开或关闭系统范围的 并发多线程 。 并发多线程 方式在系统引导之间持久存在。 缺省情况下, AIX 会启用 同时多线程。
smtctl [ -m { off | on } [ { -boot | -now } ] ]Hardware Management Console 同时多线程的配置
当您在硬件管理控制台 (HMC) 配置共享处理器分区时,您指定虚拟处理器的最少、必需和最大数目。 对于专用分区,您指定相同的参数类型,但是处理器术语不同。 对于专用分区,处理器始终被称为处理器。
两种分区模型均需要您指定某个范围的处理器,这些处理器控制处理器对分区的引导和运行时赋值。 如果可能,当系统启动时会授予所需的处理器设置。 如果不可能这样做,那么 POWER Hypervisor 会根据大于或等于最小值的可用资源集来选择另一个值。
在 HMC 上指定的处理器数会影响 AIX 分配的逻辑处理器数。 如果分区支持 同时多线程, AIX 分配的逻辑处理器数是最大处理器数的两倍,因为每个处理器有两个硬件线程,而 AIX 将每个硬件线程配置为一个单独的逻辑处理器。 这允许 AIX 在不重新引导分区的情况下启用或禁用 并发多线程 。
动态逻辑分区 ,用于 同时多线程
当分区正在运行时,可以更改通过 HMC 上的 动态逻辑分区 (DLPAR) 过程分配给分区的处理器数。 您可以在为分区定义的处理器范围的约束下添加或除去处理器。 将处理器添加到为 同时多线程启用的分区时, AIX 会启动两个硬件线程并使两个逻辑处理器联机。 从启用了 同时多线程的分区中除去处理器时, AIX 会停止两个硬件线程,并且两个逻辑处理器脱机。
当启用 并发多线程 时,将生成两个 DLPAR 事件。 为每个被添加或者除去的逻辑处理器生成一个事件。 DLPAR 脚本的 API 是基于逻辑处理器的,所以 DLPAR 事件数与添加或者除去逻辑处理器并行。 如果未在分区中启用 并发多线程 ,那么只有一个 DLPAR 事件。 AIX 会自动将从 HMC 发送的 DLPAR 请求转换为向 DLPAR 感知应用程序提供的相应数量的 DLPAR 事件。
微分区和多线程同时运行
POWER Hypervisor™ 在抢占或分派虚拟处理器时保存并复原所有必需的处理器状态。 对于为 同时多线程启用的处理器,这意味着两个活动线程上下文。 AIX支持每个硬件线程作为单独的逻辑处理器。 因此,使用一个物理处理器创建的专用分区由 AIX 配置为逻辑 2 方式处理器。 因为这与分区类型无关, 具有两个虚拟处理器的共享分区由 AIX 配置为逻辑 4 方式处理器,具有四个虚拟处理器的共享分区由 AIX 配置为逻辑 8 方式处理器。 成对的线程始终在同一个分区中同时被调度。
共享处理器容量总是按照整个逻辑处理器被传递。 在没有 同时多线程的情况下, AIX 将具有 200 个处理器权利单元的 4 路虚拟处理器分区配置为 4 路逻辑处理器分区,其中每个逻辑处理器的功率为物理处理器的 50%。 使用 同时多线程时, 4 路逻辑处理器分区将成为 8 路逻辑处理器分区,其中每个逻辑处理器的近似功率为物理处理器的 25%。 但是,对于 同时多线程,通常与虚拟处理器的部分容量相关的等待时间问题不会线性应用于线程。 因为两个线程均被分派,它们对于 50% 分派窗口的持续时间是活动的,并且它们共享底层的物理处理器以获取 25% 的逻辑能力。 这意味着只要每个逻辑处理器的单独容量允许,它们都能够处理中断两次。
硬件线程优先级
处理器允许将优先级指定给硬件线程。 兄弟线程之间优先级的不同决定了分配给每个线程的物理处理器译码槽之比。 槽越多则线程性能越好。 通常, AIX 以相同优先级维护同代线程,但在关键位置提高或降低线程优先级以优化性能。 例如,当线程在空闲循环或内核锁定中执行非生产性工作旋转时, AIX 会降低线程优先级。 当线程正持有关键内核锁时,线程优先级被提高。 在用户方式下,这些优先级调整并非持久。 AIX 在选择硬件线程优先级时不考虑软件线程的分派优先级。
在工作被分派给辅助线程之前,工作分布在所有主线程中。 当线程的成对线程空闲时,线程性能最好。 在空闲窃取和定期运行队列负载均衡时也要考虑线程相似性。