Commit Graph

149 Commits

Author SHA1 Message Date
gnn
acf511e4d0 Add support for hwpmc(4) on the MIPS 24K, 32 bit, embedded processor.
Add macros for properly accessing coprocessor 0 registers that
support performance counters.

Reviewed by:	jkoshy rpaulo fabien imp
MFC after:	1 month
2010-03-03 15:05:58 +00:00
jkoshy
63fd65d19b Bug fix: add a missing initializer.
Submitted by:	Luca Pizzamiglio <luca.pizzamiglio at gmail dot com>
PR:		i386/142742
2010-01-12 17:03:55 +00:00
ed
09818ac28e Build lib/ with WARNS=6 by default.
Similar to libexec/, do the same with lib/. Make WARNS=6 the norm and
lower it when needed.

I'm setting WARNS?=0 for secure/. It seems secure/ includes the
Makefile.inc provided by lib/. I'm not going to touch that directory.
Most of the code there is contributed anyway.
2010-01-02 09:58:07 +00:00
rpaulo
f7db53a9d1 Intel XScale hwpmc(4) support.
This brings hwpmc(4) support for 2nd and 3rd generation XScale cores.
Right now it's enabled by default to make sure we test this a bit.
When the time comes it can be disabled by default.
Tested on Gateworks boards.

A man page is coming.

Obtained from:	//depot/user/rpaulo/xscalepmc/...
2009-12-23 23:16:54 +00:00
brueffer
8169c493e6 Use our canonical .Dd format.
Submitted by:	Ulrich Spoerlein
2009-11-02 12:35:38 +00:00
jkoshy
befdc81d08 Not all Intel Core (TM) CPUs implement PMC_CLASS_IAF fixed-function
counters.  For such CPUs, use an alternate mapping of convenience
names to events supported by PMC_CLASS_IAP programmable counters.

Testing and review by:	fabient
2009-10-24 04:11:40 +00:00
rpaulo
170760d585 Install x86 related man pages on x86 systems only.
Reviewed by:	jkoshy
2009-10-04 10:54:20 +00:00
jkoshy
b850005c1c Use a more appropriate choice of words.
Submitted by:	danfe
2009-08-23 14:48:25 +00:00
jkoshy
b263d131b2 Use US spellings, fix typos. 2009-08-23 07:32:30 +00:00
jkoshy
eb6a5c1733 Fix typos. 2009-08-23 07:31:10 +00:00
jkoshy
d3e130a4c7 Fix a typo. 2009-08-23 07:30:12 +00:00
jkoshy
135eb3ab81 Fix typos, use American English spellings. 2009-08-23 07:29:34 +00:00
jkoshy
6a7894281b Fix typos. 2009-08-23 07:24:39 +00:00
jkoshy
b8fd9e98f2 Correct typos. 2009-08-23 06:22:31 +00:00
jkoshy
4c7b29c040 Correct grammar. 2009-08-23 06:19:02 +00:00
jkoshy
f3a903223d Fix a typo.
Reported by:	John McCullough <jmccullo at cs.ucsd.edu>
2009-08-23 05:49:12 +00:00
jkoshy
0f9db0f849 Fix typos.
Reported by:	Harald Servat <redcrash at gmail dot com>
2009-08-23 05:47:33 +00:00
jkoshy
be8827c9ef Document the fact that some Core2 family CPUs lack fixed-function counters. 2009-06-09 06:36:29 +00:00
jkoshy
39e03aaa26 Fix parsing of Core2 event qualifiers.
Submitted by:	Nikola K <laladelausanne at gmail dot com>
2009-06-09 06:34:48 +00:00
fabient
71ae7c9315 Allow compile from c++ for libpmc
Approved by:	jkoshy (mentor)
MFC after:	3 days
2009-03-24 22:35:05 +00:00
jeff
ca96799f52 - Add support for nehalem/corei7 cpus. This supports all of the core
counters defined in the reference manual.  It does not support the
   'uncore' events.

