Provided by: freebsd-manpages_12.2-1_all bug

NAME

       perfmon — CPU performance-monitoring interface

SYNOPSIS

       cpu I586_CPU
       cpu I686_CPU
       options PERFMON

DESCRIPTION

       The  perfmon  driver  provides  access  to  the internal performance-monitoring capabilities of the Intel
       Pentium and Pentium Pro CPUs.  These processors implement two internal counters which can  be  configured
       to  measure  a variety of events for either count or duration (in CPU cycles), as well as a cycle counter
       which counts clock cycles.  The perfmon driver provides a device-style interface to these capabilities.

       All access  to  the  performance-monitoring  counters  is  performed  through  the  special  device  file
       “/dev/perfmon”.  This device supports a number of ioctl(2) requests, defined in <machine/perfmon.h> along
       with the definitions of the various counters for both Pentium and Pentium Pro processors.

       NOTA  BENE: The set of available events differs from processor to processor.  It is the responsibility of
       the programmer to ensure that the event numbers used  are  the  correct  ones  for  the  CPU  type  being
       measured.

       The following ioctl(2) requests are defined:

       PMIOSETUP   (struct  pmc)  Set  up  a  counter  with  parameters and flags defined in the structure.  The
                   following fields are defined in struct pmc:

                   int pmc_num        the number of the counter in question; must be less than  NPMC  (currently
                                      2).

                   u_char pmc_event   the   particular   event   number   to   be   monitored,   as  defined  in
                                      <machine/perfmon.h>.

                   u_char pmc_unit    the  unit  mask  value,  specific  to  the  event  type  (see  the   Intel
                                      documentation).

                   u_char pmc_flags   flags modifying the operation of the counter (see below).

                   u_char pmc_mask    the  counter mask value; essentially, this is a threshold used to restrict
                                      the count to events lasting more (or less) than the  specified  number  of
                                      clocks.

                   The following pmc_flags values are defined:
                   PMCF_USR    count events in user mode
                   PMCF_OS     count events in kernel mode
                   PMCF_E      count number of events rather than their duration
                   PMCF_INV    invert the sense of the counter mask comparison

       PMIOGET     (struct pmc) returns the current configuration of the specified counter.

       PMIOSTART

       PMIOSTOP    (int)  starts  (stops) the specified counter.  Due to hardware deficiencies, counters must be
                   started and stopped in numerical order.  (That is to say, counter  0  can  never  be  stopped
                   without  first  stopping  counter 1.)  The driver will not enforce this restriction (since it
                   may not be present in future CPUs).

       PMIORESET   (int) reset the specified counter to zero.  The  counter  should  be  stopped  with  PMIOSTOP
                   before it is reset.  All counters are automatically reset by PMIOSETUP.

       PMIOREAD    (struct  pmc_data)  get the current value of the counter.  The pmc_data structure defines two
                   fields:

                   int pmcd_num       the number of the counter to read
                   quad_t pmcd_value  the resulting value as a 64-bit signed integer

                   In the future, it may be possible to use the RDPMC instruction on Pentium Pro  processors  to
                   read the counters directly.

       PMIOTSTAMP  (struct  pmc_tstamp)  read  the  time  stamp  counter.   The pmc_tstamp structure defines two
                   fields:

                   int pmct_rate      the approximate rate of the counter, in MHz
                   quad_t pmct_value  the current value of the counter as a 64-bit integer

                   It is important to note that the counter rate, as provided in the pmct_rate field,  is  often
                   incorrect  because  of  calibration  difficulties  and  non-integral clock rates.  This field
                   should be considered more of a hint or sanity-check than an actual representation of the rate
                   of clock ticks.

FILES

       /dev/perfmon                    character device interface to counters
       /usr/include/machine/perfmon.h  include file with definitions of structures and event types
       /usr/share/examples/perfmon     sample source code demonstrating use of all the ioctl() commands

SEE ALSO

       ioctl(2), hwpmc(4)

       Intel Corporation, Pentium Pro Family Developer's Manual, vol. 3, January 1996, Operating System Writer's
       Manual.

HISTORY

       The perfmon device first appeared in FreeBSD 2.2.

AUTHORS

       The perfmon driver was written by Garrett A. Wollman, MIT Laboratory for Computer Science.

Debian                                           March 26, 1996                                       PERFMON(4)