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