Reviewed by:	jkoshy
Sponsored by:	Nokia
2009-01-27 07:29:37 +00:00
jkoshy
672c135fef Document processor errata that affect performance measurement. 2008-12-08 12:28:48 +00:00
jkoshy
dbaaeca1e6 Fixes for Core2 Extreme support.
Submitted by:	 "Artem Belevich" <artemb at gmail dot com>
2008-12-03 17:30:36 +00:00
jkoshy
e10155204b Update description of an event.
Submitted by:	"Verplanke, Edwin" <edwin dot verplanke at intel dot com>
2008-11-27 09:21:37 +00:00
jkoshy
aa86a7c59e - Add support for PMCs in Intel CPUs of Family 6, model 0xE (Core Solo
and Core Duo), models 0xF (Core2), model 0x17 (Core2Extreme) and
  model 0x1C (Atom).

  In these CPUs, the actual numbers, kinds and widths of PMCs present
  need to queried at run time.  Support for specific "architectural"
  events also needs to be queried at run time.

  Model 0xE CPUs support programmable PMCs, subsequent CPUs
  additionally support "fixed-function" counters.

- Use event names that are close to vendor documentation, taking in
  account that:
  - events with identical semantics on two or more CPUs in this family
    can have differing names in vendor documentation,
  - identical vendor event names may map to differing events across
    CPUs,
  - each type of CPU supports a different subset of measurable
    events.

  Fixed-function and programmable counters both use the same vendor
  names for events.  The use of a class name prefix ("iaf-" or
  "iap-" respectively) permits these to be distinguished.

- In libpmc, refactor pmc_name_of_event() into a public interface
  and an internal helper function, for use by log handling code.

- Minor code tweaks: staticize a global, freshen a few comments.

Tested by:	gnn
2008-11-27 09:00:47 +00:00
jkoshy
e796814dfa Fix buglets. 2008-11-26 03:48:20 +00:00
jkoshy
87f4b6d485 Correction: these PMCs do not support a "umask" modifier. 2008-11-24 08:14:01 +00:00
jkoshy
57f8aca209 - Document the rules used to determine when spellings of events
are equivalent.
- Reorder text to make the manual page more coherent.
2008-11-24 08:11:33 +00:00
jkoshy
b73772de68 - Document the class name prefix for these PMCs.
- Document the "anythread" qualifier, available on Atom CPUs.
- Add examples.
2008-11-15 11:34:30 +00:00
jkoshy
e5806365f9 Tweak -mdoc usage. 2008-11-13 16:32:20 +00:00
jkoshy
a302d8e554 Document UMASK values, fix errors. 2008-11-13 10:40:13 +00:00
jkoshy
2777185951 Fix typos, document UMASK values. 2008-11-13 10:21:56 +00:00
jkoshy
161af4372a Remove duplicates, fix errors and document UMASK values. 2008-11-13 09:53:53 +00:00
jkoshy
4f8c998b6a Document the alternate event names supported for "architectural" PMC events. 2008-11-12 17:43:37 +00:00
jkoshy
10ed8c3117 Use spellings that are close to vendor documentation. 2008-11-12 17:38:23 +00:00
jkoshy
62245b8648 - Sparsely number enumerations 'pmc_cputype' and 'pmc_event' in order to
reduce ABI disruptions when new cpu types and new PMC events are added
  in the future.
- Support alternate spellings for PMC events.  Derive the canonical
  spelling of an event name from its enumeration name in 'enum pmc_event'.
- Provide a way for users to disambiguate between identically named events
  supported by multiple classes of PMCs in a CPU.
- Change libpmc's machine-dependent event specifier parsing code to
  better support CPUs containing two or more classes of PMC resources.
