curt Command
Purpose
Generates CPU utilization report from a trace.
Syntax
curt -i inputfile [-o outputfile] [-n gensymsfile] [-m trcnmfile] [-a pidnamefile] [-f timestamp] [-l timestamp] [-r PURR] [-ehpstP] [-@ {ALL | WparList}]
Description
The curt command takes an AIX® trace file as input and produces a number of statistics related to processor (CPU) utilization and process/thread/pthread activity. The command will work with both uniprocessor and multiprocessor AIX traces if the processor clocks are properly synchronized.
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_CPU_PREEMPT,
HKWD_DR, HKWD_KERN_PHANTOM_EXTINT, HKWD_RFS4_VOPS, HHKWD_RFS4_VFSOPS, HKWD_RFS4_MISCOPS, HKWD_RFS4,
HKWD_KERN_HCALL, HKWD_WPAR,
HKWD_PTHREAD_VPSLEEP, HKWD_PTHREAD_GENERAL
This means that, if you specify the -j flag on
your trace command, you must include these numbers for curt:
-j 100,101,102,103,104,106,10C,119,134,135,139,200,210,215,38F,419,465,47F,488,489,48A,48D,492,4C9,605,609
Or,
you can use -J curt instead.- mkdir /temp.lib; cd /temp.lib
- ln -s /usr/ccs/lib/perf/libpthreads.a
- export LIBPATH=$PWD:$LIBPATH
Flags
Item | Description |
---|---|
-i inputfile | Specifies the input AIX trace file to be analyzed. |
-o outputfile | Specifies the output file (default is stdout). |
-n gensymsfile | Specifies a names file produced by gensyms. |
-m trcnmfile | Specifies a names file produced by trcnm. |
-a pidnamefile | Specifies a PID to process name mapping file. |
-f timestamp | Starts processing trace at timestamp seconds. |
-l timestamp | Stops processing trace at timestamp seconds. |
-r PURR | Uses the PURR register to calculate CPU times. |
-e | Outputs elapsed time information for system calls and pthread calls. |
-h | Displays usage text (this information). |
-p | Outputs detailed process information. |
-s | Outputs information about errors returned by system calls. |
-t | Outputs detailed thread information. |
-P | Outputs detailed pthread information. |
-@ | Controls the addition of workload partition information to
a curt report. You can use the -@ flag in one of the following
forms:
|
If the trace process name table is not accurate, or if more descriptive names are desired, use the -a flag to specify a PID to process name mapping file. This is a file with lines consisting of a process ID (in decimal) followed by a space followed by an ASCII string to use as the name for that process.
If the input AIX-trace file is created with the -n flag specified, curt will use that address/name table to resolve System Call and Slih addresses to names if you do not specify a -m or a -n flag on the curt command line.
If the input AIX-trace file is created in a workload partition, the curt command prints a WPAR report. The -@ flag is not allowed in this case.
Report Contents
The curt report includes the following information:
curt and Trace Information
The first lines in the curt report give the time when the curt program was executed and the command line used to invoke curt. Following that is this information about the AIX trace file being processed by curt: name, size, creation date, and the command used to gather the trace file.
The line PURR was used to calculate
CPU times
is printed if the -r PURR option was used
and the trace file includes the PURR register.
System Summary
- APPLICATION
- The sum of times spent by all processors in User (non-privileged) mode.
- SYSCALL
- The sum of times spent by all processors doing System Calls. This is the portion of time that a processor spends executing in the kernel code providing services directly requested by a user process.
- HCALL
- The sum of times spent by all processors doing Hypervisors Calls. This is the portion of time that a processor spends executing in the hypervisor code providing services directly requested by the kernel.
- KPROC
- The sum of times spent by all processors executing kernel processes other than the IDLE process and NFS processes. This is the portion of time that a processor spends executing specially created dispatchable processes which only execute kernel code.
- NFS
- The sum of times spent by all processors executing NFS operations.
NFS operations begin with RFS_DISPATCH_ENTRY and end with RFS_DISPATCH_EXIT
subhooks for NFS V2/V3. NFS operations begin with
start
and end withdone
ordone error
for NFS V4. - FLIH
- The sum of times spent by all processors in FLIHs (first level interrupt handlers).
- SLIH
- The sum of times spent by all processors in SLIHs (second level interrupt handlers).
- DISPATCH
- The sum of times spent by all processors in the AIX dispatch code. This sum includes the time spent in dispatching all threads (i.e. it includes the dispatches of the IDLE process).
- IDLE DISPATCH
- The sum of times spent by all processors in the AIX dispatch code where the process being dispatched was the IDLE process. Because the DISPATCH category includes the IDLE DISPATCH category's time, the IDLE DISPATCH category's time is not separately added to calculate either CPU(s) busy time or TOTAL (see below).
- CPU(s) busy time
- The sum of times spent by all processors executing in application, syscall, kproc, flih, slih, and dispatch modes.
- IDLE
- The sum of times spent by all processors executing the IDLE process.
- TOTAL
- The sum of CPU(s) busy time and IDLE. This number is referred to as "total processing time."
processing total time (msec)
gives
the total time (in milliseconds) for the corresponding processing
category. The column labeled percent total time
gives
the processing total time as a percentage of the TOTAL processing
total time. The column labeled percent busy time
gives
the processing total time as a percentage of the CPU(s) busy time
processing total time. The Avg. Thread Affinity
is
the probability that a thread was dispatched to the same processor
that it last executed on. The Total Physical CPU time (msec) is the real time the CPU(s) were running (not preempted). The Physical CPU percentage gives the Physical CPU(s) Time as a percentage of total time.
System Application Summary
- PTHREAD
- The sum of times spent by all pthreads in traced libpthreads operations.
- PDISPATCH
- The sum of times spent by all pthreads in the libpthreads dispatch code.
- PIDLE
- The sum of times spent by all pthreads in libpthreads vp_sleep code.
- OTHER
- The sum of time spent by all threads in user mode outside traced libpthreads operations.
- APPLICATION time
- The sum of times spent by all processors in user mode.
processing total time (msec)
gives
the total time in milliseconds for the corresponding processing category.
The column labeled percent total time
gives the processing
total time as a percentage of the TOTAL processing total time of System
Summary. The column labeled percent application time
gives
the processing total time as a percentage of the APPLICATION processing
total time. The Avg. Pthread Affinity
is the probability
that a pthread was dispatched to the same thread that it last executed
on. s Summary
- appli
- Percent of the total process time that was spent by the WPAR in user mode (non-privileged).
- syscall
- Percent of the total process time that was spent by the WPAR performing system calls.
- hcall
- Percent of the total process time that was spent by the WPAR performing hypervisor calls.
- kproc
- Percent of the total process time that was spent by the WPAR running kernel processes calls.
- nfs
- Percent of the total process time that was spent by the WPAR running NFS operations.
- flih
- Percent of the total process time that was spent by the WPAR in the first-level interrupt handlers.
- slih
- Percent of the total process time that was spent by the WPAR in the second-level interrupt handlers.
- total
- Percent of the total process time that was spent by the WPAR.
- total(msec)
- The sum of processor time, in milliseconds, used by the WPAR.
- WPAR
- The WPAR name.
Per Processor Summary
Following the System Application Summary is the Per Processor Summary, which is essentially the same information but broken down on a processor by processor basis. In the description given for the System Summary, the phrase "sum of times spent by all processors" can be replaced by "time spent by this processor". The Total number of process dispatches refers to how many times AIX dispatched any non-IDLE process on this processor, while Total number of idle dispatches gives the count of IDLE process dispatches.
The Total Physical
CPU time (msec)
is the real time the processor was running
(not preempted). The Physical CPU percentage
gives
the Physical CPU Time as a percentage of total time.
Physical
processor affinity
is the probability that a logical processor
was dispatched on the same physical processor that it last executed
on. Total number of preemptions is the number of times the virtual
processor was redispatched on a physical CPU.
Total
number of H_CEDE
is the number of H_CEDE hypervisor call
done by this processor; with preeemption
indicates
the number of H_CEDE calls resulting in preemption.
Total
number of H_CONFER
is the number of H_CONFER hypervisor
call done by this processor; with preeemption
indicates
the number of H_CONFER calls resulting in preemption.
Per Processor Application Summary
Following each Processor Summary is the Per Processor Application Summary, which is essentially the same information as System Application Summary but broken down on a processor by processor basis.
The Total
number of pthread dispatches
refers to how many times libpthreads
dispatched any pthread on this processor, while Total number
of pthread idle dispatches
gives the count of calls to vp_sleep.
Application Summary
The second major section of the report is the Application Summary. The first part of this section summarizes the total system processing time on a per-thread basis (by Tid). For each thread, identified by Process ID (and name if available) and Thread ID, the summary gives the total application (same as APPLICATION above) and syscall (same as SYSCALL above) processing time in milliseconds and as the percentage of the total system processing time for all processors in the trace. In addition, the summary gives the sum of those two times, both as raw time, and as a percentage of the total processing time.
The second part of this section gives the same information on a per-process ID (by Pid) basis. The third part of this section gives the same information on a per-process name (by process type) basis.
The fourth part of this section gives similar information for kernel process threads (Kproc Summary). Since most kprocs provide a specific kernel service, the total processing time is split into two categories, operation and kernel, which loosely correspond to syscall and application for a process which always runs in kernel code. Each kproc thread is identified by name, Process ID, Thread ID and type of kproc if known. The kproc types are listed and described in a table immediately following this summary.
The fifth part of this section is the Pthread Process Summary. This section gives the total application time on multi-threaded Process (by Pid). For each process, identified by Process ID (and name if available), the summary gives the total application, pthread and other processing time in milliseconds and as the percentage of the total application time for all processors in the trace.
All five sections of the Summary are presented in sorted order from most combined processing time to least.
In all five sections of an Application Summary, the WPAR name is added to identify the thread or process if you specify the -@ flag.
System Calls Summary
The third major section of the report is the System Calls Summary. This section summarizes the processing time spent in system calls. For each system call (SVC), identified by kernel address (and name if available), the summary gives the number of times the SVC was called and the total processor time for all calls in milliseconds and as a percentage of total system processing time for all processors in the trace. In addition, the summary gives the average, minimum and maximum times for one call to the SVC. If the -e flag is specified, the summary gives the total elapsed time for all calls to the SVC and the average, minimum and maximum elapsed times for one call. Elapsed time is the wall-clock time from when the process starts executing the SVC in kernel mode until the process resumes executing in application mode. The Summary is presented in sorted order from most total processor time to least. If the -s flag is specified, the summary gives the number of times each error code (errno) was returned by each System Call.
The second part of this section is the Pending System Calls Summary. This part lists the System Calls which have started but not completed. The time that is given is included in the SYSCALL time for the system and the various processors and is included in the syscall time for the pthread, thread and process which issued the SVC, but is not included in the processing time for the system call in the first part of this section. The pending call is also not included in the count given in the first part of this section.
- System call addresses are always given in hexadecimal. Pids and Tids are always given in decimal.
- WPAR names are added in a System Calls Summary to identify threads or processes if you specify the -@ flag.
System Hypervisor Calls Summary
If
there is hypervisor activity in the trace, an additional section
is inserted at this point of the report. This major section of the
report is called Hypervisor Calls Summary
. This section
summarizes the processing time spent in hypervisor calls. For each
Hypervisor call (HCALL), identified by name (and kernel address),
the summary gives the number of times the HCALL was called and the
total processor time for all calls in milliseconds and as a percentage
of total system processing time for all processors in the trace. In
addition, the summary gives the average, minimum and maximum times
for one call to the HCALL. If the -e flag is specified, the
summary gives the total elapsed time for all calls to the HCALL and
the average, minimum, and maximum elapsed times for one call. Elapsed
time is the wall-clock time between the start and end of an hypervisor
call. The summary is presented in sorted order from most total processor
time to least.
The second part of this section is called Pending
Hypervisor Calls Summary
. This part lists the Hypervisor
Calls which have started but not completed. The time that is given
is included in the HCALL time for the system and the various processors
and is included in the hypervisor time for the pthread, thread, and
process which issued the HCALL, but is not included in the processing
time for the hypervisor call in the first part of this section. The
pending call is also not included in the count given in the first
part of this section.
- Hypervisor call addresses are always given in hexadecimal. Pids and Tids are always given in decimal.
- WPAR names are added in a System Hypervisor Calls Summary to identify the threads or processes if you specify the -@ flag.
Pthread Calls Summary
The fourth major section of the report is the Pthread Calls Summary. This section summarizes the processing time spent in called pthread routines. For each pthread routine, identified by name, the summary gives the number of times the pthread routine was called and the total processor time for all calls, in milliseconds and as a percentage of total system processing time, for all processors in the trace. In addition, the summary gives the average, minimum and maximum times for one call to the pthread routine. If the -e flag is specified, the summary gives the total elapsed time for all calls to the pthread routine and the average, minimum and maximum elapsed times for one call. Elapsed time is the wall-clock time from when the process starts executing the pthread routine until the process exits the libpthreads code. The Summary is presented in sorted order from most total processor time to least.
The second part of this section is the Pending Pthread Calls Summary. This part lists the Pthread Calls which have started but not completed.
System NFS Calls Summary
This major section of the report is the System NFS Calls Summary. This section summarizes the processing time spent in NFS operations. For each NFS operation, identified by operation name and NFS version, the summary gives the number of times the operation was called and the total processor time for all calls in milliseconds and as a percentage of total NFS operation time for all operations with the same NFS version. In addition, the summary gives the average, minimum and maximum times for one call to the operation. If the -e flag is specified, the summary gives the total elapsed time for all calls to the operation and the average, minimum and maximum times for one call. The total elapsed time is also given as a percentage of total NFS operation elapsed time for all operations with the same NFS version. Elapsed time is the wall-clock time from the operation dispatch entry hook until the operation dispatch exit hook. In all cases, the summary gives the count of operation calls as a percentage of total NFS operation calls for all operations with the same NFS version. The Summary is presented in numerical order of the operation codes. The operations are presented in order of NFS Version. For NFS V4, the server operations are listed before the client operations.
The System NFS Calls Summary is followed by the Pending NFS Calls Summary. This part lists the NFS calls which have started but not completed. The time that is given is included in the NFS time for the system and the various processors and is included in the operation time for the thread and process which issued the NFS call, but is not included in the processing time for the NFS operation in the first part of this section. The pending call is also not included in the count given in the first part of this section.
Flih Summary
The fifth major section of the report is the Flih Summary. This section summarizes the amount of time spent in first level interrupt handlers (Flih). The first part of the summary gives the total number of entries to each Flih in the trace, as well as the total processor time for all executions of the Flih by all processors in milliseconds. In addition, the summary gives the average, minimum and maximum times for one execution. Each Flih is identified by a system-defined Flih type and a corresponding Flih name, if known.
The second part is the same information broken down on a processor by processor basis. It is possible that not all Flihs which occurred on the system will have occurred on each processor, so the Global Flih list may not be the same as the Flih list for each processor.
The second part of this section may include the Pending Flih Summary. This is a list of the Flihs which have started but not completed. The time that is given is included in the FLIH time for the system and the affected processor, but is not included in the processing time for the Flih in both parts of this section. The pending Flih is also not included in the counts given in both parts of this section.
Slih Summary
The fifth major section of the report is the Slih Summary. This section summarizes the amount of time spent in second level interrupt handlers (Slih). The first part of the summary gives the total number of entries to each Slih in the trace, as well as the total processor time for all executions of the Slih by all processors in milliseconds. In addition, the summary gives the average, minimum and maximum times for one execution. Each Slih is identified by kernel address and Slih function or module name, if known.
The second part is the same information broken down on a processor by processor basis. It is possible that not all Slihs which occurred on the system will have occurred on each processor, so the Global Slih list may not be the same as the Slih list for each processor.
The second part of this section may include the Pending Slih Summary. This is a list of the Slihs which have started but not completed. The time that is given is included in the SLIH time for the system and the affected processor, but is not included in the processing time for the Slih in both parts of this section. The pending Slih is also not included in the counts given in both parts of this section.
Detailed Process Information
- The Process ID (Pid) for that process, the process name if known, and the WPAR name if you specify the -@ flag.
- A count and a list of the Thread IDs (Tids) for that process.
- A count and a list of Pthread IDs (Ptid) for that process, if any.
- The time spent in application (user) mode, system call mode, and hypervisor mode is shown. For kprocs, the time spent in kernel mode and operation mode is shown instead.
- The detail of time spent in application mode, time spent in pthread operations, time spent in libpthreads dispatch, and time spent in vp_sleep. This is printed only if there are any Ptids for the process.
- Information on what Pthread calls were made by pthreads of this process. For NFS kprocs, information on which NFS Calls were made by threads of this process is shown instead. The -e flag also affects this output.
- Information on what hypervisor calls were made by threads of this process. The -e flag also affects this output.
- Information on what system calls were made by threads of this process. The -e flag also affects this output.
Detailed Thread Information
- The Thread ID (Tid) and Process ID (Pid) for that thread, the process name if known, and the WPAR name if you specify the -@ flag.
- The time spent in application (user) mode, system call mode, and hypervisor call mode is shown. For kprocs, the time spent in kernel mode and operation mode is shown instead.
- Information on which system calls were made by this thread, including information on errors returned by the system calls if the -s flag was specified. For NFS kproc threads, information on which NFS Calls were made by this thread is shown instead. The -e flag also affects this output.
- Information on which hypervisor calls were made by this thread. The -e flag also affects this output.
- The processor affinity is the probability that, for any dispatch of the thread, the thread was dispatched to the same processor that it last executed on.
- The Dispatch Histogram shows the number of times the thread was dispatched to each CPU in the system.
- The total number of times the thread was dispatched (not including redispatches described in 7 below).
- The number of redispatches due to interrupts being disabled indicates that the same thread which just ran was dispatched again because that thread has set the interrupt mask to INTMAX. This is shown only if nonzero.
- The average dispatch wait time is the average elapsed time since the thread was last undispatched (i.e. average elapsed time since the thread last stopped executing).
- How many times each type of Flih occurred while this thread was executing. Some of these types may be caused by the thread (such as DSI or ISI) while other types (such as IO) are can occur when this thread just happens to be running and are not necessarily caused by the thread itself.
Detailed Pthread Information
- The Pthread ID (Ptid) and Process ID (Pid) for that pthread, the process name if known, and the WPAR name if you specify the -@ flag.
- The time spent in application (user) mode, kernel mode, and hypervisor mode is shown.
- Application time detail: time spent in pthread calls, pthread dispatch, vp_sleep (pthread idle), and other application time.
- Information on what system calls were made by this pthread, including information on errors returned by the system calls if the -s flag was specified. The -e flag also affects this output.
- Information on what hypervisor calls were made by this pthread. The -e flag also affects this output.
- Information on what Pthread calls were made by this pthread. The -e flag also affects this output.
- The processor affinity is the probability that, for any dispatch of the pthread, the pthread was dispatched to the same processor that it last executed on.
- The Dispatch Histogram for thread shows the number of times the pthread was dispatched to each CPU in the system.
- The total number of times the pthread was dispatched (not including redispatches described in 9 below).
- The number of redispatches due to interrupts being disabled indicates that the same pthread which just ran was dispatched again because that pthread has set the interrupt mask to INTMAX. This is shown only if non-zero.
- The average dispatch wait time is the average elapsed time since the pthread was last undispatched by the kernel dispatcher (that is, average elapsed time since the pthread last stopped executing).
- The thread affinity is the probability that, for any dispatch of the pthread, the pthread was dispatched to the same thread that it last executed on.
- The Dispatch Histogram for pthread shows the number of times the pthread was dispatched to each thread in the system.
- The total number of times the pthread was dispatched in libpthreads.
- The average dispatch wait time is the average elapsed time since the thread was last undispatched by the libpthreads dispatcher (that is, the average elapsed time since the thread last stopped executing).
- How many times each type of Flih occurred while this thread was executing. Some of these types may be caused by the thread (such as DSI or ISI) while other types (such as IO) are can occur when this thread just happens to be running and are not necessarily caused by the thread itself.
The pthreads are presented sorted by Pid-Ptid.
Files
Item | Description |
---|---|
/usr/bin/curt | Contains the curt command. Located in the bos.perf.tools fileset. |