Commit Graph

42 Commits

Author SHA1 Message Date
jkoshy
dbc2a99f2f Close the read side of the pipe to self when exiting. 2008-12-23 12:08:06 +00:00
attilio
eff98a06a3 Add the -m option to pmcstat.
This option prints the list of sampled PCs along with the function name,
the start and end addresses of this where their live within.

Reviewed by:	jkoshy
Tested by:	gnn
Sponsored by:	Nokia
2008-11-25 23:24:29 +00:00
jkoshy
9a63cf3a86 As a matter of good programming style, stop PMCs before releasing
them.
2008-11-19 02:22:34 +00:00
jkoshy
de3502c946 - Avoid a spurious error when a command line is specified without
any process scope PMCs.
- Change the -c '*' option to denote non-halted CPUs.
2008-10-07 17:28:52 +00:00
jkoshy
99d8d99aa0 Bring the usage message in sync with the manual page. 2008-09-19 14:51:41 +00:00
jkoshy
7b7904fe0c Add an example illustrating the use sleep(1) for performing timed
measurements.
2008-09-19 13:17:22 +00:00
jkoshy
ef261a0536 Fix a regression: attach process PMCs to the process created when
a command line is specified.
2008-07-01 15:20:15 +00:00
jkoshy
0eb008c767 Document messages printed in verbose mode.
Requested by:	Fabien Thomas <fabien.thomas at netasq dot com>
2008-06-29 10:30:06 +00:00
jkoshy
a232f0b6df Fix 'make checkdpadd'. 2008-02-22 06:25:49 +00:00
jkim
951f756a2b Fix non-SMP kernel regression introduced in the previous commit.
Reviewed by:	jkoshy
2008-01-10 16:31:14 +00:00
jkoshy
2aef7957ec Introduce pmcstat(8) changes for summarizing hwpmc(4) callchain records in
in textual form and in gmon.out format.

Update manual page.

Sponsored by:	FreeBSD Foundation and Google Inc.
2007-12-07 08:26:21 +00:00
jkoshy
4244e63960 When printing the contents of a HWPMC log in human readable form:
- Print a warning if the version number recorded in the log is not what the
  tool expects.
- Print a tidier error message when an unrecognized event is encountered
  in the log.
- Don't print a spurious 'Unknown error: 0' when exiting after a parse
  error.
2007-12-03 10:29:49 +00:00
ru
0de18b1b0a Fixed "make checkdpadd" (missing library dependencies).
Approved by:	re (kensmith)
2007-10-01 18:15:11 +00:00
jkoshy
0dfc773563 MFP4: Enhancements to pmcstat(8):
- Allow the "-t" option to take a regular expression naming command
  line processes to attach process PMCs to.

- Update the manual page and add an example showing the use of the
  new functionality.

- Update the (c) year on the affected source files.
2007-04-27 12:09:31 +00:00
jkoshy
bf9c7e516d MFP4: Enhancements and bug-fixes to pmcstat(8):
- The '-c' option now takes a comma-separated list of CPU
   numbers, or a literal '*' denoting all CPUs in the system.
   Subsequent system PMCs are allocated on the CPUs so specified.

   Change the default behaviour to allocate system PMCs on all CPUs,
   not just CPU 0.

   Update the manual page and add an example of how to use the new
   functionality.

 - Attach PMCs to a (commandline) child process more reliably.  This
   fixes a long standing bug in counting events incurred by short-lived
   processes.
2007-04-22 15:00:39 +00:00
jkoshy
4c79721dd4 Correct a sanity check. 2007-04-21 12:04:03 +00:00
ru
081fcce9b9 Markup fixes. 2006-09-29 17:57:04 +00:00
ru
822ecb389f Line up usage output. 2006-09-29 17:28:01 +00:00
jkoshy
435490fd44 When printing a map, print the number of samples recorded by each gmon.out file.
MFC after:	1 week
2006-04-05 15:12:25 +00:00
jkoshy
80251d4f05 - Teach pmcstat(8) to log over the network; the -O option now
takes a host:port specification.
- Update the manual page and add an example showing how log
  over the network using pmcstat(8) and nc(1).  Document the
  current inability to process logs in cross-platform manner.
- Have pmcstat_open_log() call err(3) directly in case
  of an error; this simplifies error handling in its caller.

