]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - usr.sbin/pmcstat/pmcstat.8
MFC r344245:
[FreeBSD/stable/10.git] / usr.sbin / pmcstat / pmcstat.8
1 .\" Copyright (c) 2003-2008 Joseph Koshy
2 .\" Copyright (c) 2007 The FreeBSD Foundation
3 .\" All rights reserved.
4 .\"
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
7 .\" are met:
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\"    notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\"    notice, this list of conditions and the following disclaimer in the
12 .\"    documentation and/or other materials provided with the distribution.
13 .\"
14 .\" This software is provided by Joseph Koshy ``as is'' and
15 .\" any express or implied warranties, including, but not limited to, the
16 .\" implied warranties of merchantability and fitness for a particular purpose
17 .\" are disclaimed.  in no event shall Joseph Koshy be liable
18 .\" for any direct, indirect, incidental, special, exemplary, or consequential
19 .\" damages (including, but not limited to, procurement of substitute goods
20 .\" or services; loss of use, data, or profits; or business interruption)
21 .\" however caused and on any theory of liability, whether in contract, strict
22 .\" liability, or tort (including negligence or otherwise) arising in any way
23 .\" out of the use of this software, even if advised of the possibility of
24 .\" such damage.
25 .\"
26 .\" $FreeBSD$
27 .\"
28 .Dd November 18, 2015
29 .Dt PMCSTAT 8
30 .Os
31 .Sh NAME
32 .Nm pmcstat
33 .Nd "performance measurement with performance monitoring hardware"
34 .Sh SYNOPSIS
35 .Nm
36 .Op Fl C
37 .Op Fl D Ar pathname
38 .Op Fl E
39 .Op Fl F Ar pathname
40 .Op Fl G Ar pathname
41 .Op Fl M Ar mapfilename
42 .Op Fl N
43 .Op Fl O Ar logfilename
44 .Op Fl P Ar event-spec
45 .Op Fl R Ar logfilename
46 .Op Fl S Ar event-spec
47 .Op Fl T
48 .Op Fl W
49 .Op Fl a Ar pathname
50 .Op Fl c Ar cpu-spec
51 .Op Fl d
52 .Op Fl e
53 .Op Fl f Ar pluginopt
54 .Op Fl g
55 .Op Fl k Ar kerneldir
56 .Op Fl l Ar secs
57 .Op Fl m Ar pathname
58 .Op Fl n Ar rate
59 .Op Fl o Ar outputfile
60 .Op Fl p Ar event-spec
61 .Op Fl q
62 .Op Fl r Ar fsroot
63 .Op Fl s Ar event-spec
64 .Op Fl t Ar process-spec
65 .Op Fl v
66 .Op Fl w Ar secs
67 .Op Fl z Ar graphdepth
68 .Op Ar command Op Ar args
69 .Sh DESCRIPTION
70 The
71 .Nm
72 utility measures system performance using the facilities provided by
73 .Xr hwpmc 4 .
74 .Pp
75 The
76 .Nm
77 utility can measure both hardware events seen by the system as a
78 whole, and those seen when a specified set of processes are executing
79 on the system's CPUs.
80 If a specific set of processes is being targeted (for example,
81 if the
82 .Fl t Ar process-spec
83 option is specified, or if a command line is specified using
84 .Ar command ) ,
85 then measurement occurs till
86 .Ar command
87 exits, or till all target processes specified by the
88 .Fl t Ar process-spec
89 options exit, or till the
90 .Nm
91 utility is interrupted by the user.
92 If a specific set of processes is not targeted for measurement, then
93 .Nm
94 will perform system-wide measurements till interrupted by the
95 user.
96 .Pp
97 A given invocation of
98 .Nm
99 can mix allocations of system-mode and process-mode PMCs, of both
100 counting and sampling flavors.
101 The values of all counting PMCs are printed in human readable form
102 at regular intervals by
103 .Nm .
104 The output of sampling PMCs may be configured to go to a log file for
105 subsequent offline analysis, or, at the expense of greater
106 overhead, may be configured to be printed in text form on the fly.
107 .Pp
108 Hardware events to measure are specified to
109 .Nm
110 using event specifier strings
111 .Ar event-spec .
112 The syntax of these event specifiers is machine dependent and is
113 documented in
114 .Xr pmc 3 .
115 .Pp
116 A process-mode PMC may be configured to be inheritable by the target
117 process' current and future children.
118 .Sh OPTIONS
119 The following options are available:
120 .Bl -tag -width indent
121 .It Fl C
122 Toggle between showing cumulative or incremental counts for
123 subsequent counting mode PMCs specified on the command line.
124 The default is to show incremental counts.
125 .It Fl D Ar pathname
126 Create files with per-program samples in the directory named
127 by
128 .Ar pathname .
129 The default is to create these files in the current directory.
130 .It Fl E
131 Toggle showing per-process counts at the time a tracked process
132 exits for subsequent process-mode PMCs specified on the command line.
133 This option is useful for mapping the performance characteristics of a
134 complex pipeline of processes when used in conjunction with the
135 .Fl d
136 option.
137 The default is to not to enable per-process tracking.
138 .It Fl F Ar pathname
139 Print calltree (Kcachegrind) information to file
140 .Ar pathname .
141 If argument
142 .Ar pathname
143 is a
144 .Dq Li -
145 this information is sent to the output file specified by the
146 .Fl o
147 option.
148 .It Fl G Ar pathname
149 Print callchain information to file
150 .Ar pathname .
151 If argument
152 .Ar pathname
153 is a
154 .Dq Li -
155 this information is sent to the output file specified by the
156 .Fl o
157 option.
158 .It Fl M Ar mapfilename
159 Write the mapping between executable objects encountered in the event
160 log and the abbreviated pathnames used for
161 .Xr gprof 1
162 profiles to file
163 .Ar mapfilename .
164 If this option is not specified, mapping information is not written.
165 Argument
166 .Ar mapfilename
167 may be a
168 .Dq Li -
169 in which case this mapping information is sent to the output
170 file configured by the
171 .Fl o
172 option.
173 .It Fl N
174 Toggle capturing callchain information for subsequent sampling PMCs.
175 The default is for sampling PMCs to capture callchain information.
176 .It Fl O Ar logfilename
177 Send logging output to file
178 .Ar logfilename .
179 If
180 .Ar logfilename
181 is of the form
182 .Ar hostname Ns : Ns Ar port ,
183 where
184 .Ar hostname
185 does not start with a
186 .Ql \&.
187 or a
188 .Ql / ,
189 then
190 .Nm
191 will open a network socket to host
192 .Ar hostname
193 on port
194 .Ar port .
195 .Pp
196 If the
197 .Fl O
198 option is not specified and one of the logging options is requested,
199 then
200 .Nm
201 will print a textual form of the logged events to the configured
202 output file.
203 .It Fl P Ar event-spec
204 Allocate a process mode sampling PMC measuring hardware events
205 specified in
206 .Ar event-spec .
207 .It Fl R Ar logfilename
208 Perform offline analysis using sampling data in file
209 .Ar logfilename .
210 .It Fl S Ar event-spec
211 Allocate a system mode sampling PMC measuring hardware events
212 specified in
213 .Ar event-spec .
214 .It Fl T
215 Use a top like mode for sampling PMCs. The following hotkeys
216 can be used: 'c+a' switch to accumulative mode, 'c+d' switch
217 to delta mode, 'm' merge PMCs, 'n' change view, 'p' show next
218 PMC, ' ' pause, 'q' quit. calltree only: 'f' cost under threshold
219 is seen as a dot.
220 .It Fl W
221 Toggle logging the incremental counts seen by the threads of a
222 tracked process each time they are scheduled on a CPU.
223 This is an experimental feature intended to help analyse the
224 dynamic behaviour of processes in the system.
225 It may incur substantial overhead if enabled.
226 The default is for this feature to be disabled.
227 .It Fl a Ar pathname
228 Perform a symbol and file:line lookup for each address in each
229 callgraph and save the output to
230 .Ar pathname .
231 Unlike
232 .Fl m
233 that only resolves the first symbol in the graph, this resolves
234 every node in the callgraph, or prints out addresses if no
235 lookup information is available.
236 This option requires the
237 .Fl R
238 option to read in samples that were previously collected and
239 saved with the 
240 .Fl O
241 option.
242 .It Fl c Ar cpu-spec
243 Set the cpus for subsequent system mode PMCs specified on the
244 command line to
245 .Ar cpu-spec .
246 Argument
247 .Ar cpu-spec
248 is a comma separated list of CPU numbers, or the literal
249 .Sq *
250 denoting all available CPUs.
251 The default is to allocate system mode PMCs on all available
252 CPUs.
253 .It Fl d
254 Toggle between process mode PMCs measuring events for the target
255 process' current and future children or only measuring events for
256 the target process.
257 The default is to measure events for the target process alone.
258 (it has to be passed in the command line prior to
259 .Fl p ,
260 .Fl s ,
261 .Fl P ,
262 or
263 .Fl S ) .
264 .It Fl e
265 Specify that the gprof profile files will use a wide history counter.
266 These files are produced in a format compatible with
267 .Xr gprof 1 .
268 However, other tools that cannot fully parse a BSD-style
269 gmon header might be unable to correctly parse these files.
270 .It Fl f Ar pluginopt
271 Pass option string to the active plugin.
272 .br
273 threshold=<float> do not display cost under specified value (Top).
274 .br
275 skiplink=0|1 replace node with cost under threshold by a dot (Top).
276 .It Fl g
277 Produce profiles in a format compatible with
278 .Xr gprof 1 .
279 A separate profile file is generated for each executable object
280 encountered.
281 Profile files are placed in sub-directories named by their PMC
282 event name.
283 .It Fl k Ar kerneldir
284 Set the pathname of the kernel directory to argument
285 .Ar kerneldir .
286 This directory specifies where
287 .Nm
288 should look for the kernel and its modules.
289 The default is to use the path of the running kernel obtained from the
290 .Va kern.bootfile
291 sysctl.
292 .It Fl l Ar secs
293 Set system-wide performance measurement duration for
294 .Ar secs
295 seconds.
296 The argument
297 .Ar secs
298 may be a fractional value.
299 .It Fl m Ar pathname
300 Print the sampled PCs with the name, the start and ending addresses
301 of the function within they live.
302 The
303 .Ar pathname
304 argument is mandatory and indicates where the information will be stored.
305 If argument
306 .Ar pathname
307 is a
308 .Dq Li -
309 this information is sent to the output file specified by the
310 .Fl o
311 option.
312 This option requires the
313 .Fl R
314 option to read in samples that were previously collected and
315 saved with the
316 .Fl O
317 option.
318 .It Fl n Ar rate
319 Set the default sampling rate for subsequent sampling mode
320 PMCs specified on the command line.
321 The default is to configure PMCs to sample the CPU's instruction
322 pointer every 65536 events.
323 .It Fl o Ar outputfile
324 Send counter readings and textual representations of logged data
325 to file
326 .Ar outputfile .
327 The default is to send output to
328 .Pa stderr
329 when collecting live data and to
330 .Pa stdout
331 when processing a pre-existing logfile.
332 .It Fl p Ar event-spec
333 Allocate a process mode counting PMC measuring hardware events
334 specified in
335 .Ar event-spec .
336 .It Fl q
337 Decrease verbosity.
338 .It Fl r Ar fsroot
339 Set the top of the filesystem hierarchy under which executables
340 are located to argument
341 .Ar fsroot .
342 The default is
343 .Pa / .
344 .It Fl s Ar event-spec
345 Allocate a system mode counting PMC measuring hardware events
346 specified in
347 .Ar event-spec .
348 .It Fl t Ar process-spec
349 Attach process mode PMCs to the processes named by argument
350 .Ar process-spec .
351 Argument
352 .Ar process-spec
353 may be a non-negative integer denoting a specific process id, or a
354 regular expression for selecting processes based on their command names.
355 .It Fl v
356 Increase verbosity.
357 .It Fl w Ar secs
358 Print the values of all counting mode PMCs or sampling mode PMCs
359 for top mode every
360 .Ar secs
361 seconds.
362 The argument
363 .Ar secs
364 may be a fractional value.
365 The default interval is 5 seconds.
366 .It Fl z Ar graphdepth
367 When printing system-wide callgraphs, limit callgraphs to the depth
368 specified by argument
369 .Ar graphdepth .
370 .El
371 .Pp
372 If
373 .Ar command
374 is specified, it is executed using
375 .Xr execvp 3 .
376 .Sh EXAMPLES
377 To perform system-wide statistical sampling on an AMD Athlon CPU with
378 samples taken every 32768 instruction retirals and data being sampled
379 to file
380 .Pa sample.stat ,
381 use:
382 .Dl "pmcstat -O sample.stat -n 32768 -S k7-retired-instructions"
383 .Pp
384 To execute
385 .Nm firefox
386 and measure the number of data cache misses suffered
387 by it and its children every 12 seconds on an AMD Athlon, use:
388 .Dl "pmcstat -d -w 12 -p k7-dc-misses firefox"
389 .Pp
390 To measure instructions retired for all processes named
391 .Dq emacs
392 use:
393 .Dl "pmcstat -t '^emacs$' -p instructions"
394 .Pp
395 To measure instructions retired for processes named
396 .Dq emacs
397 for a period of 10 seconds use:
398 .Dl "pmcstat -t '^emacs$' -p instructions sleep 10"
399 .Pp
400 To count instruction tlb-misses on CPUs 0 and 2 on a Intel
401 Pentium Pro/Pentium III SMP system use:
402 .Dl "pmcstat -c 0,2 -s p6-itlb-miss"
403 .Pp
404 To collect profiling information for a specific process with pid 1234
405 based on instruction cache misses seen by it use:
406 .Dl "pmcstat -P ic-misses -t 1234 -O /tmp/sample.out"
407 .Pp
408 To perform system-wide sampling on all configured processors
409 based on processor instructions retired use:
410 .Dl "pmcstat -S instructions -O /tmp/sample.out"
411 If callgraph capture is not desired use:
412 .Dl "pmcstat -N -S instructions -O /tmp/sample.out"
413 .Pp
414 To send the generated event log to a remote machine use:
415 .Dl "pmcstat -S instructions -O remotehost:port"
416 On the remote machine, the sample log can be collected using
417 .Xr nc 1 :
418 .Dl "nc -l remotehost port > /tmp/sample.out"
419 .Pp
420 To generate
421 .Xr gprof 1
422 compatible profiles from a sample file use:
423 .Dl "pmcstat -R /tmp/sample.out -g"
424 .Pp
425 To print a system-wide profile with callgraphs to file
426 .Pa "foo.graph"
427 use:
428 .Dl "pmcstat -R /tmp/sample.out -G foo.graph"
429 .Sh DIAGNOSTICS
430 If option
431 .Fl v
432 is specified,
433 .Nm
434 may issue the following diagnostic messages:
435 .Bl -diag
436 .It "#callchain/dubious-frames"
437 The number of callchain records that had an
438 .Dq impossible
439 value for a return address.
440 .It "#exec handling errors"
441 The number of
442 .Xr exec 2
443 events in the log file that named executables that could not be
444 analyzed.
445 .It "#exec/elf"
446 The number of
447 .Xr exec 2
448 events that named ELF executables.
449 .It "#exec/unknown"
450 The number of
451 .Xr exec 2
452 events that named executables with unrecognized formats.
453 .It "#samples/total"
454 The total number of samples in the log file.
455 .It "#samples/unclaimed"
456 The number of samples that could not be correlated to a known
457 executable object (i.e., to an executable, shared library, the
458 kernel or the runtime loader).
459 .It "#samples/unknown-object"
460 The number of samples that were associated with an executable
461 with an unrecognized object format.
462 .El
463 .Pp
464 .Ex -std
465 .Sh COMPATIBILITY
466 Due to the limitations of the
467 .Pa gmon.out
468 file format,
469 .Xr gprof 1
470 compatible profiles generated by the
471 .Fl g
472 option do not contain information about calls that cross executable
473 boundaries.
474 The generated
475 .Pa gmon.out
476 files are also only meaningful for native executables.
477 .Sh SEE ALSO
478 .Xr gprof 1 ,
479 .Xr nc 1 ,
480 .Xr execvp 3 ,
481 .Xr pmc 3 ,
482 .Xr pmclog 3 ,
483 .Xr hwpmc 4 ,
484 .Xr pmccontrol 8 ,
485 .Xr sysctl 8
486 .Sh HISTORY
487 The
488 .Nm
489 utility first appeared in
490 .Fx 6.0 .
491 It is
492 .Ud
493 .Sh AUTHORS
494 .An Joseph Koshy Aq jkoshy@FreeBSD.org
495 .Sh BUGS
496 The
497 .Nm
498 utility cannot yet analyse
499 .Xr hwpmc 4
500 logs generated by non-native architectures.