2008-10-09 14:55:45 +00:00
jkoshy
b964421dc9 Correct a typo. 2008-10-06 10:34:44 +00:00
jkoshy
aa0d582606 - Add cross-references.
- Tweak -mdoc use.
2008-10-04 12:54:25 +00:00
jkoshy
61dadf8c5e Add cross-references. 2008-10-04 12:53:08 +00:00
jkoshy
8382297f14 Cross-reference new manual pages. 2008-10-04 12:44:05 +00:00
jkoshy
8bf9e82033 - Cross-reference new manual pages.
- Spell new PMC class names correctly.
2008-10-04 12:35:02 +00:00
jkoshy
d53aeb488c Add manual pages for performance measurement counters present in
Intel Atom(tm), Core(tm) and Core2(tm) CPUs.
2008-10-04 12:27:49 +00:00
jkoshy
e753484473 - Document event numbers associated with event names.
- Document an event that was missed out earlier.
- Sort event names alphabetically.
2008-10-02 08:53:06 +00:00
jkoshy
e775ff8588 - Document event numbers.
- Sort event names.
2008-10-02 06:37:33 +00:00
jkoshy
4ab86caef8 -mdoc tweaks. 2008-10-02 06:21:07 +00:00
jkoshy
ea821fb99b - Document event numbers.
- Correct misspellings of two event names.
2008-10-02 06:15:40 +00:00
jkoshy
7db8ef2245 Document event numbers alongside event names.
Requested by:		Arun Sharma <arun at sharma-home dot net>
2008-10-02 04:46:00 +00:00
jkoshy
0d9d822db0 Document changes in behaviour due to sparse CPU numbering support. 2008-09-22 14:31:24 +00:00
jkoshy
2fad7e6a9b Keep symbols in sorted order. 2008-09-19 13:21:23 +00:00
jkoshy
27963af43f Improve grammar. 2008-09-18 10:20:35 +00:00
jkoshy
2eb96d23a7 Document new PMC classes, capabilities and CPU kinds.
Improve typography.
2008-09-18 10:16:54 +00:00
jkoshy
8dda766e41 Whitespace fixes. 2008-09-17 04:13:14 +00:00
jkoshy
5dfb9467b3 Add event name aliases for Pentium PMCs. 2008-09-17 03:53:37 +00:00
jkoshy
1895a00fef Replace PMC-dependent content with references to
the appropriate manual pages.
2008-09-16 16:58:24 +00:00
jkoshy
8d1b22f6ed Build and install PMC-dependent manual pages. 2008-09-16 16:57:14 +00:00
jkoshy
deffb81337 Fix a typo. 2008-09-16 16:53:25 +00:00
jkoshy
9ec48f3bd4 Move PMC documentation to separate manual pages, one per PMC class. 2008-09-16 16:34:55 +00:00
jkoshy
253d17b642 Move TSC specific PMC information to its own manual page. 2008-09-16 16:29:41 +00:00
jkoshy
f145085b0d Correct an event name alias: event "k7-dc-misses" does not support
a unitmask.
2008-09-16 14:13:03 +00:00
jkoshy
d51a5310b2 - Document Pentium and Pentium MMX events.
- Update (c) years and the manual page's date.
2008-03-14 06:22:03 +00:00
jkoshy
9efc2e038a Bring the behaviour of pmc_capabilities() and pmc_width() in line with
documentation: set 'errno' and return -1 in case of an error.

Update (c) years.
2008-03-12 15:51:32 +00:00
jkoshy
dc87dccab6 Describe return values from pmc_ncpu() and pmc_npmc() better. 2008-03-12 15:48:59 +00:00
jkoshy
234cf2fb65 Correct a typo. 2008-02-03 06:04:38 +00:00
jkoshy
93ff0fa40d Improve style(9) compliance and trim a long text line. 2007-12-07 13:52:51 +00:00
jkoshy
86277bac23 Add callchain parsing to -lpmc.
Sponsored by:	FreeBSD Foundation and Google Inc.
2007-12-03 11:15:46 +00:00
jkoshy
ca4d74c30f Replace a spurious cross-reference to hwpmc(4) with correct text. 2007-12-03 10:59:23 +00:00
jkoshy
3cb99b8147 - Add an overview of the pmc(3) API.
- Defer detailed descriptions of individual functions in the API to
  function-specific manual pages.
2007-11-25 06:50:31 +00:00
jkoshy
9b5ab01a49 Move the following functions into their own manual pages:
- pmc_attach(), pmc_detach().
- pmc_capabilities(), pmc_cpuinfo(), pmc_ncpu(), pmc_npmc(), pmc_pmcinfo(),
  pmc_width().
- pmc_get_driver_stats().
- pmc_get_msr().
- pmc_read(), pmc_rw(), pmc_write().
- pmc_set().
- pmc_start(), pmc_stop().
2007-11-25 06:38:55 +00:00
jkoshy
8f8a9c4e05 - Describe function pmc_init() in its own manual page.
- Describe functions pmc_configure_logfile(), pmc_flush_logfile() and
  pmc_writelog() in their own manual page.