MFC after:	1 week
2006-04-02 12:52:16 +00:00
jkoshy
48e5e4792d MFP4: Support for profiling dynamically loaded objects.
Kernel changes:

  Inform hwpmc of executable objects brought into the system by
  kldload() and mmap(), and of their removal by kldunload() and
  munmap().  A helper function linker_hwpmc_list_objects() has been
  added to "sys/kern/kern_linker.c" and is used by hwpmc to retrieve
  the list of currently loaded kernel modules.

  The unused `MAPPINGCHANGE' event has been deprecated in favour
  of separate `MAP_IN' and `MAP_OUT' events; this change reduces
  space wastage in the log.

  Bump the hwpmc's ABI version to "2.0.00".  Teach hwpmc(4) to
  handle the map change callbacks.

  Change the default per-cpu sample buffer size to hold
  32 samples (up from 16).

  Increment __FreeBSD_version.

libpmc(3) changes:

  Update libpmc(3) to deal with the new events in the log file; bring
  the pmclog(3) manual page in sync with the code.

pmcstat(8) changes:

  Introduce new options to pmcstat(8): "-r" (root fs path), "-M"
  (mapfile name), "-q"/"-v" (verbosity control).  Option "-k" now
  takes a kernel directory as its argument but will also work with
  the older invocation syntax.

  Rework string handling in pmcstat(8) to use an opaque type for
  interned strings.  Clean up ELF parsing code and add support for
  tracking dynamic object mappings reported by a v2.0.00 hwpmc(4).

  Report statistics at the end of a log conversion run depending
  on the requested verbosity level.

Reviewed by:	jhb, dds (kernel parts of an earlier patch)
Tested by:	gallatin (earlier patch)
2006-03-26 12:20:54 +00:00
jkoshy
30ec812b47 When generating profiles (-g) warn about shared objects that were
not found.
2005-12-25 05:11:29 +00:00
jkoshy
d308f9605c - Don't print an errno string when reporting dropped samples.
- Prevent an unsuccessful exec() of a target program from triggering
  a false 'dropped samples' message.
2005-12-24 17:00:33 +00:00
jkoshy
f2b9dccde5 Warn the user if the kernel driver dropped samples or ran out of event buffers
during a data collection run.
2005-10-21 18:59:59 +00:00
jkoshy
1c6388f59d Handle 32 bit executables better on AMD64 platforms. 2005-10-18 05:13:27 +00:00
jkoshy
94200415ae Document pmcstat's inability to handle 32 bit executables on the
AMD64 while I work on a fix.

Noticed by:	ps
2005-10-18 04:40:11 +00:00
jkoshy
e4de2de432 Determine where the runtime loader got mapped to when a dynamically
linked process was exec()'ed, and map samples in that address range
into the appropriate buckets in the runtime loader's profile.
Improve a few comments.

MFC after:	3 days
2005-09-14 21:15:50 +00:00
jkoshy
14b399b103 Fix a bug that caused generated gmon.out profiles to be out of
whack.  Use saturating arithmetic when incrementing a bucket.
Improve a few comments.

MFC after:	3 days
2005-09-13 02:23:25 +00:00
jkoshy
37ed081c35 Improve an error message.
MFC after:	3 days
2005-09-05 18:31:09 +00:00
jkoshy
0796704e4d Correctly print system-wide PMC counts for short-lived command lines.
Reported by:	cracauer
MFC after:	3 days
2005-08-04 03:12:55 +00:00
jkoshy
676e8250ed Sync usage message with the code and manual page.
Submitted by:	maxim
2005-07-23 13:49:04 +00:00
rwatson
1cfa2c3d67 Fix spelling error in sample command.
MFC after:	3 days
2005-07-13 13:18:17 +00:00
jkoshy
93ae007c34 Fix a bug that affected on-the-fly gmon.out file generation.
Approved by:	re (scottl)
2005-07-09 17:08:46 +00:00
jkoshy
e90ce451ce Add examples illustrating how to record system-wide profiles and
how to convert these to gprof(1) flat profiles.  Augment description
for the '-g' option.

Remove superfluous quotes around a macro argument, bump document date [1].

