AIX 5L CPU性能分析.docx
《AIX 5L CPU性能分析.docx》由会员分享,可在线阅读,更多相关《AIX 5L CPU性能分析.docx(26页珍藏版)》请在冰豆网上搜索。
AIX5LCPU性能分析
AIX5LCPU性能分析
本文介绍使用AIX5.2内置命令CURT生成CPU使用和性能报告
curt命令
用途:
从跟踪(trace)生成CPU使用率报告。
语法
curt-iinputfile[-ooutputfile][-ngensymsfile]
[-mtrcnmfile][-apidnamefile][-ftimestamp][-ltimestamp]
[-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包含这些数字:
-j100,101,102,103,104,106,10C,119,134,135,139,200,210,215,38F,
465,605,609或者,您可以使用-Jcurt作为代替。
要将PTHREAD挂钩放入跟踪,必须使用检测到的libpthreads.a执行您的pthread应用程序。
实现此目的的一种方法是启动您的应用程序之前,执行以下三步(KornShell语法):
mkdir/temp.lib;cd/temp.lib
ln-s/usr/ccs/lib/perf/libpthreads.a
exportLIBPATH=$PWD:
$LIBPATH
要激活用户pthread检测必须将检测到的库目录放入LIBPATH;可将temp.lib目录放到任何位置。
标志
-iinputfile指定要分析的输入AIX跟踪文件。
-ooutputfile指定输出文件(缺省值为stdout)。
-ngensymsfile指定由gensyms生成的名称文件。
-mtrcnmfile指定由trcnm指定的names文件。
-apidnamefile指定PID以处理映射文件。
-ftimestamp在时间戳记秒数时开始处理跟踪。
-ltimestamp在时间戳记秒数时停止处理跟踪。
-e输出系统调用和pthread调用所用的时间信息。
-h显示用法文本(该信息)。
-p输出详细的进程信息。
-s输出有关由系统调用返回的错误信息。
-t输出详细的线程信息。
-P输出详细的pthread信息。
如果trace进程名表格不准确,或者如果期望更多描述名,请使用-a标志以指定PID来处理名称映射文件。
这是一个文件,其中的行构成为:
一个进程标识符(十进制),后跟一个空格,再后跟一个ASCII字符串,用作该进程的名称。
如果输入AIX跟踪文件是使用指定的-n标志创建的,如果不在curt命令行上指定-m或-n标志,curt将使用地址/表来对名称解析“系统调用”和Slih地址。
报告内容
curt和AIX跟踪信息
curt报告中的第一行给出curt程序执行的时间以及用来调用curt的命令行。
紧跟其后的是关于AIX跟踪文件被curt处理的信息:
名称、大小、创建日期和用来收集跟踪文件的命令。
系统摘要
报告的第一大节是“系统摘要”。
该节描述了系统作为一个整体(所有处理器)在各种执行方式下使用的时间。
这些方式如下:
APPLICATION
在“用户”(非特权)方式下所有处理器所用的时间总和。
SYSCALL
所有处理器进行“系统调用”所用时间的总和。
这是处理器用来在内核代码下执行以提供用户进程所直接要求的服务的那部分时间。
KPROC
执行内核进程,而不是IDLE进程和NFS进程的所有处理器所用的时间总和。
这是处理器用来执行特别创建的只执行内核代码的可分派进程所用去的那部分时间。
NFS
执行NFS操作的所有处理器所用的时间总和。
NFS操作以RFS_DISPATCH_ENTRY开始,以RFS_DISPATCH_EXIT子挂钩结束。
FLIH
所有处理器在FLIH(一级中断处理程序)下所用时间的总和。
SLIH
所有处理器在SLIH(二级中断处理程序)下所用时间的总和。
DISPATCH
所有处理器在AIX分派代码下所用时间的总和。
该总和包含用于分派所有线程(即包含对空闲进程的分派)的时间。
IDLEDISPATCH
所有处理器在AIX分派代码中所用时间的总和,其中被分派的进程是空闲进程。
由于DISPATCH类别包含IDLEDISPATCH类别的时间,在计算CPU忙碌时间或TOTAL时便不再单独添加IDLEDISPATCH类别的时间(见下文)。
CPU忙碌时间
所有处理器在执行应用程序、系统调用、kproc、flih、slih和分派方式中所用时间的总和。
IDLE
所有处理器执行空闲进程所用时间的总和。
TOTAL
CPU忙碌时间和空闲的总和。
该数字被称为“总处理时间”。
标记为处理总时间(msec)的列给出相应的处理类别的总时间(毫秒)。
标记为总时间百分比的列给出处理总时间作为TOTAL处理总时间的百分比。
标记为忙碌时间百分比的列给出处理总时间作为CPU忙碌时间处理总时间的百分比。
Avg.ThreadAffinity是线程分派至它上一次在其上执行的同一个处理器的概率。
系统应用程序摘要
在“系统总结”之后是“系统应用程序总结”,它详细说明了在用户方式下所用的时间。
本节描述所有进程(在所有处理器上)执行libpthread的各个部分使用的时间。
PTHREAD
所有pthreads在跟踪的libpthread操作中所使用时间的总和。
PDISPATCH
所有在libpthread分派代码下所有使用时间的总和。
PIDLE
所有pthread在libpthreadvp_sleep代码下所使用时间的总和。
OTHER
在跟踪的libpthread操作之外,所有线程在用户方式下所使用的时间的总和。
APPLICATION时间
所有处理器在用户方式下所使用时间的总和。
标号为处理总时间(msec)的列给出了相应的处理类别的总时间(毫秒)。
标记为总时间百分比的列给出处理总时间作为TOTAL处理“系统摘要”总时间的百分比。
标记为应用程序时间百分比的列给出处理总时间作为APPLICATION处理总时间的百分比。
Avg.PthreadAffinity是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例程的次数和所有调用的总处理时间(毫秒)以及对于所有处理起的总系统处理时间的百分比。
此外,该摘要还给出了一个至pthread例程的调用的平均值、最小值和最大值。
如果指定了-e标志,该摘要给出至pthread例程的所有调用所用的总时间以及一个调用所用的平均值、最小值和最大值。
所用时间为从进程开始执行pthread例程至该进程退出libpthreads代码位置的畴壁时钟时。
该“摘要”按从最多总处理器时间至最少总处理器时间的顺序排列。
该节的第二部分是“暂挂Pthread调用摘要”。
该节列出已启动但未完成的“Pthread调用”。
系统NFS调用摘要
此报告的主要部分为“系统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时间中,但不包括在本节的两个部分中的Flih处理时间。
暂挂调用也不包括在该节的两个部分中给出的计数中。
Slih摘要
报告的第五大节是“Slih摘要”。
该节总结了用在二级中断处理程序(Slih)上的时间量。
该节的第一部分给出了跟踪中的每个Slih的条目总数,以及所有处理器的所有Slih执行的总处理器时间(毫秒)。
此外,该摘要还给出了一个执行的平均值、最小值和最大值。
每个Slih由内核地址和Slih功能或模块名称(如已知)标识。
第二部分为以逐个处理器为基础停顿的相同信息。
可能不是所有发生在系统上的Slih都发生在每个处理器上,因此“全局Slih”列表可能与每个处理器的Slih列表不同。
该节的第二部分可能包含“暂挂Slih摘要”。
这是一个已启动但未完成的Slih的列表。
给出的时间包括在系统和影响到的处理器的SLIH时间中,但不包括在本节的两个部分中的Slih处理时间。
暂挂Slih也不包括在该节的两个部分中给出的计数中。
详细进程信息
报告的本节是在指定-p标志时产生的。
它对每个跟踪中找到的进程给出了详细的信息。
该信息如下:
该进程的进程标识符(Pid)及进程名称(如已知)。
该进程的线程标识符(Tid)的计数和列表。
该进程的Pthread标识(Ptid)的计数和列表(如果有)。
会显示用于应用程序(用户)方式和系统调用方式的时间。
对于内核进程,将显示用于内核方式和操作方式的时间作为替代。
在应用方式下使用的时间、在pthread操作中使用的时间、在libpthreads分派中使用的时间以及在vp_sleep中所使用的时间的详细信息。
这仅在存在进程的任何Ptid的情况下才打印。
有关由该进程的pthread进行了哪些“Pthread调用”的信息。
对于NFSkprocs,将转而显示有关此进程的线程调用了哪些“NFS调用”的信息。
-e标志也对该输出有影响。
有关该进程的线程进行了哪些“系统调用”的信息。
-e标志也对该输出有影响。
这些进程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。
详细线程信息
报告的本节是在指定-t标志时产生的。
它对每个跟踪中找到的线程给出了详细的信息。
该信息如下:
该线程的线程标识符(Tid)和进程标识符(Pid)及进程名称(如已知)。
会显示用于应用程序(用户)方式和系统调用方式的时间。
对于内核进程,将显示用于内核方式和操作方式的时间作为替代。
有关该线程进行了哪些“系统调用”的信息,包括如果指定了-s标志,由“系统调用”返回的错误的信息。
对于NFSkproc线程,将转而显示有关此线程调用了哪些“NFS调用”的信息。
-e标志也对该输出有影响。
“线程相似性”是一个线程被分派至它上一次在其上执行的处理器的概率。
“分派直方图”显示了该线程分派到系统中每个CPU的次数。
该线程被分派的总次数(不包括在下文的7中描述的重新分派)。
由于中断被禁用而引起的重新分派次数表示刚刚运行的相同线程由于设置了中断屏蔽至INTMAX而被再次分派。
这仅在非零时显示。
平均分派等待时间为自从线程最后一次未分派至今的平均时间(即,自从线程最后一次停止执行至今的平均时间)。
当该线程执行时每个类型的Flih发生的次数。
这些类型中的一些可能由线程(比如DSI或ISI)引起,而其它类型(比如IO)可能在该线程运行时发生,而不一定由线程本身引起。
这些线程以从应用程序和系统调用处理时间的综合程度最高到最低的顺序排列显示。
详细Phread信息
报告的本节在指定-P标志时产生。
它给出有关在跟踪中找到的每个pthread的详细信息。
该信息如下:
该phread的标识(Ptid)和进程标识(Pid)以及进程名(如已知)。
显示在应用(用户)方式下和内核方式下使用的时间。
应用程序时间详细信息:
在pthread调用、pthread分派、vp_sleep(pthread空闲)中所用的时间以及其它应用程序时间。
有关该pthread进行了哪些系统调用的信息,包括有关在指定了-s标志的情况下由系统调用返回的信息。
-e标志也对该输出有影响。
有关由该pthread进行了哪些Pthread调用的信息。
-e标志也对该输出有影响。
亲和处理器集是对于任何pthread的分派,pthread分配至它上一次在其上执行的同一个处理器的概率。
“分派直方图”为线程显示该pthread分派到系统的每个CPU的次数。
该pthread分派的总次数(不包括在下文的9中描述的重新分派)。
由于正在禁止中断而引起的重新分派次数表示刚刚运行的相同pthread由于pthread已经设置了中断屏蔽至INTMAX而再次分配的次数。
这仅在非零时显示。
平均分派等待时间为自从线程最后一次由内核分派器取消分派至今的平均使用时间(即,自从pthread最后一次停止执行至今的平均使用时间)。
线程亲合关系是对于任何pthread的分派,pthread分配至它上一次在其上执行的同一个线程的概率。
“分派直方图”为线程显示该pthread分派到系统的每个线程的次数。
分派到libpthread中的pthread的总数。
平均分派等待时间为自从线程最后一次由libpthread分派器取消分派的平均使用时间(即,自从线程最后一次停止执行至今的平均使用时间)。
当该线程执行时每个类型的Flih发生的次数。
这些类型中的一些可能由线程(比如DSI或ISI)引起,而其它类型(比如IO)可能在该线程运行时发生,而不一定由线程本身引起。
pthread按Pid-Ptid分类显示。
AIX5L性能优化,第2部分:
监视CPU使用lparstat、vmstat、sar、
网友:
lanlfeng发布于:
2007.12.3002:
05 (共有条评论)查看评论|我要评论
确定哪些AIX®工具可用于监视给定解决方案的中央处理器(CentralProcessing
Unit,CPU),并了解为何某些工具优于其他工具。
本系列的
[url=#resources]第1部分[/url]
讨论了优化方法和使用CPU
性能优化过程的重要性。
另外还简单介绍了一些在优化存储库时可以使用的性能工具,对POWERCPU进行了简要介绍,并讨论了POWER
芯片发展中的体系结构提升如何为Systemp™产品系列的硬件提升做出贡献。
关于本系列
本系列包含三个部分,讨论中央处理器(CPU)性能和监视的各个方面。
本系列的第1部分简单介绍了如何有效地监视
CPU,讨论了性能优化的方法,并给出了会对性能造成影响(正面影响或负面影响)的注意事项。
尽管本系列的第1部分已经详细说明了一些命令,但第2
部分将更集中于实际CPU系统监视的细节,以及趋势分析和结果。
第3部分重点讨论通过主动控制线程使用和其他方法来最大限度地优化您的CPU
性能。
在整个系列文章中,我还将详细说明AIX®CPU性能优化和监视方面的各种最佳实践。
引言
性能优化显然不只是运行一些命令然后观察结果。
UNIX®管理员需要知道将哪些工具用于何种目的,以及捕获数据的最佳方法是什么。
有时候您可能没有30
天时间来通过系统地分析数据确定趋势,而有时候甚至都用不了30分钟就能够准确地判断出您的瓶颈所在。
不管怎么说,这就是CPU
监视的主要目的——准确地确定瓶颈。
除非所搜集的数据清楚地表明CPU是瓶颈,否则并不希望进行CPU优化。
事实上,我们经常会发现瓶颈与内存或I/O
相关,而不是与CPU相关的问题。
作为AIX
管理员,最重要的职责之一就是优化您的系统。
如果不首先监视系统并分析结果,就不能进行优化。
对于长期趋势和短期(接下来数小时内必须完成的工作)问题均是如此。
虽然可以使用特定工具仅对
CPU进行分析,但对于给定环境,可能要使用在系统上寻找所有可能瓶颈的工具。
正如您可能已经知道的,CPU是系统中最快的组件。
如果您的CPU
是瓶颈,将会对整个系统的性能造成影响。
在我介绍这些工具时,请您注意以下命令已在AIX5.3中进行了增强,允许工具使用AdvancedPower
Virtualization
报告有关共享分区的准确统计数据:
mpstat、sar、topas和
vmstat。
此外,还对以下基于跟踪的工具进行了更新:
Curt、filemon、netpmon、pprof和splat。
闲话少说,接下来让我们开始着手监视系统。
UNIX通用CPU监视工具
接下来我们将讨论在所有UNIX分发版本(S