1、AIX 5L CPU性能分析AIX 5L CPU性能分析本文介绍使用AIX 5.2内置命令CURT生成CPU使用和性能报告curt 命令用途:从跟踪(trace)生成 CPU 使用率报告。语法curt -i inputfile -o outputfile -n gensymsfile -m trcnmfile -a pidnamefile -f timestamp -l timestamp-ehpstP描述curt 命令将 AIX 跟踪文件当作输入并产生许多与处理器(CPU)优化和进程线程pthread 活动相关的统计信息。只要恰当地同步处理器时钟,它可用于单处理器和多处理器 AIX 跟踪。使
2、用 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_EXITHKWD_SYSC_CRTHREAD、HKWD_KERN_INITP
3、、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 应用程序。实现此目的的一种方法是启动您的应用程序之前,执行以下三步(Korn
4、Shell 语法):mkdir /temp.lib; cd /temp.lib ln -s /usr/ccs/lib/perf/libpthreads.a export LIBPATH=$PWD:$LIBPATH要激活用户 pthread 检测必须将检测到的库目录放入 LIBPATH;可将 temp.lib 目录放到任何位置。标志-i inputfile 指定要分析的输入 AIX 跟踪文件。 -o outputfile 指定输出文件(缺省值为 stdout)。 -n gensymsfile 指定由 gensyms 生成的名称文件。 -m trcnmfile 指定由 trcnm 指定的 name
5、s 文件。 -a pidnamefile 指定 PID 以处理映射文件。 -f timestamp 在时间戳记秒数时开始处理跟踪。 -l timestamp 在时间戳记秒数时停止处理跟踪。 -e 输出系统调用和 pthread 调用所用的时间信息。 -h 显示用法文本(该信息)。 -p 输出详细的进程信息。 -s 输出有关由系统调用返回的错误信息。 -t 输出详细的线程信息。 -P 输出详细的 pthread 信息。 如果 trace 进程名表格不准确,或者如果期望更多描述名,请使用 -a 标志以指定 PID 来处理名称映射文件。这是一个文件,其中的行构成为:一个进程标识符(十进制),后跟一个
6、空格,再后跟一个 ASCII 字符串,用作该进程的名称。如果输入 AIX 跟踪文件是使用指定的 -n 标志创建的,如果不在 curt 命令行上指定 -m 或 -n 标志,curt 将使用地址表来对名称解析“系统调用”和 Slih 地址。报告内容curt 和 AIX 跟踪信息curt 报告中的第一行给出 curt 程序执行的时间以及用来调用 curt 的命令行。紧跟其后的是关于 AIX 跟踪文件被 curt 处理的信息:名称、大小、创建日期和用来收集跟踪文件的命令。系统摘要报告的第一大节是“系统摘要”。该节描述了系统作为一个整体(所有处理器)在各种执行方式下使用的时间。这些方式如下:APPLIC
7、ATION 在“用户”(非特权)方式下所有处理器所用的时间总和。 SYSCALL 所有处理器进行“系统调用”所用时间的总和。这是处理器用来在内核代码下执行以提供用户进程所直接要求的服务的那部分时间。 KPROC 执行内核进程,而不是 IDLE 进程和 NFS 进程的所有处理器所用的时间总和。这是处理器用来执行特别创建的只执行内核代码的可分派进程所用去的那部分时间。 NFS 执行 NFS 操作的所有处理器所用的时间总和。NFS 操作以 RFS_DISPATCH_ENTRY 开始,以 RFS_DISPATCH_EXIT 子挂钩结束。 FLIH 所有处理器在 FLIH(一级中断处理程序)下所用时间的
8、总和。 SLIH 所有处理器在 SLIH(二级中断处理程序)下所用时间的总和。 DISPATCH 所有处理器在 AIX 分派代码下所用时间的总和。该总和包含用于分派所有线程(即包含对空闲进程的分派)的时间。 IDLE DISPATCH 所有处理器在 AIX 分派代码中所用时间的总和,其中被分派的进程是空闲进程。由于 DISPATCH 类别包含 IDLE DISPATCH 类别的时间,在计算 CPU 忙碌时间或 TOTAL 时便不再单独添加 IDLE DISPATCH 类别的时间(见下文)。 CPU 忙碌时间 所有处理器在执行应用程序、系统调用、kproc、flih、slih 和分派方式中所用时
9、间的总和。 IDLE 所有处理器执行空闲进程所用时间的总和。 TOTAL CPU 忙碌时间和空闲的总和。该数字被称为“总处理时间”。 标记为处理总时间(msec)的列给出相应的处理类别的总时间(毫秒)。标记为总时间百分比的列给出处理总时间作为 TOTAL 处理总时间的百分比。标记为忙碌时间百分比的列给出处理总时间作为 CPU 忙碌时间处理总时间的百分比。Avg. Thread Affinity 是线程分派至它上一次在其上执行的同一个处理器的概率。系统应用程序摘要在“系统总结”之后是“系统应用程序总结”,它详细说明了在用户方式下所用的时间。本节描述所有进程(在所有处理器上)执行 libpthre
10、ad 的各个部分使用的时间。PTHREAD 所有 pthreads 在跟踪的 libpthread 操作中所使用时间的总和。 PDISPATCH 所有在 libpthread 分派代码下所有使用时间的总和。 PIDLE 所有 pthread 在 libpthread vp_sleep 代码下所使用时间的总和。 OTHER 在跟踪的 libpthread 操作之外,所有线程在用户方式下所使用的时间的总和。 APPLICATION 时间 所有处理器在用户方式下所使用时间的总和。 标号为处理总时间(msec)的列给出了相应的处理类别的总时间(毫秒)。标记为总时间百分比的列给出处理总时间作为 TOTA
11、L 处理“系统摘要”总时间的百分比。标记为应用程序时间百分比的列给出处理总时间作为 APPLICATION 处理总时间的百分比。Avg. Pthread Affinity 是 pthread 分派至它上一次在其上执行的同一个线程的概率。每个处理器摘要“系统应用程序摘要”之后是“每个处理器摘要”。包含的信息基本相同,但以逐个处理器为基础进行停顿。在对“系统摘要”给出的描述中,词组“所有处理器所用时间的总和”可以替换为“该处理器所用时间”。进程分派 Total 数指 AIX 在该处理器上分派任何非空闲进程的次数,而空闲进程分派 Total 数给出空闲进程分派的计数。每个处理器应用程序摘要“每个处理
12、摘要”之后是“每个处理器应用程序摘要”,包含的信息基本相同,但以逐个处理器为基础进行停顿。pthread 分派 Total 数指 libpthreads 在该处理器上分派任何 pthread 的次数,而 pthread 空闲分派 Total 数 给出对 vp_sleep 调用的计数。应用程序摘要报告的第二大节是“应用程序摘要”。该节的第一部分在每个线程的基础上(通过线程标识符)总结了总系统处理时间。对于每个由进程标识符(和名称,如果有)和线程标识符来标识的线程,该摘要给出了总应用程序(与上述 APPLICATION 同)和系统调用(与上述 SYSCALL 同)处理时间(以毫秒计)与其对于跟踪中
13、的所有处理器的总系统处理时间的百分比。另外,该摘要还给出了这两种时间作为原始时间和作为对总处理时间的百分比的总和。本节的第二部分以每个进程标识符(通过进程标识符)为基础给出了同样的信息。本节的第三部分以每个进程名称(通过进程类型)为基础给出了同样的信息。本节的第四部分对内核进程线程(“内核进程摘要”)给出了相似信息。由于大多数 kprocs 提供特定的内核服务,所以总处理时间分割为两类,操作和内核,分别与一直运行在内核代码中的进程的“系统调用”和“应用程序”形成宽松的对应。每个内核进程线程通过其名称、进程标识符、线程标识符和内核进程类型(如已知)来识别。kproc 类型在紧跟在该摘要后的表格中
14、列出并进行描述。本节的第五部分是“pthread 进程摘要”。本节给出多线程进程上的总的应用程序时间(通过 Pid)。对于每个由进程标识符(和名称,如果有)标识的进程,该摘要给出总的应用程序、pthread 和其它处理时间(以毫秒计)与其对于跟踪中的所有处理器的总系统处理时间的百分比。该“摘要”的所有五节按从处理时间的综合程度最高到最低的顺序排列显示。注:进程标识符和线程标识符通常以十进制形式给出。系统调用摘要报告的第三大节是“系统调用摘要”。该节总结了用在系统调用上的处理时间。对于每个系统调用(SVC,通过内核地址(和名称,如已知)标识),该摘要给出了调用 SVC 的次数和所有调用的总处理器
15、时间(毫秒)以及其对于跟踪中所有处理器的总系统处理时间的百分比。此外,该摘要还给出了一个至 SVC 的调用的平均值、最小值和最大值。如指定了 -e 标志,则该摘要给出至 SVC 的所有调用所用的总时间以及一个调用所用的平均值、最小值和最大值时间。“所用时间”为从进程开始以内核方式执行 SVC 至该进程重新以应用程序方式执行为止的畴壁时钟时间。该“摘要”按从最多总处理器时间至最少总处理器时间的顺序排列。如果指定了 -s 标志,摘要将给出每个错误代码(errno)被每个“系统调用”返回的次数。该节的第二部分是“暂挂系统调用摘要”。该节列出了已启动但未完成的“系统调用”。给出的时间包括在系统和各种处
16、理器的 SYSCALL 时间和发出了 SVC 的线程和进程的 SYSCALL 时间中,但不包括在该节的第一部分中的系统调用的处理时间中。暂挂调用也不包括在该节的第一部分中给出的计数中。注:“系统调用地址”总是以十六进制表示。进程标识符和线程标识符总是以十进制表示。Pthread 调用摘要报告的第四大节是“Pthread 调用摘要”。该节总结了用在调用的 pthread 例程 中的处理时间。对于每个由名称指定的 pthread,该摘要给出调用 pthread 例程的次数和所有调用的总处理时间(毫秒)以及对于所有处理起的总系统处理时间的百分比。此外,该摘要还给出了一个至 pthread 例程的调用
17、的平均值、最小值和最大值。如果指定了 -e 标志,该摘要给出至 pthread 例程的所有调用所用的总时间以及一个调用所用的平均值、最小值和最大值。所用时间为从进程开始执行 pthread 例程至该进程退出 libpthreads 代码位置的畴壁时钟时。该“摘要”按从最多总处理器时间至最少总处理器时间的顺序排列。该节的第二部分是“暂挂 Pthread 调用摘要”。该节列出已启动但未完成的“Pthread 调用”。系统 NFS 调用摘要此报告的主要部分为“系统 NFS 调用摘要”。该部分总结 NFS 操作中所用的处理时间。对于每个由操作名和 NFS 版本标识的 NFS 操作,该摘要给出调用 op
18、eration 例程的次数和所有调用的总处理器时间(毫秒)以及对于 NFS 版本相同的所有处理器的总 NFS 操作时间的百分比。此外,该操作还给出了它的一个调用的平均次数、最小次数和最大次数。如果指定了 -e 标志,则该摘要将给出对此操作的所有调用的总所用时间以及一个调用所用的平均时间、最小时间和最大时间。同时也为 NFS 版本相同的所有操作提供了总所用时间作为总 NFS 操作所用时间的百分比。所用时间为操作分派退出挂钩之前来自操作分派项挂钩的畴壁时钟时。在任何情况下,摘要都将为 NFS 版本相同的所有操作提供操作调用计数,形式为总 NFS 操作调用的百分比。“摘要”以操作码的流水号形式表示。
19、如果同时提供了 NFS 版本 2 和版本 3 操作,将首先表示版本 2 操作。“系统 NFS 调用摘要”后紧跟“暂挂 NFS 调用摘要”。此部分列出了已启动但尚未完成的 NFS 调用。给出的时间包括在系统和各种处理器的 NFS 时间和发出 NFS 的线程和进程的操作时间中,但不包括在该节的第一部分中 NFS 操作的处理时间中。暂挂调用也不包括在该节的第一部分中给出的计数中。Flih 摘要报告的第五大节是“Flih 摘要”。该节总结了用在一级中断处理程序(Flih)上的时间量。该节的第一部分给出了跟踪中的每个 Flih 的条目总数,以及所有处理器的所有 Flih 执行的总处理器时间(毫秒)。此外
20、,该摘要还给出了一个执行的平均值、最小值和最大值。每个 Flih 由系统定义的 Flih 类型和相应的 Flih 名称(如已知)标识。第二部分为以逐个处理器为基础停顿的相同信息。可能不是所有发生在系统上的 Flih 都发生在每个处理器上,因此“全局 Flih”列表可能与每个处理器的 Flih 列表不同。该节的第二部分可能包含“暂挂 Flih 摘要”。这是一个已启动但未完成的 Flih 的列表。给出的时间包括在系统和影响到的处理器的 FLIH 时间中,但不包括在本节的两个部分中的 Flih 处理时间。暂挂调用也不包括在该节的两个部分中给出的计数中。Slih 摘要报告的第五大节是“Slih 摘要”
21、。该节总结了用在二级中断处理程序(Slih)上的时间量。该节的第一部分给出了跟踪中的每个 Slih 的条目总数,以及所有处理器的所有 Slih 执行的总处理器时间(毫秒)。此外,该摘要还给出了一个执行的平均值、最小值和最大值。每个 Slih 由内核地址和 Slih 功能或模块名称(如已知)标识。第二部分为以逐个处理器为基础停顿的相同信息。可能不是所有发生在系统上的 Slih 都发生在每个处理器上,因此“全局 Slih”列表可能与每个处理器的 Slih 列表不同。该节的第二部分可能包含“暂挂 Slih 摘要”。这是一个已启动但未完成的 Slih 的列表。给出的时间包括在系统和影响到的处理器的 S
22、LIH 时间中,但不包括在本节的两个部分中的 Slih 处理时间。暂挂 Slih 也不包括在该节的两个部分中给出的计数中。详细进程信息报告的本节是在指定 -p 标志时产生的。它对每个跟踪中找到的进程给出了详细的信息。该信息如下:该进程的进程标识符(Pid)及进程名称(如已知)。 该进程的线程标识符(Tid)的计数和列表。 该进程的 Pthread 标识(Ptid)的计数和列表(如果有)。 会显示用于应用程序(用户)方式和系统调用方式的时间。对于内核进程,将显示用于内核方式和操作方式的时间作为替代。 在应用方式下使用的时间、在 pthread 操作中使用的时间、在 libpthreads 分派中
23、使用的时间以及在 vp_sleep 中所使用的时间的详细信息。这仅在存在进程的任何 Ptid 的情况下才打印。 有关由该进程的 pthread 进行了哪些“Pthread 调用”的信息。对于 NFS kprocs,将转而显示有关此进程的线程调用了哪些“NFS 调用”的信息。-e 标志也对该输出有影响。 有关该进程的线程进行了哪些“系统调用”的信息。-e 标志也对该输出有影响。这些进程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。详细线程信息报告的本节是在指定 -t 标志时产生的。它对每个跟踪中找到的线程给出了详细的信息。该信息如下:该线程的线程标识符(Tid)和进程标识符(
24、Pid)及进程名称(如已知)。 会显示用于应用程序(用户)方式和系统调用方式的时间。对于内核进程,将显示用于内核方式和操作方式的时间作为替代。 有关该线程进行了哪些“系统调用”的信息,包括如果指定了 -s 标志,由“系统调用”返回的错误的信息。对于 NFS kproc 线程,将转而显示有关此线程调用了哪些“NFS 调用”的信息。-e 标志也对该输出有影响。 “线程相似性”是一个线程被分派至它上一次在其上执行的处理器的概率。 “分派直方图”显示了该线程分派到系统中每个 CPU 的次数。 该线程被分派的总次数(不包括在下文的 7 中描述的重新分派)。 由于中断被禁用而引起的重新分派次数表示刚刚运行
25、的相同线程由于设置了中断屏蔽至 INTMAX 而被再次分派。这仅在非零时显示。 平均分派等待时间为自从线程最后一次未分派至今的平均时间(即,自从线程最后一次停止执行至今的平均时间)。 当该线程执行时每个类型的 Flih 发生的次数。这些类型中的一些可能由线程(比如 DSI 或 ISI)引起,而其它类型(比如 IO)可能在该线程运行时发生,而不一定由线程本身引起。这些线程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。详细 Phread 信息报告的本节在指定 -P 标志时产生。它给出有关在跟踪中找到的每个 pthread 的详细信息。该信息如下:该 phread 的标识(Pti
26、d)和进程标识(Pid)以及进程名(如已知)。 显示在应用(用户)方式下和内核方式下使用的时间。 应用程序时间详细信息:在 pthread 调用、pthread 分派、vp_sleep(pthread 空闲)中所用的时间以及其它应用程序时间。 有关该 pthread 进行了哪些系统调用的信息,包括有关在指定了-s 标志的情况下由系统调用返回的信息。-e 标志也对该输出有影响。 有关由该 pthread 进行了哪些 Pthread 调用的信息。-e 标志也对该输出有影响。 亲和处理器集是对于任何 pthread 的分派,pthread 分配至它上一次在其上执行的同一个处理器的概率。 “分派直方图
27、”为线程显示该 pthread 分派到系统的每个 CPU 的次数。 该 pthread 分派的总次数(不包括在下文的 9 中描述的重新分派)。 由于正在禁止中断而引起的重新分派次数表示刚刚运行的相同 pthread 由于 pthread 已经设置了中断屏蔽至 INTMAX 而再次分配的次数。这仅在非零时显示。 平均分派等待时间为自从线程最后一次由内核分派器取消分派至今的平均使用时间(即,自从 pthread 最后一次停止执行至今的平均使用时间)。 线程亲合关系是对于任何 pthread 的分派,pthread 分配至它上一次在其上执行的同一个线程的概率。 “分派直方图”为线程显示该 pthre
28、ad 分派到系统的每个线程的次数。 分派到 libpthread 中的 pthread 的总数。 平均分派等待时间为自从线程最后一次由 libpthread 分派器取消分派的平均使用时间(即,自从线程最后一次停止执行至今的平均使用时间)。 当该线程执行时每个类型的 Flih 发生的次数。这些类型中的一些可能由线程(比如 DSI 或 ISI)引起,而其它类型(比如 IO)可能在该线程运行时发生,而不一定由线程本身引起。pthread 按 Pid-Ptid 分类显示。AIX 5L 性能优化,第 2 部分: 监视 CPU 使用 lparstat、vmstat、sar、网友:lanlfeng 发布于:
29、 2007.12.30 02:05(共有条评论) 查看评论 | 我要评论确定哪些 AIX® 工具可用于监视给定解决方案的中央处理器(Central Processing Unit,CPU),并了解为何某些工具优于其他工具。本系列的url=#resources第 1 部分/url讨论了优化方法和使用 CPU 性能优化过程的重要性。另外还简单介绍了一些在优化存储库时可以使用的性能工具,对 POWER CPU 进行了简要介绍,并讨论了 POWER 芯片发展中的体系结构提升如何为 System p™ 产品系列的硬件提升做出贡献。关于本系列本系列包含三个部分,讨论中央处理器 (CP
30、U) 性能和监视的各个方面。本系列的第 1 部分简单介绍了如何有效地监视 CPU,讨论了性能优化的方法,并给出了会对性能造成影响(正面影响或负面影响)的注意事项。尽管本系列的第 1 部分已经详细说明了一些命令,但第 2 部分将更集中于实际 CPU 系统监视的细节,以及趋势分析和结果。第 3 部分重点讨论通过主动控制线程使用和其他方法来最大限度地优化您的 CPU 性能。在整个系列文章中,我还将详细说明 AIX® CPU 性能优化和监视方面的各种最佳实践。 引言性能优化显然不只是运行一些命令然后观察结果。UNIX® 管理员需要知道将哪些工具用于何种目的,以及捕获数据的最佳方法是
31、什么。有时候您可能没有 30 天时间来通过系统地分析数据确定趋势,而有时候甚至都用不了 30 分钟就能够准确地判断出您的瓶颈所在。不管怎么说,这就是 CPU 监视的主要目的准确地确定瓶颈。除非所搜集的数据清楚地表明 CPU 是瓶颈,否则并不希望进行 CPU 优化。事实上,我们经常会发现瓶颈与内存或 I/O 相关,而不是与 CPU 相关的问题。作为 AIX 管理员,最重要的职责之一就是优化您的系统。如果不首先监视系统并分析结果,就不能进行优化。对于长期趋势和短期(接下来数小时内必须完成的工作)问题均是如此。虽然可以使用特定工具仅对 CPU 进行分析,但对于给定环境,可能要使用在系统上寻找所有可能瓶颈的工具。正如您可能已经知道的,CPU 是系统中最快的组件。如果您的 CPU 是瓶颈,将会对整个系统的性能造成影响。在我介绍这些工具时,请您注意以下命令已在 AIX 5.3 中进行了增强,允许工具使用 Advanced Power Virtualization 报告有关共享分区的准确统计数据:mpstat、sar、topas 和 vmstat。此外,还对以下基于跟踪的工具进行了更新:Curt、filemon、netpmon、pprof 和 splat。闲话少说,接下来让我们开始着手监视系统。UNIX 通用 CPU 监视工具接下来我们将讨论在所有 UNIX 分发版本(S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1