Reminded by:	ru [1]
Approved by:	re (blanket hwpmc)
2005-07-01 03:50:30 +00:00
jkoshy
9d5179d4ba Unbreak tinderbox builds. Remove a debug printf.
Approved by:	re (blanket hwpmc)
2005-07-01 03:45:01 +00:00
jkoshy
3cade8d074 MFP4:
- pmcstat(8) gprof output mode fixes:

  lib/libpmc/pmclog.{c,h}, sys/sys/pmclog.h:
  + Add a 'is_usermode' field to the PMCLOG_PCSAMPLE event
  + Add an 'entryaddr' field to the PMCLOG_PROCEXEC event,
    so that pmcstat(8) can determine where the runtime loader
    /libexec/ld-elf.so.1 is getting loaded.

  sys/kern/kern_exec.c:
  + Use a local struct to group the entry address of the image being
    exec()'ed and the process credential changed flag to the exec
    handling hook inside hwpmc(4).

  usr.sbin/pmcstat/*:
  + Support "-k kernelpath", "-D sampledir".
  + Implement the ELF bits of 'gmon.out' profile generation in a new
    file "pmcstat_log.c".  Move all log related functions to this
    file.
  + Move local definitions and prototypes to "pmcstat.h"

- Other bug fixes:
  + lib/libpmc/pmclog.c: correctly handle EOF in pmclog_read().
  + sys/dev/hwpmc_mod.c: unconditionally log a PROCEXIT event to all
    attached PMCs when a process exits.
  + sys/sys/pmc.h: correct a function prototype.
  + Improve usage checks in pmcstat(8).

Approved by:	re (blanket hwpmc)
2005-06-30 19:01:26 +00:00
jkoshy
dacb5026fc - Tidy markup. [1]
- Remove mention of an unimplemented option.
- Clarify the behavior of pmcstat when logging PMCs are
  requested, but no log output file is specified.
- Add a cross-reference to pmclog(3).
- Bump document date.

Reviewed by:	ru
Submitted by:	ru [1]
Approved by:	re (blanket hwpmc)
2005-06-24 17:24:55 +00:00
jkoshy
1d3209ab83 MFP4:
- Implement sampling modes and logging support in hwpmc(4).

- Separate MI and MD parts of hwpmc(4) and allow sharing of
  PMC implementations across different architectures.
  Add support for P4 (EMT64) style PMCs to the amd64 code.

- New pmcstat(8) options: -E (exit time counts) -W (counts
  every context switch), -R (print log file).

- pmc(3) API changes, improve our ability to keep ABI compatibility
  in the future.  Add more 'alias' names for commonly used events.

- bug fixes & documentation.
2005-06-09 19:45:09 +00:00
jkoshy
b46dbd665e Neaten usage message. 2005-05-02 10:07:11 +00:00
jkoshy
a21392e3ac Add convenience APIs pmc_width() and pmc_capabilities() to -lpmc.
Have pmcstat(8) and pmccontrol(8) use these APIs.

Return PMC class-related constants (PMC widths and capabilities)
with the OP GETCPUINFO call leaving OP PMCINFO to return only the
dynamic information associated with a PMC (i.e., whether enabled,
owner pid, reload count etc.).

Allow pmc_read() (i.e., OPS PMCRW) on active self-attached PMCs to
get upto-date values from hardware since we can guarantee that the
hardware is running the correct PMC at the time of the call.

Bug fixes:
 - (x86 class processors) Fix a bug that prevented an RDPMC
   instruction from being recognized as permitted till after the
   attached process had context switched out and back in again after
   a pmc_start() call.

   Tighten the rules for using RDPMC class instructions: a GETMSR
   OP is now allowed only after an OP ATTACH has been done by the
   PMC's owner to itself.  OP GETMSR is not allowed for PMCs that
   track descendants, for PMCs attached to processes other than
   their owner processes.

 - (P4/HTT processors only) Fix a bug that caused the MI and MD
   layers to get out of sync.  Add a new MD operation 'get_config()'
   as part of this fix.

 - Allow multiple system-mode PMCs at the same row-index but on
   different CPUs to be allocated.

 - Reject allocation of an administratively disabled PMC.

Misc. code cleanups and refactoring.  Improve a few comments.
2005-05-01 14:11:49 +00:00
jkoshy
6c9d475a3b Remove superfluous CFLAGS additions. Make 'make checkdpadd' work.
Use '?=' for the WARNS line.

Submitted by:	ru
2005-04-19 14:40:50 +00:00
jkoshy
dc3444cd91 Bring a working snapshot of hwpmc(4), its associated libraries, userland utilities
and documentation into -CURRENT.

Bump FreeBSD_version.

Reviewed by:	alc, jhb (kernel changes)
2005-04-19 04:01:25 +00:00