libpmc: remove mips support
Bye bye! Reviewed by: imp, emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D34083
This commit is contained in:
parent
29998bf2ac
commit
99830f702d
@ -52,6 +52,10 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20220128: mips pmc events removed
|
||||
OLD_FILES+=usr/share/man/man3/pmc.mips24k.3
|
||||
OLD_FILES+=usr/share/man/man3/pmc.octeon.3
|
||||
|
||||
# 20220127: terasic_mtl.4 removed
|
||||
OLD_FILES+=usr/share/man/man4/terasic_mtl.4.gz
|
||||
|
||||
|
@ -81,8 +81,6 @@ MAN+= pmc.ivybridge.3
|
||||
MAN+= pmc.ivybridgexeon.3
|
||||
MAN+= pmc.k7.3
|
||||
MAN+= pmc.k8.3
|
||||
MAN+= pmc.mips24k.3
|
||||
MAN+= pmc.octeon.3
|
||||
MAN+= pmc.sandybridge.3
|
||||
MAN+= pmc.sandybridgeuc.3
|
||||
MAN+= pmc.sandybridgexeon.3
|
||||
|
@ -66,10 +66,6 @@ static int armv7_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
|
||||
static int arm64_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
|
||||
struct pmc_op_pmcallocate *_pmc_config);
|
||||
#endif
|
||||
#if defined(__mips__)
|
||||
static int mips_allocate_pmc(enum pmc_event _pe, char* ctrspec,
|
||||
struct pmc_op_pmcallocate *_pmc_config);
|
||||
#endif /* __mips__ */
|
||||
static int soft_allocate_pmc(enum pmc_event _pe, char *_ctrspec,
|
||||
struct pmc_op_pmcallocate *_pmc_config);
|
||||
|
||||
@ -138,10 +134,6 @@ PMC_CLASSDEP_TABLE(iaf, IAF);
|
||||
PMC_CLASSDEP_TABLE(k8, K8);
|
||||
PMC_CLASSDEP_TABLE(armv7, ARMV7);
|
||||
PMC_CLASSDEP_TABLE(armv8, ARMV8);
|
||||
PMC_CLASSDEP_TABLE(beri, BERI);
|
||||
PMC_CLASSDEP_TABLE(mips24k, MIPS24K);
|
||||
PMC_CLASSDEP_TABLE(mips74k, MIPS74K);
|
||||
PMC_CLASSDEP_TABLE(octeon, OCTEON);
|
||||
PMC_CLASSDEP_TABLE(ppc7450, PPC7450);
|
||||
PMC_CLASSDEP_TABLE(ppc970, PPC970);
|
||||
PMC_CLASSDEP_TABLE(e500, E500);
|
||||
@ -209,12 +201,6 @@ PMC_CLASS_TABLE_DESC(cortex_a53, ARMV8, cortex_a53, arm64);
|
||||
PMC_CLASS_TABLE_DESC(cortex_a57, ARMV8, cortex_a57, arm64);
|
||||
PMC_CLASS_TABLE_DESC(cortex_a76, ARMV8, cortex_a76, arm64);
|
||||
#endif
|
||||
#if defined(__mips__)
|
||||
PMC_CLASS_TABLE_DESC(beri, BERI, beri, mips);
|
||||
PMC_CLASS_TABLE_DESC(mips24k, MIPS24K, mips24k, mips);
|
||||
PMC_CLASS_TABLE_DESC(mips74k, MIPS74K, mips74k, mips);
|
||||
PMC_CLASS_TABLE_DESC(octeon, OCTEON, octeon, mips);
|
||||
#endif /* __mips__ */
|
||||
#if defined(__powerpc__)
|
||||
PMC_CLASS_TABLE_DESC(ppc7450, PPC7450, ppc7450, powerpc);
|
||||
PMC_CLASS_TABLE_DESC(ppc970, PPC970, ppc970, powerpc);
|
||||
@ -780,64 +766,6 @@ arm64_allocate_pmc(enum pmc_event pe, char *ctrspec __unused,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__mips__)
|
||||
|
||||
static struct pmc_event_alias beri_aliases[] = {
|
||||
EV_ALIAS("instructions", "INST"),
|
||||
EV_ALIAS(NULL, NULL)
|
||||
};
|
||||
|
||||
static struct pmc_event_alias mips24k_aliases[] = {
|
||||
EV_ALIAS("instructions", "INSTR_EXECUTED"),
|
||||
EV_ALIAS("branches", "BRANCH_COMPLETED"),
|
||||
EV_ALIAS("branch-mispredicts", "BRANCH_MISPRED"),
|
||||
EV_ALIAS(NULL, NULL)
|
||||
};
|
||||
|
||||
static struct pmc_event_alias mips74k_aliases[] = {
|
||||
EV_ALIAS("instructions", "INSTR_EXECUTED"),
|
||||
EV_ALIAS("branches", "BRANCH_INSNS"),
|
||||
EV_ALIAS("branch-mispredicts", "MISPREDICTED_BRANCH_INSNS"),
|
||||
EV_ALIAS(NULL, NULL)
|
||||
};
|
||||
|
||||
static struct pmc_event_alias octeon_aliases[] = {
|
||||
EV_ALIAS("instructions", "RET"),
|
||||
EV_ALIAS("branches", "BR"),
|
||||
EV_ALIAS("branch-mispredicts", "BRMIS"),
|
||||
EV_ALIAS(NULL, NULL)
|
||||
};
|
||||
|
||||
#define MIPS_KW_OS "os"
|
||||
#define MIPS_KW_USR "usr"
|
||||
#define MIPS_KW_ANYTHREAD "anythread"
|
||||
|
||||
static int
|
||||
mips_allocate_pmc(enum pmc_event pe, char *ctrspec __unused,
|
||||
struct pmc_op_pmcallocate *pmc_config __unused)
|
||||
{
|
||||
char *p;
|
||||
|
||||
(void) pe;
|
||||
|
||||
pmc_config->pm_caps |= (PMC_CAP_READ | PMC_CAP_WRITE);
|
||||
|
||||
while ((p = strsep(&ctrspec, ",")) != NULL) {
|
||||
if (KWMATCH(p, MIPS_KW_OS))
|
||||
pmc_config->pm_caps |= PMC_CAP_SYSTEM;
|
||||
else if (KWMATCH(p, MIPS_KW_USR))
|
||||
pmc_config->pm_caps |= PMC_CAP_USER;
|
||||
else if (KWMATCH(p, MIPS_KW_ANYTHREAD))
|
||||
pmc_config->pm_caps |= (PMC_CAP_USER | PMC_CAP_SYSTEM);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif /* __mips__ */
|
||||
|
||||
#if defined(__powerpc__)
|
||||
|
||||
static struct pmc_event_alias ppc7450_aliases[] = {
|
||||
@ -1211,22 +1139,6 @@ pmc_event_names_of_class(enum pmc_class cl, const char ***eventnames,
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case PMC_CLASS_BERI:
|
||||
ev = beri_event_table;
|
||||
count = PMC_EVENT_TABLE_SIZE(beri);
|
||||
break;
|
||||
case PMC_CLASS_MIPS24K:
|
||||
ev = mips24k_event_table;
|
||||
count = PMC_EVENT_TABLE_SIZE(mips24k);
|
||||
break;
|
||||
case PMC_CLASS_MIPS74K:
|
||||
ev = mips74k_event_table;
|
||||
count = PMC_EVENT_TABLE_SIZE(mips74k);
|
||||
break;
|
||||
case PMC_CLASS_OCTEON:
|
||||
ev = octeon_event_table;
|
||||
count = PMC_EVENT_TABLE_SIZE(octeon);
|
||||
break;
|
||||
case PMC_CLASS_PPC7450:
|
||||
ev = ppc7450_event_table;
|
||||
count = PMC_EVENT_TABLE_SIZE(ppc7450);
|
||||
@ -1426,24 +1338,6 @@ pmc_init(void)
|
||||
pmc_class_table[n] = &cortex_a76_class_table_descr;
|
||||
break;
|
||||
#endif
|
||||
#if defined(__mips__)
|
||||
case PMC_CPU_MIPS_BERI:
|
||||
PMC_MDEP_INIT(beri);
|
||||
pmc_class_table[n] = &beri_class_table_descr;
|
||||
break;
|
||||
case PMC_CPU_MIPS_24K:
|
||||
PMC_MDEP_INIT(mips24k);
|
||||
pmc_class_table[n] = &mips24k_class_table_descr;
|
||||
break;
|
||||
case PMC_CPU_MIPS_74K:
|
||||
PMC_MDEP_INIT(mips74k);
|
||||
pmc_class_table[n] = &mips74k_class_table_descr;
|
||||
break;
|
||||
case PMC_CPU_MIPS_OCTEON:
|
||||
PMC_MDEP_INIT(octeon);
|
||||
pmc_class_table[n] = &octeon_class_table_descr;
|
||||
break;
|
||||
#endif /* __mips__ */
|
||||
#if defined(__powerpc__)
|
||||
case PMC_CPU_PPC_7450:
|
||||
PMC_MDEP_INIT(ppc7450);
|
||||
@ -1570,18 +1464,6 @@ _pmc_name_of_event(enum pmc_event pe, enum pmc_cputype cpu)
|
||||
default: /* Unknown CPU type. */
|
||||
break;
|
||||
}
|
||||
} else if (pe >= PMC_EV_BERI_FIRST && pe <= PMC_EV_BERI_LAST) {
|
||||
ev = beri_event_table;
|
||||
evfence = beri_event_table + PMC_EVENT_TABLE_SIZE(beri);
|
||||
} else if (pe >= PMC_EV_MIPS24K_FIRST && pe <= PMC_EV_MIPS24K_LAST) {
|
||||
ev = mips24k_event_table;
|
||||
evfence = mips24k_event_table + PMC_EVENT_TABLE_SIZE(mips24k);
|
||||
} else if (pe >= PMC_EV_MIPS74K_FIRST && pe <= PMC_EV_MIPS74K_LAST) {
|
||||
ev = mips74k_event_table;
|
||||
evfence = mips74k_event_table + PMC_EVENT_TABLE_SIZE(mips74k);
|
||||
} else if (pe >= PMC_EV_OCTEON_FIRST && pe <= PMC_EV_OCTEON_LAST) {
|
||||
ev = octeon_event_table;
|
||||
evfence = octeon_event_table + PMC_EVENT_TABLE_SIZE(octeon);
|
||||
} else if (pe >= PMC_EV_PPC7450_FIRST && pe <= PMC_EV_PPC7450_LAST) {
|
||||
ev = ppc7450_event_table;
|
||||
evfence = ppc7450_event_table + PMC_EVENT_TABLE_SIZE(ppc7450);
|
||||
|
@ -491,8 +491,6 @@ API is
|
||||
.Xr pmc.ivybridgexeon 3 ,
|
||||
.Xr pmc.k7 3 ,
|
||||
.Xr pmc.k8 3 ,
|
||||
.Xr pmc.mips24k 3 ,
|
||||
.Xr pmc.octeon 3 ,
|
||||
.Xr pmc.sandybridge 3 ,
|
||||
.Xr pmc.sandybridgeuc 3 ,
|
||||
.Xr pmc.sandybridgexeon 3 ,
|
||||
|
@ -1,409 +0,0 @@
|
||||
.\" Copyright (c) 2010 George Neville-Neil. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 24, 2012
|
||||
.Dt PMC.MIPS24K 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm pmc.mips24k
|
||||
.Nd measurement events for
|
||||
.Tn MIPS24K
|
||||
family CPUs
|
||||
.Sh LIBRARY
|
||||
.Lb libpmc
|
||||
.Sh SYNOPSIS
|
||||
.In pmc.h
|
||||
.Sh DESCRIPTION
|
||||
MIPS PMCs are present in MIPS
|
||||
.Tn "24k"
|
||||
and other processors in the MIPS family.
|
||||
.Pp
|
||||
There are two counters supported by the hardware and each is 32 bits
|
||||
wide.
|
||||
.Pp
|
||||
MIPS PMCs are documented in
|
||||
.Rs
|
||||
.%B "MIPS32 24K Processor Core Family Software User's Manual"
|
||||
.%D December 2008
|
||||
.%Q "MIPS Technologies Inc."
|
||||
.Re
|
||||
.Ss Event Specifiers (Programmable PMCs)
|
||||
MIPS programmable PMCs support the following events:
|
||||
.Bl -tag -width indent
|
||||
.It Li CYCLE
|
||||
.Pq Event 0, Counter 0/1
|
||||
Total number of cycles.
|
||||
The performance counters are clocked by the
|
||||
top-level gated clock.
|
||||
If the core is built with that clock gater
|
||||
present, none of the counters will increment while the clock is
|
||||
stopped - due to a WAIT instruction.
|
||||
.It Li INSTR_EXECUTED
|
||||
.Pq Event 1, Counter 0/1
|
||||
Total number of instructions completed.
|
||||
.It Li BRANCH_COMPLETED
|
||||
.Pq Event 2, Counter 0
|
||||
Total number of branch instructions completed.
|
||||
.It Li BRANCH_MISPRED
|
||||
.Pq Event 2, Counter 1
|
||||
Counts all branch instructions which completed, but were mispredicted.
|
||||
.It Li RETURN
|
||||
.Pq Event 3, Counter 0
|
||||
Counts all JR R31 instructions completed.
|
||||
.It Li RETURN_MISPRED
|
||||
.Pq Event 3, Counter 1
|
||||
Counts all JR $31 instructions which completed, used the RPS for a prediction, but were mispredicted.
|
||||
.It Li RETURN_NOT_31
|
||||
.Pq Event 4, Counter 0
|
||||
Counts all JR $xx (not $31) and JALR instructions (indirect jumps).
|
||||
.It Li RETURN_NOTPRED
|
||||
.Pq Event 4, Counter 1
|
||||
If RPS use is disabled, JR $31 will not be predicted.
|
||||
.It Li ITLB_ACCESS
|
||||
.Pq Event 5, Counter 0
|
||||
Counts ITLB accesses that are due to fetches showing up in the
|
||||
instruction fetch stage of the pipeline and which do not use a fixed
|
||||
mapping or are not in unmapped space.
|
||||
If an address is fetched twice from the pipe (as in the case of a
|
||||
cache miss), that instruction willcount as 2 ITLB accesses.
|
||||
Since each fetch gets us 2 instructions,there is one access marked per double
|
||||
word.
|
||||
.It Li ITLB_MISS
|
||||
.Pq Event 5, Counter 1
|
||||
Counts all misses in the ITLB except ones that are on the back of another
|
||||
miss.
|
||||
We cannot process back to back misses and thus those are
|
||||
ignored.
|
||||
They are also ignored if there is some form of address error.
|
||||
.It Li DTLB_ACCESS
|
||||
.Pq Event 6, Counter 0
|
||||
Counts DTLB access including those in unmapped address spaces.
|
||||
.It Li DTLB_MISS
|
||||
.Pq Event 6, Counter 1
|
||||
Counts DTLB misses.
|
||||
Back to back misses that result in only one DTLB
|
||||
entry getting refilled are counted as a single miss.
|
||||
.It Li JTLB_IACCESS
|
||||
.Pq Event 7, Counter 0
|
||||
Instruction JTLB accesses are counted exactly the same as ITLB misses.
|
||||
.It Li JTLB_IMISS
|
||||
.Pq Event 7, Counter 1
|
||||
Counts instruction JTLB accesses that result in no match or a match on
|
||||
an invalid translation.
|
||||
.It Li JTLB_DACCESS
|
||||
.Pq Event 8, Counter 0
|
||||
Data JTLB accesses.
|
||||
.It Li JTLB_DMISS
|
||||
.Pq Event 8, Counter 1
|
||||
Counts data JTLB accesses that result in no match or a match on an invalid translation.
|
||||
.It Li IC_FETCH
|
||||
.Pq Event 9, Counter 0
|
||||
Counts every time the instruction cache is accessed.
|
||||
All replays,
|
||||
wasted fetches etc. are counted.
|
||||
For example, following a branch, even though the prediction is taken,
|
||||
the fall through access is counted.
|
||||
.It Li IC_MISS
|
||||
.Pq Event 9, Counter 1
|
||||
Counts all instruction cache misses that result in a bus request.
|
||||
.It Li DC_LOADSTORE
|
||||
.Pq Event 10, Counter 0
|
||||
Counts cached loads and stores.
|
||||
.It Li DC_WRITEBACK
|
||||
.Pq Event 10, Counter 1
|
||||
Counts cache lines written back to memory due to replacement or cacheops.
|
||||
.It Li DC_MISS
|
||||
.Pq Event 11, Counter 0/1
|
||||
Counts loads and stores that miss in the cache
|
||||
.It Li LOAD_MISS
|
||||
.Pq Event 13, Counter 0
|
||||
Counts number of cacheable loads that miss in the cache.
|
||||
.It Li STORE_MISS
|
||||
.Pq Event 13, Counter 1
|
||||
Counts number of cacheable stores that miss in the cache.
|
||||
.It Li INTEGER_COMPLETED
|
||||
.Pq Event 14, Counter 0
|
||||
Non-floating point, non-Coprocessor 2 instructions.
|
||||
.It Li FP_COMPLETED
|
||||
.Pq Event 14, Counter 1
|
||||
Floating point instructions completed.
|
||||
.It Li LOAD_COMPLETED
|
||||
.Pq Event 15, Counter 0
|
||||
Integer and co-processor loads completed.
|
||||
.It Li STORE_COMPLETED
|
||||
.Pq Event 15, Counter 1
|
||||
Integer and co-processor stores completed.
|
||||
.It Li BARRIER_COMPLETED
|
||||
.Pq Event 16, Counter 0
|
||||
Direct jump (and link) instructions completed.
|
||||
.It Li MIPS16_COMPLETED
|
||||
.Pq Event 16, Counter 1
|
||||
MIPS16c instructions completed.
|
||||
.It Li NOP_COMPLETED
|
||||
.Pq Event 17, Counter 0
|
||||
NOPs completed.
|
||||
This includes all instructions that normally write to a general
|
||||
purpose register, but where the destination register was set to r0.
|
||||
.It Li INTEGER_MULDIV_COMPLETED
|
||||
.Pq Event 17, Counter 1
|
||||
Integer multiply and divide instructions completed. (MULxx, DIVx, MADDx, MSUBx).
|
||||
.It Li RF_STALL
|
||||
.Pq Event 18, Counter 0
|
||||
Counts the total number of cycles where no instructions are issued
|
||||
from the IFU to ALU (the RF stage does not advance) which includes
|
||||
both of the previous two events.
|
||||
The RT_STALL is different than the sum of them though because cycles
|
||||
when both stalls are active will only be counted once.
|
||||
.It Li INSTR_REFETCH
|
||||
.Pq Event 18, Counter 1
|
||||
replay traps (other than uTLB)
|
||||
.It Li STORE_COND_COMPLETED
|
||||
.Pq Event 19, Counter 0
|
||||
Conditional stores completed.
|
||||
Counts all events, including failed stores.
|
||||
.It Li STORE_COND_FAILED
|
||||
.Pq Event 19, Counter 1
|
||||
Conditional store instruction that did not update memory.
|
||||
Note: While this event and the SC instruction count event can be configured to
|
||||
count in specific operating modes, the timing of the events is much
|
||||
different and the observed operating mode could change between them,
|
||||
causing some inaccuracy in the measured ratio.
|
||||
.It Li ICACHE_REQUESTS
|
||||
.Pq Event 20, Counter 0
|
||||
Note that this only counts PREFs that are actually attempted.
|
||||
PREFs to uncached addresses or ones with translation errors are not counted
|
||||
.It Li ICACHE_HIT
|
||||
.Pq Event 20, Counter 1
|
||||
Counts PREF instructions that hit in the cache
|
||||
.It Li L2_WRITEBACK
|
||||
.Pq Event 21, Counter 0
|
||||
Counts cache lines written back to memory due to replacement or cacheops.
|
||||
.It Li L2_ACCESS
|
||||
.Pq Event 21, Counter 1
|
||||
Number of accesses to L2 Cache.
|
||||
.It Li L2_MISS
|
||||
.Pq Event 22, Counter 0
|
||||
Number of accesses that missed in the L2 cache.
|
||||
.It Li L2_ERR_CORRECTED
|
||||
.Pq Event 22, Counter 1
|
||||
Single bit errors in L2 Cache that were detected and corrected.
|
||||
.It Li EXCEPTIONS
|
||||
.Pq Event 23, Counter 0
|
||||
Any type of exception taken.
|
||||
.It Li RF_CYCLES_STALLED
|
||||
.Pq Event 24, Counter 0
|
||||
Counts cycles where the LSU is in fixup and cannot accept a new
|
||||
instruction from the ALU.
|
||||
Fixups are replays within the LSU that occur when an instruction needs
|
||||
to re-access the cache or the DTLB.
|
||||
.It Li IFU_CYCLES_STALLED
|
||||
.Pq Event 25, Counter 0
|
||||
Counts the number of cycles where the fetch unit is not providing a
|
||||
valid instruction to the ALU.
|
||||
.It Li ALU_CYCLES_STALLED
|
||||
.Pq Event 25, Counter 1
|
||||
Counts the number of cycles where the ALU pipeline cannot advance.
|
||||
.It Li UNCACHED_LOAD
|
||||
.Pq Event 33, Counter 0
|
||||
Counts uncached and uncached accelerated loads.
|
||||
.It Li UNCACHED_STORE
|
||||
.Pq Event 33, Counter 1
|
||||
Counts uncached and uncached accelerated stores.
|
||||
.It Li CP2_REG_TO_REG_COMPLETED
|
||||
.Pq Event 35, Counter 0
|
||||
Co-processor 2 register to register instructions completed.
|
||||
.It Li MFTC_COMPLETED
|
||||
.Pq Event 35, Counter 1
|
||||
Co-processor 2 move to and from instructions as well as loads and stores.
|
||||
.It Li IC_BLOCKED_CYCLES
|
||||
.Pq Event 37, Counter 0
|
||||
Cycles when IFU stalls because an instruction miss caused the IFU not
|
||||
to have any runnable instructions.
|
||||
Ignores the stalls due to ITLB misses as well as the 4 cycles
|
||||
following a redirect.
|
||||
.It Li DC_BLOCKED_CYCLES
|
||||
.Pq Event 37, Counter 1
|
||||
Counts all cycles where integer pipeline waits on Load return data due
|
||||
to a D-cache miss.
|
||||
The LSU can signal a "long stall" on a D-cache misses, in which case
|
||||
the waiting TC might be rescheduled so other TCs can execute
|
||||
instructions till the data returns.
|
||||
.It Li L2_IMISS_STALL_CYCLES
|
||||
.Pq Event 38, Counter 0
|
||||
Cycles where the main pipeline is stalled waiting for a SYNC to complete.
|
||||
.It Li L2_DMISS_STALL_CYCLES
|
||||
.Pq Event 38, Counter 1
|
||||
Cycles where the main pipeline is stalled because of an index conflict
|
||||
in the Fill Store Buffer.
|
||||
.It Li DMISS_CYCLES
|
||||
.Pq Event 39, Counter 0
|
||||
Data miss is outstanding, but not necessarily stalling the pipeline.
|
||||
The difference between this and D$ miss stall cycles can show the gain
|
||||
from non-blocking cache misses.
|
||||
.It Li L2_MISS_CYCLES
|
||||
.Pq Event 39, Counter 1
|
||||
L2 miss is outstanding, but not necessarily stalling the pipeline.
|
||||
.It Li UNCACHED_BLOCK_CYCLES
|
||||
.Pq Event 40, Counter 0
|
||||
Cycles where the processor is stalled on an uncached fetch, load, or store.
|
||||
.It Li MDU_STALL_CYCLES
|
||||
.Pq Event 41, Counter 0
|
||||
Cycles where the processor is stalled on an uncached fetch, load, or store.
|
||||
.It Li FPU_STALL_CYCLES
|
||||
.Pq Event 41, Counter 1
|
||||
Counts all cycles where integer pipeline waits on FPU return data.
|
||||
.It Li CP2_STALL_CYCLES
|
||||
.Pq Event 42, Counter 0
|
||||
Counts all cycles where integer pipeline waits on CP2 return data.
|
||||
.It Li COREXTEND_STALL_CYCLES
|
||||
.Pq Event 42, Counter 1
|
||||
Counts all cycles where integer pipeline waits on CorExtend return data.
|
||||
.It Li ISPRAM_STALL_CYCLES
|
||||
.Pq Event 43, Counter 0
|
||||
Count all pipeline bubbles that are a result of multicycle ISPRAM
|
||||
access.
|
||||
Pipeline bubbles are defined as all cycles that IFU doesn't present an
|
||||
instruction to ALU.
|
||||
The four cycles after a redirect are not counted.
|
||||
.It Li DSPRAM_STALL_CYCLES
|
||||
.Pq Event 43, Counter 1
|
||||
Counts stall cycles created by an instruction waiting for access to DSPRAM.
|
||||
.It Li CACHE_STALL_CYCLES
|
||||
.Pq Event 44, Counter 0
|
||||
Counts all cycles the where pipeline is stalled due to CACHE
|
||||
instructions.
|
||||
Includes cycles where CACHE instructions themselves are
|
||||
stalled in the ALU, and cycles where CACHE instructions cause
|
||||
subsequent instructions to be stalled.
|
||||
.It Li LOAD_TO_USE_STALLS
|
||||
.Pq Event 45, Counter 0
|
||||
Counts all cycles where integer pipeline waits on Load return data.
|
||||
.It Li BASE_MISPRED_STALLS
|
||||
.Pq Event 45, Counter 1
|
||||
Counts stall cycles due to skewed ALU where the bypass to the address
|
||||
generation takes an extra cycle.
|
||||
.It Li CPO_READ_STALLS
|
||||
.Pq Event 46, Counter 0
|
||||
Counts all cycles where integer pipeline waits on return data from
|
||||
MFC0, RDHWR instructions.
|
||||
.It Li BRANCH_MISPRED_CYCLES
|
||||
.Pq Event 46, Counter 1
|
||||
This counts the number of cycles from a mispredicted branch until the
|
||||
next non-delay slot instruction executes.
|
||||
.It Li IFETCH_BUFFER_FULL
|
||||
.Pq Event 48, Counter 0
|
||||
Counts the number of times an instruction cache miss was detected, but
|
||||
both fill buffers were already allocated.
|
||||
.It Li FETCH_BUFFER_ALLOCATED
|
||||
.Pq Event 48, Counter 1
|
||||
Number of cycles where at least one of the IFU fill buffers is
|
||||
allocated (miss pending).
|
||||
.It Li EJTAG_ITRIGGER
|
||||
.Pq Event 49, Counter 0
|
||||
Number of times an EJTAG Instruction Trigger Point condition matched.
|
||||
.It Li EJTAG_DTRIGGER
|
||||
.Pq Event 49, Counter 1
|
||||
Number of times an EJTAG Data Trigger Point condition matched.
|
||||
.It Li FSB_LT_QUARTER
|
||||
.Pq Event 50, Counter 0
|
||||
Fill store buffer less than one quarter full.
|
||||
.It Li FSB_QUARTER_TO_HALF
|
||||
.Pq Event 50, Counter 1
|
||||
Fill store buffer between one quarter and one half full.
|
||||
.It Li FSB_GT_HALF
|
||||
.Pq Event 51, Counter 0
|
||||
Fill store buffer more than half full.
|
||||
.It Li FSB_FULL_PIPELINE_STALLS
|
||||
.Pq Event 51, Counter 1
|
||||
Cycles where the pipeline is stalled because the Fill-Store Buffer in LSU is full.
|
||||
.It Li LDQ_LT_QUARTER
|
||||
.Pq Event 52, Counter 0
|
||||
Load data queue less than one quarter full.
|
||||
.It Li LDQ_QUARTER_TO_HALF
|
||||
.Pq Event 52, Counter 1
|
||||
Load data queue between one quarter and one half full.
|
||||
.It Li LDQ_GT_HALF
|
||||
.Pq Event 53, Counter 0
|
||||
Load data queue more than one half full.
|
||||
.It Li LDQ_FULL_PIPELINE_STALLS
|
||||
.Pq Event 53, Counter 1
|
||||
Cycles where the pipeline is stalled because the Load Data Queue in the LSU is full.
|
||||
.It Li WBB_LT_QUARTER
|
||||
.Pq Event 54, Counter 0
|
||||
Write back buffer less than one quarter full.
|
||||
.It Li WBB_QUARTER_TO_HALF
|
||||
.Pq Event 54, Counter 1
|
||||
Write back buffer between one quarter and one half full.
|
||||
.It Li WBB_GT_HALF
|
||||
.Pq Event 55, Counter 0
|
||||
Write back buffer more than one half full.
|
||||
.It Li WBB_FULL_PIPELINE_STALLS
|
||||
.Pq Event 55 Counter 1
|
||||
Cycles where the pipeline is stalled because the Load Data Queue in the LSU is full.
|
||||
.It Li REQUEST_LATENCY
|
||||
.Pq Event 61, Counter 0
|
||||
Measures latency from miss detection until critical dword of response
|
||||
is returned, Only counts for cacheable reads.
|
||||
.It Li REQUEST_COUNT
|
||||
.Pq Event 61, Counter 1
|
||||
Counts number of cacheable read requests used for previous latency counter.
|
||||
.El
|
||||
.Ss Event Name Aliases
|
||||
The following table shows the mapping between the PMC-independent
|
||||
aliases supported by
|
||||
.Lb libpmc
|
||||
and the underlying hardware events used.
|
||||
.Bl -column "branch-mispredicts" "cpu_clk_unhalted.core_p"
|
||||
.It Em Alias Ta Em Event
|
||||
.It Li instructions Ta Li INSTR_EXECUTED
|
||||
.It Li branches Ta Li BRANCH_COMPLETED
|
||||
.It Li branch-mispredicts Ta Li BRANCH_MISPRED
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr pmc 3 ,
|
||||
.Xr pmc.atom 3 ,
|
||||
.Xr pmc.core 3 ,
|
||||
.Xr pmc.iaf 3 ,
|
||||
.Xr pmc.k7 3 ,
|
||||
.Xr pmc.k8 3 ,
|
||||
.Xr pmc.octeon 3 ,
|
||||
.Xr pmc.soft 3 ,
|
||||
.Xr pmc.tsc 3 ,
|
||||
.Xr pmc_cpuinfo 3 ,
|
||||
.Xr pmclog 3 ,
|
||||
.Xr hwpmc 4
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm pmc
|
||||
library first appeared in
|
||||
.Fx 6.0 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Lb libpmc
|
||||
library was written by
|
||||
.An Joseph Koshy Aq Mt jkoshy@FreeBSD.org .
|
||||
MIPS support was added by
|
||||
.An George Neville-Neil Aq Mt gnn@FreeBSD.org .
|
@ -1,249 +0,0 @@
|
||||
.\" Copyright (c) 2010 George Neville-Neil. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
.\" are met:
|
||||
.\" 1. Redistributions of source code must retain the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer.
|
||||
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||
.\" notice, this list of conditions and the following disclaimer in the
|
||||
.\" documentation and/or other materials provided with the distribution.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd March 24, 2012
|
||||
.Dt PMC.OCTEON 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm pmc.octeon
|
||||
.Nd measurement events for
|
||||
.Tn Octeon
|
||||
family CPUs
|
||||
.Sh LIBRARY
|
||||
.Lb libpmc
|
||||
.Sh SYNOPSIS
|
||||
.In pmc.h
|
||||
.Sh DESCRIPTION
|
||||
There are two counters per core supported by the hardware and each is 64 bits
|
||||
wide.
|
||||
.Ss Event Specifiers (Programmable PMCs)
|
||||
MIPS programmable PMCs support the following events:
|
||||
.Bl -tag -width indent
|
||||
.It Li CLK
|
||||
.Pq Event 1
|
||||
Conditionally clocked cycles (as opposed to count/cvm_count which count even with no clocks)
|
||||
.It Li ISSUE
|
||||
.Pq Event 2
|
||||
Instructions issued but not retired
|
||||
.It Li RET
|
||||
.Pq Event 3
|
||||
Instructions retired
|
||||
.It Li NISSUE
|
||||
.Pq Event 4
|
||||
Cycles no issue
|
||||
.It Li SISSUE
|
||||
.Pq Event 5
|
||||
Cycles single issue
|
||||
.It Li DISSUE
|
||||
.Pq Event 6
|
||||
Cycles dual issue
|
||||
.It Li IFI
|
||||
.Pq Event 7
|
||||
Cycle ifetch issued (but not necessarily commit to pp_mem)
|
||||
.It Li BR
|
||||
.Pq Event 8
|
||||
Branches retired
|
||||
.It Li BRMIS
|
||||
.Pq Event 9
|
||||
Branch mispredicts
|
||||
.It Li J
|
||||
.Pq Event 10
|
||||
Jumps retired
|
||||
.It Li JMIS
|
||||
.Pq Event 11
|
||||
Jumps mispredicted
|
||||
.It Li REPLAY
|
||||
.Pq Event 12
|
||||
Mem Replays
|
||||
.It Li IUNA
|
||||
.Pq Event 13
|
||||
Cycles idle due to unaligned_replays
|
||||
.It Li TRAP
|
||||
.Pq Event 14
|
||||
trap_6a signal
|
||||
.It Li UULOAD
|
||||
.Pq Event 16
|
||||
Unexpected unaligned loads (REPUN=1)
|
||||
.It Li UUSTORE
|
||||
.Pq Event 17
|
||||
Unexpected unaligned store (REPUN=1)
|
||||
.It Li ULOAD
|
||||
.Pq Event 18
|
||||
Unaligned loads (REPUN=1 or USEUN=1)
|
||||
.It Li USTORE
|
||||
.Pq Event 19
|
||||
Unaligned store (REPUN=1 or USEUN=1)
|
||||
.It Li EC
|
||||
.Pq Event 20
|
||||
Exec clocks(must set CvmCtl[DISCE] for accurate timing)
|
||||
.It Li MC
|
||||
.Pq Event 21
|
||||
Mul clocks(must set CvmCtl[DISCE] for accurate timing)
|
||||
.It Li CC
|
||||
.Pq Event 22
|
||||
Crypto clocks(must set CvmCtl[DISCE] for accurate timing)
|
||||
.It Li CSRC
|
||||
.Pq Event 23
|
||||
Issue_csr clocks(must set CvmCtl[DISCE] for accurate timing)
|
||||
.It Li CFETCH
|
||||
.Pq Event 24
|
||||
Icache committed fetches (demand+prefetch)
|
||||
.It Li CPREF
|
||||
.Pq Event 25
|
||||
Icache committed prefetches
|
||||
.It Li ICA
|
||||
.Pq Event 26
|
||||
Icache aliases
|
||||
.It Li II
|
||||
.Pq Event 27
|
||||
Icache invalidates
|
||||
.It Li IP
|
||||
.Pq Event 28
|
||||
Icache parity error
|
||||
.It Li CIMISS
|
||||
.Pq Event 29
|
||||
Cycles idle due to imiss (must set CvmCtl[DISCE] for accurate timing)
|
||||
.It Li WBUF
|
||||
.Pq Event 32
|
||||
Number of write buffer entries created
|
||||
.It Li WDAT
|
||||
.Pq Event 33
|
||||
Number of write buffer data cycles used (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li WBUFLD
|
||||
.Pq Event 34
|
||||
Number of write buffer entries forced out by loads
|
||||
.It Li WBUFFL
|
||||
.Pq Event 35
|
||||
Number of cycles that there was no available write buffer entry (may need to set CvmCtl[DISCE] and CvmMemCtl[MCLK] for accurate counts)
|
||||
.It Li WBUFTR
|
||||
.Pq Event 36
|
||||
Number of stores that found no available write buffer entries
|
||||
.It Li BADD
|
||||
.Pq Event 37
|
||||
Number of address bus cycles used (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li BADDL2
|
||||
.Pq Event 38
|
||||
Number of address bus cycles not reflected (i.e. destined for L2) (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li BFILL
|
||||
.Pq Event 39
|
||||
Number of fill bus cycles used (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li DDIDS
|
||||
.Pq Event 40
|
||||
Number of Dstream DIDs created
|
||||
.It Li IDIDS
|
||||
.Pq Event 41
|
||||
Number of Istream DIDs created
|
||||
.It Li DIDNA
|
||||
.Pq Event 42
|
||||
Number of cycles that no DIDs were available (may need to set CvmCtl[DISCE] and CvmMemCtl[MCLK] for accurate counts)
|
||||
.It Li LDS
|
||||
.Pq Event 43
|
||||
Number of load issues
|
||||
.It Li LMLDS
|
||||
.Pq Event 44
|
||||
Number of local memory load
|
||||
.It Li IOLDS
|
||||
.Pq Event 45
|
||||
Number of I/O load issues
|
||||
.It Li DMLDS
|
||||
.Pq Event 46
|
||||
Number of loads that were not prefetches and missed in the cache
|
||||
.It Li STS
|
||||
.Pq Event 48
|
||||
Number of store issues
|
||||
.It Li LMSTS
|
||||
.Pq Event 49
|
||||
Number of local memory store issues
|
||||
.It Li IOSTS
|
||||
.Pq Event 50
|
||||
Number of I/O store issues
|
||||
.It Li IOBDMA
|
||||
.Pq Event 51
|
||||
Number of IOBDMAs
|
||||
.It Li DTLB
|
||||
.Pq Event 53
|
||||
Number of dstream TLB refill, invalid, or modified exceptions
|
||||
.It Li DTLBAD
|
||||
.Pq Event 54
|
||||
Number of dstream TLB address errors
|
||||
.It Li ITLB
|
||||
.Pq Event 55
|
||||
Number of istream TLB refill, invalid, or address error exceptions
|
||||
.It Li SYNC
|
||||
.Pq Event 56
|
||||
Number of SYNC stall cycles (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li SYNCIOB
|
||||
.Pq Event 57
|
||||
Number of SYNCIOBDMA stall cycles (may need to set CvmCtl[DISCE] for accurate counts)
|
||||
.It Li SYNCW
|
||||
.Pq Event 58
|
||||
Number of SYNCWs
|
||||
.It Li ERETMIS
|
||||
.Pq Event 64
|
||||
D/eret mispredicts (CN63XX specific)
|
||||
.It Li LIKMIS
|
||||
.Pq Event 65
|
||||
Branch likely mispredicts (CN63XX specific)
|
||||
.It Li HAZTR
|
||||
.Pq Event 66
|
||||
Hazard traps due to *MTC0 to CvmCtl, Perf counter control, EntryHi, or CvmMemCtl registers (CN63XX specific)
|
||||
.El
|
||||
.Ss Event Name Aliases
|
||||
The following table shows the mapping between the PMC-independent
|
||||
aliases supported by
|
||||
.Lb libpmc
|
||||
and the underlying hardware events used.
|
||||
.Bl -column "branch-mispredicts" "cpu_clk_unhalted.core_p"
|
||||
.It Em Alias Ta Em Event
|
||||
.It Li instructions Ta Li RET
|
||||
.It Li branches Ta Li BR
|
||||
.It Li branch-mispredicts Ta Li BS
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr pmc 3 ,
|
||||
.Xr pmc.atom 3 ,
|
||||
.Xr pmc.core 3 ,
|
||||
.Xr pmc.iaf 3 ,
|
||||
.Xr pmc.k7 3 ,
|
||||
.Xr pmc.k8 3 ,
|
||||
.Xr pmc.mips24k 3 ,
|
||||
.Xr pmc.soft 3 ,
|
||||
.Xr pmc.tsc 3 ,
|
||||
.Xr pmc_cpuinfo 3 ,
|
||||
.Xr pmclog 3 ,
|
||||
.Xr hwpmc 4
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm pmc
|
||||
library first appeared in
|
||||
.Fx 6.0 .
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
The
|
||||
.Lb libpmc
|
||||
library was written by
|
||||
.An Joseph Koshy Aq Mt jkoshy@FreeBSD.org .
|
||||
MIPS support was added by
|
||||
.An George Neville-Neil Aq Mt gnn@FreeBSD.org .
|
Loading…
Reference in New Issue
Block a user