线程支持可调参数
有很多可调的线程支持参数。
- ACT_TIMEOUT请参阅: 线程环境变量。
项 描述信息 用途: 调整激活超时的秒数。 值: 缺省值:DEF_ACTOUT。 范围:正整数。 显示: echo $ACT_TIMEOUT 此值内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: ACT_TIMEOUT=n 导出 ACT_TIMEOUT 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 ACT_TIMEOUT=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - AIXTHREAD_COND_DEBUG 请参阅 线程调试选项。
项 描述信息 用途: 维护条件变量列表以供调试器使用。 值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_cond_debug 此值内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_COND_DEBUG={ON|OFF}export AIXTHREAD_COND_DEBUG更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_COND_DEBUG={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 保留该变量设置为 ON 可使调试线程应用程序更容易,但可能会强加一些开销。 调整: 如果程序包含大量活动的条件变量,并且频繁创建和破坏条件变量,那么维护该条件变量列表可能会产生更大的开销。 将该变量设置为 OFF 将禁用该列表。 - AIXTHREAD_DISCLAIM_GUARDPAGES
项 描述信息 用途: 控制是否释放堆栈保护页。 值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_disclaim_guardpages 此值内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_DISCLAIM_GUARDPAGES={ON|OFF};export AIXTHREAD_DISCLAIM_GUARDPAGES更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_GUARDPAGES=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 如果保护页用于 pthread 堆栈,那么设置 AIXTHREAD_DISCLAIM_GUARDPAGES = ON 将导致在创建 pthread 时释放保护页。 此参数可降低线程应用程序的内存占用量。
请参阅 线程环境变量。 - AIXTHREAD_ENRUSG请参阅 线程环境变量。
项 描述信息 用途: 启用或禁用 pthread 资源收集。 值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_enrusg 此值内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_ENRUSG={ON|OFF}export AIXTHREAD_ENRUSG更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_ENRUSG={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 将此参数设置为 ON 将允许对一个进程中的所有 pthread 进行资源收集,但是会强加一些开销。 调整: 不适用 - aixthread_guardpages请参阅 线程环境变量。
项 描述信息 用途: 控制要添加到 pthread 栈尾的保护页的数量。 值: 缺省值:1(其中 1 是表示页面数的十进制值,页面可以是 4K、64K 等等。) 范围:n 的范围内。 显示: echo $aixthread_guardpages 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_GUARDPAGES=nexport AIXTHREAD_GUARDPAGES更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_GUARDPAGES=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - aixthread_minkthreads请参阅: 进程范围争用作用域的变量。
项 描述信息 用途: 控制应使用的最少内核线程数。 值: 缺省值:8。 范围: 正整数值。 显示: echo $aixthread_minkthreads 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_MINKTHREADS = nexport AIXTHREAD_MINKTHREADS 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_MINKTHREADS =n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 库调度程序不会回收低于此变量中设置的值的内核线程。 内核线程在几乎任何时候都可能被回收。 一般来说,内核线程是作为 pthread 中止结果的目标。 - AIXTHREAD_MNRATIO请参阅: 进程范围争用作用域的变量
项 描述信息 用途: 控制库的比例因子。 该比率在创建和终止 pthread 时使用。 值: 缺省值:8:1 范围:两个正数值(p:k),其中 k 是应该用来处理 p 变量中定义的可执行 pthread 数的内核线程数。 显示: echo $aixthread_mnratio 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_MNRATIO=p: k导出 AIXTHREAD_MNRATIO 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_MNRATIO=p:k 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 对于拥有极大量线程的应用程序可能很有用。 但是,请总是测试 1:1 的比率,因为这可能提供更好的性能。 - AIXTHREAD_MUTEX_DEBUG请参阅: 线程调试选项
项 描述信息 用途: 维护活动互斥对象列表以供调试器使用。 值: 缺省值:OFF。 可能的值:ON,OFF。 显示: echo $aixthread_mutex_debug 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_MUTEX_DEBUG={ON|OFF}导出 AIXTHREAD_MUTEX_DEBUG 此更改立即生效,并且在用户从该 shell 中注销之前一直有效。 将 AIXTHREAD_MUTEX_DEBUG={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 将变量设置为ON使调试线程应用程序更容易,但可能会造成一些开销。 调整: 如果程序包含大量活动的互斥对象,并且频繁创建和破坏互斥对象,那么维护互斥对象列表可能会产生更大的开销。 将变量设置为OFF禁用列表。 - AIXTHREAD_MUTEX_FAST请参阅: 线程调试选项
项 描述信息 用途: 启用优化的互斥对象锁定机制。 值: 缺省值:OFF。 可能的值:ON,OFF。 显示: echo $aixthread_mutex_fast 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_MUTEX_FAST={ON|OFF}导出 AIXTHREAD_MUTEX_FAST 此更改立即生效,并且在用户从该 shell 中注销之前一直有效。 将 AIXTHREAD_MUTEX_FAST={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 将变量设置为ON强制线程应用程序使用优化的互斥锁定机制,从而提高性能。 调整: 如果程序由于严重的互斥争用而迂到性能下降的情况,那么将此变量设置为ON将强制 pthread 库使用仅在进程专用互斥对象上起作用的优化互斥锁定机制。 这些进程私有互斥对象必须使用 pthread_mutex_init 例程进行初始化,并且必须使用 pthread_mutex_destroy 例程破坏。 - AIXTHREAD_READ_GUARDPAGES请参阅 线程环境变量。
项 描述信息 用途: 控制对添加到 pthread 栈尾的保护页的读访问。 值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_read_guardpages 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_READ_GUARDPAGES={ON|OFF}export AIXTHREAD_GUARDPAGES更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_READ_GUARDPAGES={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - AIXTHREAD_RWLOCK_DEBUG请参阅: 线程调试选项
项 描述信息 用途: 维护读写锁列表以供调试器使用。 值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_rwlock_debug 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_RWLOCK_DEBUG={ON|OFF}导出 AIXTHREAD_RWLOCK_DEBUG 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_RWLOCK_DEBUG={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 将此参数设置为ON使调试线程应用程序更容易,但可能会造成一些开销。 调整: 如果程序包含大量活动的读写锁,并且频繁创建和破坏读写锁,那么维护读写锁列表可能产生更大的开销。 将变量设置为OFF将禁用该列表。 - aixthread_suspendible请参阅: 线程调试选项
项 描述信息 用途: 防止将以下例程与 pthread_suspend_np 或 pthread_suspend_others_np 例程配合使用的应用程序中发生死锁: - pthread_getrusage_np
- pthread_cancel
- pthread_detach
- pthread_join
- pthread_getunique_np
- pthread_join_np
- pthread_setschedparam
- pthread_getschedparam
- pthread_kill
值: 缺省值:OFF。 范围:ON,OFF。 显示: echo $aixthread_suspendible 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: aixthread_suspendible= {ON|OFF} export AIXTHREAD_SUSPENDIBLE 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_SUSPENDIBLE={ON|OFF} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 此变量会带来少许性能损失。 调整: 仅在上述函数与 pthread_suspend_np routine 或 pthread_suspend_others_np 例程一起使用时才应启用此变量。 - aixthread_scope请参阅: 线程环境变量
项 描述信息 用途: 控制争用作用域。 值为 P 表示基于进程的争用作用域 (M:N)。 值为 S 表示基于系统的争用作用域 (1:1)。 值: 缺省值:P。可能的值:P 或 S。 显示: echo $aixthread_scope 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_SCOPE={P|S}导出 AIXTHREAD_SCOPE 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_SCOPE={P|S} 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 如果分派的线程比期望的少,那么尝试系统作用域。 调整: 测试表明,某些应用程序使用基于系统的争用作用域 (S) 可能性能要好得多。 使用这个环境变量只对那些创建时具有缺省属性的线程有影响。 当 pthread_create 的 attr 参数为 NULL 时,将使用缺省属性。 - AIXTHREAD_SLPRATIO 请参阅: 进程范围争用作用域的变量
项 描述信息 用途: 控制预留给睡眠线程的内核线程数。 值: 缺省值:1:12。 范围:两个正数值(k:p),其中 k 是应预留给 p 个休眠 pthread 的内核线程数。 显示: echo $aixthread_slpratio 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_SLPRATIO=k: p导出 AIXTHREAD_SLPRATIO 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_SLPRATIO=k:p 命令添加到 /etc/environment 文件可进行永久性更改。
诊断: 不适用 调整: 一般来说,支持睡眠 pthread 需要的内核线程是很少的。因为它们一般是一次醒一个。 这节约了内核资源。 - AIXTHREAD_STK=n
项 描述信息 用途: 十进制字节应该分配到每个 pthread。 此值可由 pthread_attr_setstacksize 例程覆盖。 值: 缺省值:对于 32 位应用程序为 98 304 字节,对于 64 位应用程序为 196 608 字节。 范围:0 到 268 435 455 的十进制整数值,并且该值将向上取整到最接近的页(目前为 4 096)。 显示: echo $AIXTHREAD_STK 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_STK=sizeexport AIXTHREAD_STK 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 AIXTHREAD_STK=size 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 如果失败程序的分析结果是由于堆栈溢出,缺省的栈大小应该增加。 调整: 如果尝试达到 32 位应用程序上的 32 000 线程限制,那么有必要减小缺省堆栈大小。 - AIXTHREAD_AFFINITY请参阅: 线程环境变量
项 描述信息 用途: 控制启用增强亲缘关系的系统上的 pthread 结构、堆栈和线程本地存储器的放置。 值: 缺省值:现有。 范围:现有、始终、尝试。 显示: echo $aixthread_affinity 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: AIXTHREAD_AFFINITY ={default|strict|first-touch} 导出 AIXTHREAD_AFFINITY
诊断: 将该变量设置为 strict 将改进线程的性能,但会以增加启动时间为代价。
将该变量设置为 default 保留了先前的均衡实现。
将该变量设置为 first-touch 将在启动性能成本与运行时优势之间获得平衡。
调整: 如果希望线程长时间运行,那么将该变量设置为 strict 将改进性能。 但是,如果有大量短时间运行的线程,那么应将该变量设置为 default 或 first touch。 - MALLOCBUCKETS请参阅: Malloc 存储区
项 描述信息 用途: 在缺省内存分配器中启用基于存储区的扩展,对于发出大量较小分配请求的应用程序,该扩展可提高其性能。 值: MALLOCTYPE= 存储区 MALLOCBUBUCKET= [[ number_of_bubucket:n | bucket_sizing_factor:n | blocks_per_bucket:n | bucket_statistics: [stdout|stderr|pathname]] , ...]
下表显示了 MALLOCBUCKETS 的缺省值。- MALLOCBUCKETS 选项
- 缺省值
- number_of_buckets1
- 16
- bucket_sizing_factor(32 位)2
- 32
- bucket_sizing_factor(64 位)3
- 64
- blocks_per_bucket
- 10244
注意:1。允许的最小值为 1。 允许的最大值为 128。
2. 对于 32 位实现的情况,对 bucket_sizing_factor 指定的值必须是 8 的倍数。
3。对于 64 位实现,为 bucket_sizing_factor 指定的值必须是 16 的倍数。
4. 在缺省情况下,会禁用选项 bucket_statistics。
显示: echo $MALLOCBUBUCKET; echo $MALLOCTYPE 更改: 使用用来导出环境变量的特定于 shell 的方法。 诊断: 如果 malloc 性能较差,且发出了很多较小的 malloc 请求,那么此功能可提高性能。 调整: 为了启用 malloc 存储区,环境变量 MALLOCTYPE 一定要设置为值“bucket”。 MALLOCBUCKETS 环境变量可用于更改 malloc 存储区的缺省配置,尽管缺省值对于大多数应用程序已经足够。
number_of_buckets:n 选项可用于指定每个堆的可用存储区数,其中 n 为存储区的数量。 为 n 指定的值将应用于所有可用的堆。
bucket_sizing_factor:n 选项可用于指定存储区缩放大小因子,其中 n 为存储区缩放大小因子,单位为字节。
blocks_per_bucket:n 选项可用于指定每个存储区中最初包含的块数,其中 n 为块数。 该值将应用于所有的存储区。 n 的值还用于确定在存储区中所有的块已被分配的情况下,存储区自动扩大时所添加的块数。
选项 bucket_statistics 会使 malloc 子系统输出一个关于每个进程终止时调用 malloc 系统而 malloc 存储区正被启用的 malloc 存储区的统计摘要。 这个摘要会显示存储区配置信息和处理每个存储区时分配内存的需要量。 如果已使用 malloc 多堆方式启用了多个堆,那么所显示的每个存储区的分配请求数将是对所有堆中该存储区的所有分配请求的总和。
存储区统计摘要位于下列输出目标文件中,由选项 bucket_statistics 设定。- stdout
- 标准输出
- stderr
- 标准错误
- pathname
- 用户指定路径名
如果提供了用户指定路径名,统计输出会附加到已存在的文件内容后面。 请避免将标准输出用作其输出传送为另一进程输入内容的进程的输出目标。
- 多堆请参阅: 线程环境变量
项 描述信息 用途: 在进程私有段内控制堆数 值: 缺省值:32。 范围:1 到 32 之间的正数。 显示: echo $mallocmultiheap 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: MALLOCMULTIHEAP= [[heaps:n | 体贴大小] , ...] 导出 MALLOCMULTIHEAP 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 通过添加 MALLOCMULTIHEAP= [[heaps:n | 体贴大小] , ...] 进行永久更改 命令到 /etc/environment 文件。
诊断: 在 malloc 锁(位于 F 段)中寻找锁争用或少于需要的可执行线程。 调整: 较小数量的堆数有助于减小进程大小。 通过在启动应用程序之前导出 MALLOCMULTIHEAP=1 环境变量,某些大量使用 mallloc 子系统的多线程用户进程可获得更好的性能。 潜在的性能优化最可能出现在多线程 C++ 程序中,因为无论调用构造函数或析构函数这些都要用到 malloc 子系统。
在多线程用户进程运行于 SMP 系统时,任何性能优化都是可以得到的,尤其是在使用系统作用域线程(M:N ratio of 1:1)时。 但是,在某些情况下,增强在其他条件下以及在单处理器上可能也很明显。
如果选项 considersize 被设定,交替堆选择算法将用来选择有足够可用空间处理需求的有效堆。 通过减少 sbrk() 调用的数量,这可能使进程的工作集大小达到最小。 但是这个算法需要更多一点的处理时间。
- NUM_RUNQ请参阅: 线程环境变量
项 描述信息 用途: 更改运行队列的缺省数目。 值: 缺省值:在运行时找到的活动处理器的数量。 范围:正整数。 显示: echo $NUM_RUNQ 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: NUM_RUNQ=n 导出 NUM_RUNQ 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 NUM_RUNQ=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - NUM_SPAREVP请参阅: 线程环境变量
项 描述信息 用途: 设置在 pth_init期间将通过 malloc 分配的 vp 结构的数量。值: 缺省值:NUM_SPARE_VP。 范围:正整数。 显示: echo $NUM_SPAREVP 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: NUM_SPAREVP=n 导出 NUM_SPAREVP 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 NUM_SPAREVP=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - 旋转时间请参阅: 线程环境变量
项 描述信息 用途: 在转到其他处理器(仅对于 libpthreads)前控制时间量来重试繁忙的锁。 值: 缺省值:单处理器为 1,多处理器为 40。 范围:正整数。 显示: echo $SPINLOOPTIME 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: SPINLOOPTIME=n导出 SPINLOOPTIME 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 SPINLOOPTIME=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 如果线程经常休眠(大量空闲时间),那么 SPINLOOPTIME 可能不够高。 调整: 如果存在 pthread 互斥对象争用,那么在多处理器系统上将该值从缺省值 40 进行增大可能有益。 - 步骤时间请参阅: 线程环境变量
项 描述信息 用途: 调整在激活超时期间用来创建 VP 的次数。 值: 缺省值:DEF_STEPTIME。 范围:正整数。 显示: echo $STEP_TIME 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: STEP_TIME=n 导出 STEP_TIME 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 STEP_TIME=n 命令添加到 /etc/environment 文件可进行永久性更改。
诊断: 不适用 调整: 不适用 - VP_STEALMAX请参阅: 线程环境变量
项 描述信息 用途: 调整可窃取的 VP 的数量,或者关闭 VP 窃取。 值: 缺省值:无。 范围:正整数。 显示: echo $VP_STEALMAX 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: VP_STEALMAX=n 导出 VP_STEALMAX 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 VP_STEALMAX=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 不适用 调整: 不适用 - YIELDLOOPTIME请参阅: 线程环境变量
项 描述信息 用途: 在忙锁(仅用于 libpthreads)上分块前控制使用处理器的次数。 假如有另一个优先级较高的可执行内核线程,处理器就会去处理那个内核线程。 值: 缺省值:0。 范围: 正值。 显示: echo $YIELDLOOPTIME 此参数内部开启,因此初始缺省值无法通过 echo 命令看到。
更改: YIELDLOOPTIME=n导出 YIELDLOOPTIME 更改会在该 shell 中立即生效。 在从这个 shell 注销之前更改一直有效。 将 YIELDLOOPTIME=n 命令添加到 /etc/environment 文件中可进行永久性更改。
诊断: 如果线程经常休眠(大量空闲时间),说明 YIELDLOOPTIME 可能不够高。 调整: 如果不希望线程在等待锁时转入休眠状态,那么将该值从缺省值 0 进行增大可能有益。