UPERF(4)

NAME
uperf - performance counters driver

SYNOPSIS
uperf* at ebus?
uperf* at sbus?

DESCRIPTION
Some UltraSPARC host bridges provide performance counters on their host bridges. The counters are a part of the system controller chip (usc, dsc, or qsc). On PCI machines the system controller shows up as a device on the EBus, but on SBus machines the system controller exists in SBus space. The uperf driver provides access to these counters via ioctl(2).

IOCTLS
All of the ioctl calls supported by the uperf driver take the following structure as an argument:

    struct uperf_io {
    	int cnt_flags;
    	int cnt_src0;
    	int cnt_src1;
    	u_int32_t cnt_val0;
    	u_int32_t cnt_val1;
    };

The cnt_flags field specifies which counters are being operated on and is a bit mask of UPERF_CNT0 and/or UPERF_CNT1.

The cnt_src0 and cnt_src1 fields specify the source for the counter. Not all counters support monitoring all sources and specifying an invalid source for a counter to monitor will result in an error. The sources are specified below:

UPERFSRC_SYSCK
    system clock ticks
UPERFSRC_PRALL
    all p-requests
UPERFSRC_PRP0
    p-requests from processor 0
UPERFSRC_PRU2S
    p-requests from the U2S
UPERFSRC_UPA128
    cycles UPA 128 bit data is busy
UPERFSRC_UPA64
    cycles UPA 64 bit data is busy
UPERFSRC_PIOS
    cycles stalled during PIO
UPERFSRC_MEMRI
    memory requests issued
UPERFSRC_MCBUSY
    cycles memory controller is busy
UPERFSRC_PXSH
    stall cycles due to pending transaction scoreboard hit
UPERFSRC_P0CWMR
    coherent write miss requests, processor 0
UPERFSRC_P1CWMR
    coherent write miss requests, processor 1
UPERFSRC_CIT
    coherent intervention transactions
UPERFSRC_U2SDAT
    data transactions on U2S
UPERFSRC_CRXI
    coherent read transactions issued
UPERFSRC_RDP0
    read requests, processor 0
UPERFSRC_P0CRMR
    coherent read misses, processor 0
UPERFSRC_P0PIO
    PIO accesses, processor 0
UPERFSRC_MEMRC
    memory requests completed
UPERFSRC_P1RR
    read requests, processor 1
UPERFSRC_CRMP1
    coherent read misses, processor 1
UPERFSRC_PIOP1
    PIO accesses, processor 1
UPERFSRC_CWXI
    coherent write transactions issued
UPERFSRC_RP0
    read requests, processor 0
UPERFSRC_SDVRA
    streaming DVMA read transfers, PCI bus A
UPERFSRC_SDVWA
    streaming DVMA write transfers, PCI bus A
UPERFSRC_CDVRA
    consistent DVMA read transfers, PCI bus A
UPERFSRC_CDVWA
    consistent DVMA write transfers, PCI bus A
UPERFSRC_SBMA
    streaming buffer misses, PCI bus A
UPERFSRC_DVA
    DVMA cycles, PCI bus A
UPERFSRC_DVWA
    words transferred via DVMA, PCI bus A
UPERFSRC_PIOA
    cycles consumed by PIO, bus A
UPERFSRC_SDVRB
    streaming DVMA read transfers, PCI bus B
UPERFSRC_SDVWB
    streaming DVMA write transfers, PCI bus B
UPERFSRC_CDVRB
    consistent DVMA read transfers, PCI bus B
UPERFSRC_CDVWB
    consistent DVMA write transfers, PCI bus B
UPERFSRC_SBMB
    streaming buffer misses, PCI bus B
UPERFSRC_DVB
    DVMA cycles, PCI bus B
UPERFSRC_DVWB
    words transferred via DVMA, PCI bus B
UPERFSRC_PIOB
    cycles consumed by PIO, bus B
UPERFSRC_TLBMISS
    TLB misses
UPERFSRC_NINTRS
    interrupts
UPERFSRC_INACK
    interrupt NACKS on UPA
UPERFSRC_PIOR
    PIO read transfers
UPERFSRC_PIOW
    PIO write transfers
UPERFSRC_MERGE
    merge buffer transactions
UPERFSRC_TBLA
    DMA requests retried due to tablewalks, PCI bus A
UPERFSRC_STCA
    DMA requests retries due to STC, PCI bus A
UPERFSRC_TBLB
    DMA requests retries due to tablewalks, PCI bus B
UPERFSRC_STCB
    DMA requests retries due to STC, PCI bus B

The cnt_val0 and cnt_val1 contain the values fetched for the counters. Software using this interface should be prepared to handle the counters rolling over.

The uperf device responds to the following ioctl(2) calls, which are defined in <dev/sun/uperfio.h>.

UPIO_GCNTSRC
    (struct uperf_io) Retrieve the source the counters are monitoring. The cnt_flags is a bit mask for which of the counters is to be fetched. The result is returned in cnt_src0 and/or cnt_src1.

UPIO_SCNTSRC
    (struct uperf_io) Set the source the counters should monitor. This call also clears the current value of the counters that are set. The cnt_flags is a bit mask for which of the counters is to be set. The cnt_src0 and/or cnt_src1 fields specify the source to be set for the respective counter.

UPIO_CLRCNT
    (struct uperf_io) Clear the counters specified in cnt_flags.

UPIO_GETCNT
    (struct uperf_io) Retrieve the value for the counters specified in cnt_flags. The values are returned in cnt_val0 and/or cnt_val1.

SEE ALSO
ioctl(2), ebus(4), intro(4), sbus(4)

HISTORY
The uperf driver was first supported in OpenBSD 3.1.

AUTHORS
The driver was written by Jason Wright <jason@thought.net>.