2007-11-25 03:18:42 +00:00
jkoshy
c4a638e4ab Describe convenience functions `pmc_name_of_{capability,class,cputype,
disposition,event,mode,state}' in their own manual page.
2007-11-24 11:05:36 +00:00
jkoshy
c4ceee25be Describe pmc_event_names_of_class() in its own manual page. 2007-11-23 12:30:55 +00:00
jkoshy
e7b2628f79 Describe pmc_enable() and pmc_disable() in their own manual page. 2007-11-23 12:21:34 +00:00
jkoshy
472c720673 Describe pmc_allocate() and pmc_release() in their own manual page. 2007-11-23 11:46:08 +00:00
jkoshy
aa1b17d557 Fix a bug in the description of the "p6-div" event. [1]
Update the description of the "p6-div" and "p6-mul" events according
to the "Intel(r) 64 and IA-32 Architectures Software Developers
Manual Volume 3B: System Programming Guide, Part 2, November 2006".

Reported by: 	Harald Servat <redcrash at gmail dot com> [1]
2007-04-12 09:16:54 +00:00
jkoshy
9b08351962 Correct a typo in an event name alias.
Reported by: 	Harald Servat <redcrash at gmail dot com>
2007-04-11 04:52:09 +00:00
jkoshy
1fe075e853 Clarify memory management rules for pmc_cpuinfo().
Suggested by:	"Harald Servat" <redcrash at gmail dot com>
2007-03-26 17:33:41 +00:00
ru
f4eec08060 Markup fixes. 2006-09-17 21:27:35 +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
9621023f82 Update the pmc(3) manual page's date string and freshen the year in the (c) line for
pmc.3 and libpmc.c.
2006-03-20 15:28:59 +00:00
jkoshy
62ed249b1e Add an alias 'unhalted-cycles' denoting cycles where the CPU is
not in a halt or sleep state.
2006-02-25 05:34:00 +00:00
ru
46b5b6bcde Fix prototypes. 2005-11-24 10:54:47 +00:00
ru
928d297eeb -mdoc sweep. 2005-11-17 13:00:00 +00:00
jkoshy
d27c2fdc74 Add COMPATIBILITY and HISTORY sections.
MFC after:	3 days
2005-07-21 06:44:54 +00:00
jkoshy
fe7e4c58e1 Catch with the source code. Sort a list alphabetically. Add a
HISTORY section.

MFC after:	3 days
2005-07-21 06:42:30 +00:00
brueffer
2a75eb6afb - Remove MLINKS to nonexistant manpages
- Change some section numbers to match reality
- For MLINKS to manpages from ports, mention which port installs them

MFC after:	3 days
2005-07-14 20:29:08 +00:00
jkoshy
51f3adcc08 Fix a bug in pmclog_read() that causes it to return with a false
error when a log record crosses an internal buffer boundary.

Approved by:	re (scottl)
2005-07-09 17:12:30 +00:00
jkoshy
f670acbc9d - Update the CPU version check to recognize P4/EMT64 CPUs. [1]
- Allow libpmc(3) to support P4/EMT64 PMCs on the amd64 architecture
  and AMD K8 PMCs on the i386. [2]

Submitted by:	ps [1]
Pointy hat:	myself [2]
Approved by:	re (scottl)
2005-07-03 16:33:22 +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
ru
4b7084e854 - Tidy up the markup.
- Clarify the sections on "Cascading P4 PMCs" and
  "Precise Event Based Sampling" (1)
- Bump document date.

Reviewed by:	jkoshy
Submitted by:	jkoshy (1)
Approved by:	re (blanket)
2005-06-24 16:56:24 +00:00
ru
b89cd9bc4d Tidy up the markup.
Reviewed by:	jkoshy
Approved by:	re (blanket)
2005-06-24 16:13:36 +00:00
jkoshy
7e72895a65 Fix tinderbox breakage. 2005-06-10 03:45:04 +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
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
f4f92f05d5 Note events affected by processor errata. 2005-04-23 05:45:18 +00:00
jkoshy
f721107265 Add event aliases for P6 and K8 PMCs. 2005-04-21 05:50:25 +00:00
marcel
24142cab5d o Do not include <machine/pmc_mdep.h>. It's automaticly included for
us when <sys/pmc.h> is included.
o  Replace "#if __i386__" and "#if __amd64__" with the equivalent of
   "#ifdef __i386__" and "#ifdef __amd64__" (resp.) These tokens are
   not defined on all platforms.
o  Conditionally compile pmc_parse_mask() on i386 and amd64 only. It's
   only referenced there. This will change when support for other
   platforms is added, of course.

Ok'd by: jkoshy@
2005-04-20 20:48:24 +00:00
jkoshy
19ca551dc4 Remove extra Id keyword. 2005-04-20 05:36:43 +00:00
jkoshy
0e598d84b7 Remove superfluous CFLAGS lines. Use the conditional '?=' construct
for WARNS lines.

Submitted by:	ru
2005-04-19 14:43:59 +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