从跟踪生成 CPU 使用率报告。
curt -i inputfile [-o outputfile] [-n gensymsfile] [-m trcnmfile] [-a pidnamefile] [-f timestamp] [-l timestamp] [-ehpstP]
curt 命令将 AIX 跟踪文件当作输入并产生许多与处理器(CPU)优化和进程/线程/pthread 活动相关的统计信息。只要恰当地同步处理器时钟,它可用于单处理器和多处理器 AIX 跟踪。
使用 trace 命令收集到的 AIX 跟踪文件应该至少包含下面列出的跟踪事件(跟踪 hook)。这些是 curt 要查看并计入其统计信息的事件:
HKWD_KERN_SVC、HKWD_KERN_SYSCRET、HKWD_KERN_FLIH、
HKWD_KERN_SLIH、HKWD_KERN_SLIHRET、HKWD_KERN_DISPATCH、
HKWD_KERN_RESUME、HKWD_KERN_IDLE、HKWD_SYSC_FORK、HKWD_SYSC_EXECVE、HKWD_KERN_PIDSIG、HKWD_SYSC__EXIT
HKWD_SYSC_CRTHREAD、HKWD_KERN_INITP、HKWD_NFS_DISPATCH、HKWD_DR
HKWD_PTHREAD_VPSLEEP、HKWD_PTHREAD_GENERAL
这意味着,如果您在 trace 命令上指定 -j 标志,必须为 curt 包含这些数字:
-j 100,101,102,103,104,106,10C,119,134,135,139,200,210,215,38F,465,605,609
或者,您可以使用 -J curt 作为代替。
要将 PTHREAD 挂钩放入跟踪,必须使用检测到的 libpthreads.a 执行您的 pthread 应用程序。实现此目的的一种方法是启动您的应用程序之前,执行以下三步(KornShell 语法):
要激活用户 pthread 检测必须将检测到的库目录放入 LIBPATH;可将 temp.lib 目录放到任何位置。
如果 trace 进程名表格不准确,或者如果期望更多描述名,请使用 -a 标志以指定 PID 来处理名称映射文件。这是一个文件,其中的行构成为:一个进程标识符(十进制),后跟一个空格,再后跟一个 ASCII 字符串,用作该进程的名称。
如果输入 AIX 跟踪文件是使用指定的 -n 标志创建的,如果不在 curt 命令行上指定 -m 或 -n 标志,curt 将使用地址/表来对名称解析“系统调用”和 Slih 地址。
curt 报告中的第一行给出 curt 程序执行的时间以及用来调用 curt 的命令行。紧跟其后的是关于 AIX 跟踪文件被 curt 处理的信息:名称、大小、创建日期和用来收集跟踪文件的命令。
报告的第一大节是“系统摘要”。该节描述了系统作为一个整体(所有处理器)在各种执行方式下使用的时间。这些方式如下:
标记为处理总时间(msec)的列给出相应的处理类别的总时间(毫秒)。标记为总时间百分比的列给出处理总时间作为 TOTAL 处理总时间的百分比。标记为忙碌时间百分比的列给出处理总时间作为 CPU 忙碌时间处理总时间的百分比。Avg. Thread Affinity 是线程分派至它上一次在其上执行的同一个处理器的概率。
在“系统总结”之后是“系统应用程序总结”,它详细说明了在用户方式下所用的时间。本节描述所有进程(在所有处理器上)执行 libpthread 的各个部分使用的时间。
标号为处理总时间(msec)的列给出了相应的处理类别的总时间(毫秒)。标记为总时间百分比的列给出处理总时间作为 TOTAL 处理“系统摘要”总时间的百分比。标记为应用程序时间百分比的列给出处理总时间作为 APPLICATION 处理总时间的百分比。Avg. Pthread Affinity 是 pthread 分派至它上一次在其上执行的同一个线程的概率。
“系统应用程序摘要”之后是“每个处理器摘要”。包含的信息基本相同,但以逐个处理器为基础进行停顿。在对“系统摘要”给出的描述中,词组“所有处理器所用时间的总和”可以替换为“该处理器所用时间”。进程分派 Total 数指 AIX 在该处理器上分派任何非空闲进程的次数,而空闲进程分派 Total 数给出空闲进程分派的计数。
“每个处理摘要”之后是“每个处理器应用程序摘要”,包含的信息基本相同,但以逐个处理器为基础进行停顿。
pthread 分派 Total 数指 libpthreads 在该处理器上分派任何 pthread 的次数,而 pthread 空闲分派 Total 数 给出对 vp_sleep 调用的计数。
报告的第二大节是“应用程序摘要”。该节的第一部分在每个线程的基础上(通过线程标识符)总结了总系统处理时间。对于每个由进程标识符(和名称,如果有)和线程标识符来标识的线程,该摘要给出了总应用程序(与上述 APPLICATION 同)和系统调用(与上述 SYSCALL 同)处理时间(以毫秒计)与其对于跟踪中的所有处理器的总系统处理时间的百分比。另外,该摘要还给出了这两种时间作为原始时间和作为对总处理时间的百分比的总和。
本节的第二部分以每个进程标识符(通过进程标识符)为基础给出了同样的信息。本节的第三部分以每个进程名称(通过进程类型)为基础给出了同样的信息。
本节的第四部分对内核进程线程(“内核进程摘要”)给出了相似信息。由于大多数 kprocs 提供特定的内核服务,所以总处理时间分割为两类,操作和内核,分别与一直运行在内核代码中的进程的“系统调用”和“应用程序”形成宽松的对应。每个内核进程线程通过其名称、进程标识符、线程标识符和内核进程类型(如已知)来识别。kproc 类型在紧跟在该摘要后的表格中列出并进行描述。
本节的第五部分是“pthread 进程摘要”。本节给出多线程进程上的总的应用程序时间(通过 Pid)。对于每个由进程标识符(和名称,如果有)标识的进程,该摘要给出总的应用程序、pthread 和其它处理时间(以毫秒计)与其对于跟踪中的所有处理器的总系统处理时间的百分比。
该“摘要”的所有五节按从处理时间的综合程度最高到最低的顺序排列显示。
报告的第三大节是“系统调用摘要”。该节总结了用在系统调用上的处理时间。对于每个系统调用(SVC,通过内核地址(和名称,如已知)标识),该摘要给出了调用 SVC 的次数和所有调用的总处理器时间(毫秒)以及其对于跟踪中所有处理器的总系统处理时间的百分比。此外,该摘要还给出了一个至 SVC 的调用的平均值、最小值和最大值。如指定了 -e 标志,则该摘要给出至 SVC 的所有调用所用的总时间以及一个调用所用的平均值、最小值和最大值时间。“所用时间”为从进程开始以内核方式执行 SVC 至该进程重新以应用程序方式执行为止的畴壁时钟时间。该“摘要”按从最多总处理器时间至最少总处理器时间的顺序排列。如果指定了 -s 标志,摘要将给出每个错误代码(errno)被每个“系统调用”返回的次数。
该节的第二部分是“暂挂系统调用摘要”。该节列出了已启动但未完成的“系统调用”。给出的时间包括在系统和各种处理器的 SYSCALL 时间和发出了 SVC 的线程和进程的 SYSCALL 时间中,但不包括在该节的第一部分中的系统调用的处理时间中。暂挂调用也不包括在该节的第一部分中给出的计数中。
报告的第四大节是“Pthread 调用摘要”。该节总结了用在调用的 pthread 例程 中的处理时间。 对于每个由名称指定的 pthread,该摘要给出调用 pthread 例程的次数和所有调用的总处理时间(毫秒)以及对于所有处理起的总系统处理时间的百分比。此外,该摘要还给出了一个至 pthread 例程的调用的平均值、最小值和最大值。如果指定了 -e 标志,该摘要给出至 pthread 例程的所有调用所用的总时间以及一个调用所用的平均值、最小值和最大值。所用时间为从进程开始执行 pthread 例程至该进程退出 libpthreads 代码位置的畴壁时钟时。该“摘要”按从最多总处理器时间至最少总处理器时间的顺序排列。
该节的第二部分是“暂挂 Pthread 调用摘要”。该节列出已启动但未完成的“Pthread 调用”。
此报告的主要部分为“系统 NFS 调用摘要”。该部分总结 NFS 操作中所用的处理时间。对于每个由操作名和 NFS 版本标识的 NFS 操作,该摘要给出调用 operation 例程的次数和所有调用的总处理器时间(毫秒)以及对于 NFS 版本相同的所有处理器的总 NFS 操作时间的百分比。此外,该操作还给出了它的一个调用的平均次数、最小次数和最大次数。如果指定了 -e 标志,则该摘要将给出对此操作的所有调用的总所用时间以及一个调用所用的平均时间、最小时间和最大时间。同时也为 NFS 版本相同的所有操作提供了总所用时间作为总 NFS 操作所用时间的百分比。所用时间为操作分派退出挂钩之前来自操作分派项挂钩的畴壁时钟时。在任何情况下,摘要都将为 NFS 版本相同的所有操作提供操作调用计数,形式为总 NFS 操作调用的百分比。“摘要”以操作码的流水号形式表示。如果同时提供了 NFS 版本 2 和版本 3 操作,将首先表示版本 2 操作。
“系统 NFS 调用摘要”后紧跟“暂挂 NFS 调用摘要”。 此部分列出了已启动但尚未完成的 NFS 调用。给出的时间包括在系统和各种处理器的 NFS 时间和发出 NFS 的线程和进程的操作时间中,但不包括在该节的第一部分中 NFS 操作的处理时间中。暂挂调用也不包括在该节的第一部分中给出的计数中。
报告的第五大节是“Flih 摘要”。该节总结了用在一级中断处理程序(Flih)上的时间量。该节的第一部分给出了跟踪中的每个 Flih 的条目总数,以及所有处理器的所有 Flih 执行的总处理器时间(毫秒)。此外,该摘要还给出了一个执行的平均值、最小值和最大值。每个 Flih 由系统定义的 Flih 类型和相应的 Flih 名称(如已知)标识。
第二部分为以逐个处理器为基础停顿的相同信息。可能不是所有发生在系统上的 Flih 都发生在每个处理器上,因此“全局 Flih”列表可能与每个处理器的 Flih 列表不同。
该节的第二部分可能包含“暂挂 Flih 摘要”。这是一个已启动但未完成的 Flih 的列表。给出的时间包括在系统和影响到的处理器的 FLIH 时间中,但不包括在本节的两个部分中的 Flih 处理时间。暂挂调用也不包括在该节的两个部分中给出的计数中。
报告的第五大节是“Slih 摘要”。该节总结了用在二级中断处理程序(Slih)上的时间量。该节的第一部分给出了跟踪中的每个 Slih 的条目总数,以及所有处理器的所有 Slih 执行的总处理器时间(毫秒)。此外,该摘要还给出了一个执行的平均值、最小值和最大值。每个 Slih 由内核地址和 Slih 功能或模块名称(如已知)标识。
第二部分为以逐个处理器为基础停顿的相同信息。可能不是所有发生在系统上的 Slih 都发生在每个处理器上,因此“全局 Slih”列表可能与每个处理器的 Slih 列表不同。
该节的第二部分可能包含“暂挂 Slih 摘要”。这是一个已启动但未完成的 Slih 的列表。给出的时间包括在系统和影响到的处理器的 SLIH 时间中,但不包括在本节的两个部分中的 Slih 处理时间。暂挂 Slih 也不包括在该节的两个部分中给出的计数中。
报告的本节是在指定 -p 标志时产生的。它对每个跟踪中找到的进程给出了详细的信息。该信息如下:
这些进程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。
报告的本节是在指定 -t 标志时产生的。它对每个跟踪中找到的线程给出了详细的信息。该信息如下:
这些线程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。
报告的本节在指定 -P 标志时产生。它给出有关在跟踪中找到的每个 pthread 的详细信息。该信息如下:
pthread 按 Pid-Ptid 分类显示。
/usr/bin/curt | 包含 curt 命令。位于 bos.perf.tools 文件集。 |
AIX 5L Version 5.2 Performance Tools Guide and Reference
《AIX 5L V5.2 性能管理指南》