Commit Graph

42 Commits

Author SHA1 Message Date
Joseph Koshy
8cfb4353c2 Close the read side of the pipe to self when exiting. 2008-12-23 12:08:06 +00:00
Attilio Rao
c0252222a2 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
Joseph Koshy
b8fbd97b35 As a matter of good programming style, stop PMCs before releasing
them.
2008-11-19 02:22:34 +00:00
Joseph Koshy
5477328d81 - 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
Joseph Koshy
67442c6e80 Bring the usage message in sync with the manual page. 2008-09-19 14:51:41 +00:00
Joseph Koshy
2c79db5107 Add an example illustrating the use sleep(1) for performing timed
measurements.
2008-09-19 13:17:22 +00:00
Joseph Koshy
165b10b07b Fix a regression: attach process PMCs to the process created when
a command line is specified.
2008-07-01 15:20:15 +00:00
Joseph Koshy
e572c7a748 Document messages printed in verbose mode.
Requested by:	Fabien Thomas <fabien.thomas at netasq dot com>
2008-06-29 10:30:06 +00:00
Joseph Koshy
3c7b2ed7f9 Fix 'make checkdpadd'. 2008-02-22 06:25:49 +00:00
Jung-uk Kim
bcba261a2c Fix non-SMP kernel regression introduced in the previous commit.
Reviewed by:	jkoshy
2008-01-10 16:31:14 +00:00
Joseph Koshy
b6010f9e61 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
Joseph Koshy
3ab065b6e3 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
Ruslan Ermilov
71ce49ae8d Fixed "make checkdpadd" (missing library dependencies).
Approved by:	re (kensmith)
2007-10-01 18:15:11 +00:00
Joseph Koshy
fbd8b34a06 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
Joseph Koshy
ee4910b119 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
Joseph Koshy
00a22dc5f9 Correct a sanity check. 2007-04-21 12:04:03 +00:00
Ruslan Ermilov
bc84aa4ba3 Markup fixes. 2006-09-29 17:57:04 +00:00
Ruslan Ermilov
24bffe0613 Line up usage output. 2006-09-29 17:28:01 +00:00
Joseph Koshy
2a6d2e9c2d 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
Joseph Koshy
302cbb9054 - 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
Joseph Koshy
49874f6ea3 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
Joseph Koshy
f3c8200ef5 When generating profiles (-g) warn about shared objects that were
not found.
2005-12-25 05:11:29 +00:00
Joseph Koshy
bea6aa93d0 - 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
Joseph Koshy
7fbf3da209 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
Joseph Koshy
887a8d04dc Handle 32 bit executables better on AMD64 platforms. 2005-10-18 05:13:27 +00:00
Joseph Koshy
9f8adcef84 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
Joseph Koshy
60f918ef43 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
Joseph Koshy
a566429af3 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
Joseph Koshy
4525db8c52 Improve an error message.
MFC after:	3 days
2005-09-05 18:31:09 +00:00
Joseph Koshy
38fc5f3489 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
Joseph Koshy
9133b63902 Sync usage message with the code and manual page.
Submitted by:	maxim
2005-07-23 13:49:04 +00:00
Robert Watson
000289660b Fix spelling error in sample command.
MFC after:	3 days
2005-07-13 13:18:17 +00:00
Joseph Koshy
dc1d9d2e7b Fix a bug that affected on-the-fly gmon.out file generation.
Approved by:	re (scottl)
2005-07-09 17:08:46 +00:00
Joseph Koshy
1fdbf2560e 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
Joseph Koshy
bf840f4a19 Unbreak tinderbox builds. Remove a debug printf.
Approved by:	re (blanket hwpmc)
2005-07-01 03:45:01 +00:00
Joseph Koshy
151392465f 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
Joseph Koshy
21ce09ca81 - 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
Joseph Koshy
f263522a45 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
Joseph Koshy
39f4e0fcd2 Neaten usage message. 2005-05-02 10:07:11 +00:00
Joseph Koshy
c5153e190b 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
Joseph Koshy
38bebdddd1 Remove superfluous CFLAGS additions. Make 'make checkdpadd' work.
Use '?=' for the WARNS line.

Submitted by:	ru
2005-04-19 14:40:50 +00:00
Joseph Koshy
ebccf1e3a6 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