White space changes.
This commit is contained in:
parent
ade40db3a2
commit
058ccb7564
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=292028
@ -207,6 +207,7 @@ static void
|
||||
explain_name_sb(const char *name)
|
||||
{
|
||||
const char *mythresh;
|
||||
|
||||
if (strcmp(name, "allocstall1") == 0) {
|
||||
printf("Examine PARTIAL_RAT_STALLS.SLOW_LEA_WINDOW / CPU_CLK_UNHALTED.THREAD_P\n");
|
||||
mythresh = "thresh > .05";
|
||||
@ -286,6 +287,7 @@ static void
|
||||
explain_name_ib(const char *name)
|
||||
{
|
||||
const char *mythresh;
|
||||
|
||||
if (strcmp(name, "br_miss") == 0) {
|
||||
printf("Examine ((BR_MISP_RETIRED.ALL_BRANCHES /(BR_MISP_RETIRED.ALL_BRANCHES +\n");
|
||||
printf(" MACHINE_CLEAR.COUNT) * ((UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES)\n");
|
||||
@ -369,6 +371,7 @@ static void
|
||||
explain_name_has(const char *name)
|
||||
{
|
||||
const char *mythresh;
|
||||
|
||||
if (strcmp(name, "eff1") == 0) {
|
||||
printf("Examine (UOPS_RETIRED.RETIRE_SLOTS)/(4 *CPU_CLK_UNHALTED.THREAD_P)\n");
|
||||
mythresh = "thresh < .75";
|
||||
@ -475,6 +478,7 @@ allocstall1(struct counters *cpu, int pos)
|
||||
struct counters *partial;
|
||||
struct counters *unhalt;
|
||||
double un, par, res;
|
||||
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
partial = find_counter(cpu, "PARTIAL_RAT_STALLS.SLOW_LEA_WINDOW");
|
||||
if (pos != -1) {
|
||||
@ -497,6 +501,7 @@ allocstall2(struct counters *cpu, int pos)
|
||||
struct counters *partial;
|
||||
struct counters *unhalt;
|
||||
double un, par, res;
|
||||
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
partial = find_counter(cpu, "PARTIAL_RAT_STALLS.FLAGS_MERGE_UOP");
|
||||
if (pos != -1) {
|
||||
@ -517,8 +522,10 @@ br_mispredict(struct counters *cpu, int pos)
|
||||
struct counters *brctr;
|
||||
struct counters *unhalt;
|
||||
int ret;
|
||||
|
||||
/* 3 - (20 * BR_MISP_RETIRED.ALL_BRANCHES)/CPU_CLK_UNHALTED.THREAD_P (thresh >= .2) */
|
||||
double br, un, con, res;
|
||||
|
||||
con = 20.0;
|
||||
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
@ -544,16 +551,19 @@ br_mispredictib(struct counters *cpu, int pos)
|
||||
struct counters *uops;
|
||||
struct counters *recv;
|
||||
struct counters *iss;
|
||||
|
||||
/* "pmcstat -s CPU_CLK_UNHALTED.THREAD_P -s BR_MISP_RETIRED.ALL_BRANCHES -s MACHINE_CLEARS.MEMORY_ORDERING -s MACHINE_CLEARS.SMC -s MACHINE_CLEARS.MASKMOV -s UOPS_ISSUED.ANY -s UOPS_RETIRED.RETIRE_SLOTS -s INT_MISC.RECOVERY_CYCLES -w 1",*/
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* (BR_MISP_RETIRED.ALL_BRANCHES /
|
||||
* (BR_MISP_RETIRED.ALL_BRANCHES +
|
||||
* MACHINE_CLEAR.COUNT) *
|
||||
* ((UOPS_ISSUED.ANY - UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES) / (4 * CPU_CLK_UNHALTED.THREAD)))
|
||||
* (BR_MISP_RETIRED.ALL_BRANCHES / (BR_MISP_RETIRED.ALL_BRANCHES +
|
||||
* MACHINE_CLEAR.COUNT) * ((UOPS_ISSUED.ANY -
|
||||
* UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES) / (4 *
|
||||
* CPU_CLK_UNHALTED.THREAD)))
|
||||
*
|
||||
*/
|
||||
double br, cl, cl2, cl3, uo, re, un, con, res, is;
|
||||
|
||||
con = 4.0;
|
||||
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
@ -637,9 +647,12 @@ splitloadib(struct counters *cpu, int pos)
|
||||
struct counters *l1d, *ldblock;
|
||||
struct counters *unhalt;
|
||||
double un, memd, res, l1, ldb;
|
||||
|
||||
/*
|
||||
* ((L1D_PEND_MISS.PENDING / MEM_LOAD_UOPS_RETIRED.L1_MISS) * LD_BLOCKS.NO_SR) / CPU_CLK_UNHALTED.THREAD_P
|
||||
* "pmcstat -s CPU_CLK_UNHALTED.THREAD_P -s L1D_PEND_MISS.PENDING -s MEM_LOAD_UOPS_RETIRED.L1_MISS -s LD_BLOCKS.NO_SR -w 1",
|
||||
* ((L1D_PEND_MISS.PENDING / MEM_LOAD_UOPS_RETIRED.L1_MISS) *
|
||||
* LD_BLOCKS.NO_SR) / CPU_CLK_UNHALTED.THREAD_P "pmcstat -s
|
||||
* CPU_CLK_UNHALTED.THREAD_P -s L1D_PEND_MISS.PENDING -s
|
||||
* MEM_LOAD_UOPS_RETIRED.L1_MISS -s LD_BLOCKS.NO_SR -w 1",
|
||||
*/
|
||||
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
@ -669,6 +682,7 @@ splitload(struct counters *cpu, int pos)
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
double con, un, memd, res;
|
||||
|
||||
/* 4 - (MEM_UOP_RETIRED.SPLIT_LOADS * 5) / CPU_CLK_UNHALTED.THREAD_P (thresh >= .1)*/
|
||||
|
||||
con = 5.0;
|
||||
@ -689,11 +703,15 @@ splitload(struct counters *cpu, int pos)
|
||||
static int
|
||||
splitstore(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 5 - MEM_UOP_RETIRED.SPLIT_STORES / MEM_UOP_RETIRED.ALL_STORES (thresh > 0.01) */
|
||||
/*
|
||||
* 5 - MEM_UOP_RETIRED.SPLIT_STORES / MEM_UOP_RETIRED.ALL_STORES
|
||||
* (thresh > 0.01)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem_split;
|
||||
struct counters *mem_stores;
|
||||
double memsplit, memstore, res;
|
||||
|
||||
mem_split = find_counter(cpu, "MEM_UOP_RETIRED.SPLIT_STORES");
|
||||
mem_stores = find_counter(cpu, "MEM_UOP_RETIRED.ALL_STORES");
|
||||
if (pos != -1) {
|
||||
@ -712,7 +730,10 @@ splitstore(struct counters *cpu, int pos)
|
||||
static int
|
||||
contested(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 60) / CPU_CLK_UNHALTED.THREAD_P (thresh >.05) */
|
||||
/*
|
||||
* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 60) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.05)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
@ -736,7 +757,10 @@ contested(struct counters *cpu, int pos)
|
||||
static int
|
||||
contested_has(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84) / CPU_CLK_UNHALTED.THREAD_P (thresh >.05) */
|
||||
/*
|
||||
* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.05)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
@ -760,7 +784,10 @@ contested_has(struct counters *cpu, int pos)
|
||||
static int
|
||||
contestedbroad(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84) / CPU_CLK_UNHALTED.THREAD_P (thresh >.05) */
|
||||
/*
|
||||
* 6 - (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.05)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *mem2;
|
||||
@ -790,7 +817,10 @@ contestedbroad(struct counters *cpu, int pos)
|
||||
static int
|
||||
blockstoreforward(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 7 - (LD_BLOCKS_STORE_FORWARD * 13) / CPU_CLK_UNHALTED.THREAD_P (thresh >= .05)*/
|
||||
/*
|
||||
* 7 - (LD_BLOCKS_STORE_FORWARD * 13) / CPU_CLK_UNHALTED.THREAD_P
|
||||
* (thresh >= .05)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *ldb;
|
||||
struct counters *unhalt;
|
||||
@ -814,9 +844,11 @@ blockstoreforward(struct counters *cpu, int pos)
|
||||
static int
|
||||
cache2(struct counters *cpu, int pos)
|
||||
{
|
||||
/* ** Suspect ***
|
||||
* 8 - ((MEM_LOAD_RETIRED.L3_HIT * 26) + (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HIT * 43) +
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 60)) / CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
/*
|
||||
* ** Suspect *** 8 - ((MEM_LOAD_RETIRED.L3_HIT * 26) +
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HIT * 43) +
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 60)) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem1, *mem2, *mem3;
|
||||
@ -851,7 +883,8 @@ static int
|
||||
datasharing(struct counters *cpu, int pos)
|
||||
{
|
||||
/*
|
||||
* (MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT * 43)/ CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
* (MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT * 43)/
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
@ -879,7 +912,8 @@ static int
|
||||
datasharing_has(struct counters *cpu, int pos)
|
||||
{
|
||||
/*
|
||||
* (MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT * 43)/ CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
* (MEM_LOAD_UOPS_L3_HIT_RETIRED.XSNP_HIT * 43)/
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
@ -907,7 +941,8 @@ static int
|
||||
cache2ib(struct counters *cpu, int pos)
|
||||
{
|
||||
/*
|
||||
* (29 * MEM_LOAD_UOPS_RETIRED.LLC_HIT / CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
* (29 * MEM_LOAD_UOPS_RETIRED.LLC_HIT / CPU_CLK_UNHALTED.THREAD_P
|
||||
* (thresh >.2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
@ -935,8 +970,8 @@ cache2has(struct counters *cpu, int pos)
|
||||
/*
|
||||
* Examine ((MEM_LOAD_UOPS_RETIRED.LLC_HIT * 36) + \
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HIT * 72) +
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84))
|
||||
* / CPU_CLK_UNHALTED.THREAD_P
|
||||
* (MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM * 84)) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem1, *mem2, *mem3;
|
||||
@ -970,7 +1005,8 @@ static int
|
||||
cache2broad(struct counters *cpu, int pos)
|
||||
{
|
||||
/*
|
||||
* (29 * MEM_LOAD_UOPS_RETIRED.LLC_HIT / CPU_CLK_UNHALTED.THREAD_P (thresh >.2)
|
||||
* (29 * MEM_LOAD_UOPS_RETIRED.LLC_HIT / CPU_CLK_UNHALTED.THREAD_P
|
||||
* (thresh >.2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
@ -996,7 +1032,10 @@ cache2broad(struct counters *cpu, int pos)
|
||||
static int
|
||||
cache1(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 9 - (MEM_LOAD_UOPS_MISC_RETIRED.LLC_MISS * 180) / CPU_CLK_UNHALTED.THREAD_P (thresh >= .2) */
|
||||
/*
|
||||
* 9 - (MEM_LOAD_UOPS_MISC_RETIRED.LLC_MISS * 180) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >= .2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
@ -1020,7 +1059,10 @@ cache1(struct counters *cpu, int pos)
|
||||
static int
|
||||
cache1ib(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 9 - (MEM_LOAD_UOPS_L3_MISS_RETIRED.LCOAL_DRAM * 180) / CPU_CLK_UNHALTED.THREAD_P (thresh >= .2) */
|
||||
/*
|
||||
* 9 - (MEM_LOAD_UOPS_L3_MISS_RETIRED.LCOAL_DRAM * 180) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >= .2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
@ -1045,7 +1087,10 @@ cache1ib(struct counters *cpu, int pos)
|
||||
static int
|
||||
cache1broad(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 9 - (MEM_LOAD_UOPS_L3_MISS_RETIRED.LCOAL_DRAM * 180) / CPU_CLK_UNHALTED.THREAD_P (thresh >= .2) */
|
||||
/*
|
||||
* 9 - (MEM_LOAD_UOPS_L3_MISS_RETIRED.LCOAL_DRAM * 180) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh >= .2)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *mem;
|
||||
struct counters *unhalt;
|
||||
@ -1070,7 +1115,11 @@ cache1broad(struct counters *cpu, int pos)
|
||||
static int
|
||||
dtlb_missload(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 10 - ((DTLB_LOAD_MISSES.STLB_HIT * 7) + DTLB_LOAD_MISSES.WALK_DURATION) / CPU_CLK_UNHALTED.THREAD_P (t >=.1) */
|
||||
/*
|
||||
* 10 - ((DTLB_LOAD_MISSES.STLB_HIT * 7) +
|
||||
* DTLB_LOAD_MISSES.WALK_DURATION) / CPU_CLK_UNHALTED.THREAD_P (t
|
||||
* >=.1)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *dtlb_m, *dtlb_d;
|
||||
struct counters *unhalt;
|
||||
@ -1098,8 +1147,9 @@ static int
|
||||
dtlb_missstore(struct counters *cpu, int pos)
|
||||
{
|
||||
/*
|
||||
* ((DTLB_STORE_MISSES.STLB_HIT * 7) + DTLB_STORE_MISSES.WALK_DURATION) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (t >= .1)
|
||||
* ((DTLB_STORE_MISSES.STLB_HIT * 7) +
|
||||
* DTLB_STORE_MISSES.WALK_DURATION) / CPU_CLK_UNHALTED.THREAD_P (t
|
||||
* >= .1)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *dtsb_m, *dtsb_d;
|
||||
@ -1151,7 +1201,10 @@ itlb_miss(struct counters *cpu, int pos)
|
||||
static int
|
||||
itlb_miss_broad(struct counters *cpu, int pos)
|
||||
{
|
||||
/* (7 * ITLB_MISSES.STLB_HIT_4K + ITLB_MISSES.WALK_DURATION) / CPU_CLK_UNTHREAD_P */
|
||||
/*
|
||||
* (7 * ITLB_MISSES.STLB_HIT_4K + ITLB_MISSES.WALK_DURATION) /
|
||||
* CPU_CLK_UNTHREAD_P
|
||||
*/
|
||||
int ret;
|
||||
struct counters *itlb;
|
||||
struct counters *unhalt;
|
||||
@ -1179,7 +1232,10 @@ itlb_miss_broad(struct counters *cpu, int pos)
|
||||
static int
|
||||
icache_miss(struct counters *cpu, int pos)
|
||||
{
|
||||
/* (ICACHE.IFETCH_STALL - ITLB_MISSES.WALK_DURATION) / CPU_CLK_UNHALTED.THREAD_P IB */
|
||||
/*
|
||||
* (ICACHE.IFETCH_STALL - ITLB_MISSES.WALK_DURATION) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P IB
|
||||
*/
|
||||
|
||||
int ret;
|
||||
struct counters *itlb, *icache;
|
||||
@ -1258,7 +1314,10 @@ lcp_stall(struct counters *cpu, int pos)
|
||||
static int
|
||||
frontendstall(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 12 - IDQ_UOPS_NOT_DELIVERED.CORE / (CPU_CLK_UNHALTED.THREAD_P * 4) (thresh >= .15) */
|
||||
/*
|
||||
* 12 - IDQ_UOPS_NOT_DELIVERED.CORE / (CPU_CLK_UNHALTED.THREAD_P *
|
||||
* 4) (thresh >= .15)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *idq;
|
||||
struct counters *unhalt;
|
||||
@ -1282,8 +1341,11 @@ frontendstall(struct counters *cpu, int pos)
|
||||
static int
|
||||
clears(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 13 - ((MACHINE_CLEARS.MEMORY_ORDERING + MACHINE_CLEARS.SMC + MACHINE_CLEARS.MASKMOV ) * 100 )
|
||||
* / CPU_CLK_UNHALTED.THREAD_P (thresh >= .02)*/
|
||||
/*
|
||||
* 13 - ((MACHINE_CLEARS.MEMORY_ORDERING + MACHINE_CLEARS.SMC +
|
||||
* MACHINE_CLEARS.MASKMOV ) * 100 ) / CPU_CLK_UNHALTED.THREAD_P
|
||||
* (thresh >= .02)
|
||||
*/
|
||||
|
||||
int ret;
|
||||
struct counters *clr1, *clr2, *clr3;
|
||||
@ -1403,7 +1465,10 @@ microassist_broad(struct counters *cpu, int pos)
|
||||
static int
|
||||
aliasing(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 15 - (LD_BLOCKS_PARTIAL.ADDRESS_ALIAS * 5) / CPU_CLK_UNHALTED.THREAD_P (thresh > .1) */
|
||||
/*
|
||||
* 15 - (LD_BLOCKS_PARTIAL.ADDRESS_ALIAS * 5) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh > .1)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *ld;
|
||||
struct counters *unhalt;
|
||||
@ -1427,7 +1492,10 @@ aliasing(struct counters *cpu, int pos)
|
||||
static int
|
||||
aliasing_broad(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 15 - (LD_BLOCKS_PARTIAL.ADDRESS_ALIAS * 5) / CPU_CLK_UNHALTED.THREAD_P (thresh > .1) */
|
||||
/*
|
||||
* 15 - (LD_BLOCKS_PARTIAL.ADDRESS_ALIAS * 5) /
|
||||
* CPU_CLK_UNHALTED.THREAD_P (thresh > .1)
|
||||
*/
|
||||
int ret;
|
||||
struct counters *ld;
|
||||
struct counters *unhalt;
|
||||
@ -1475,7 +1543,10 @@ fpassists(struct counters *cpu, int pos)
|
||||
static int
|
||||
otherassistavx(struct counters *cpu, int pos)
|
||||
{
|
||||
/* 17 - (OTHER_ASSISTS.AVX_TO_SSE * 75)/CPU_CLK_UNHALTED.THREAD_P thresh .1*/
|
||||
/*
|
||||
* 17 - (OTHER_ASSISTS.AVX_TO_SSE * 75)/CPU_CLK_UNHALTED.THREAD_P
|
||||
* thresh .1
|
||||
*/
|
||||
int ret;
|
||||
struct counters *oth;
|
||||
struct counters *unhalt;
|
||||
@ -1505,7 +1576,10 @@ otherassistsse(struct counters *cpu, int pos)
|
||||
struct counters *unhalt;
|
||||
double un, ot, con, res;
|
||||
|
||||
/* 18 (OTHER_ASSISTS.SSE_TO_AVX * 75)/CPU_CLK_UNHALTED.THREAD_P thresh .1*/
|
||||
/*
|
||||
* 18 (OTHER_ASSISTS.SSE_TO_AVX * 75)/CPU_CLK_UNHALTED.THREAD_P
|
||||
* thresh .1
|
||||
*/
|
||||
con = 75.0;
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
oth = find_counter(cpu, "OTHER_ASSISTS.SSE_TO_AVX");
|
||||
@ -1530,7 +1604,10 @@ efficiency1(struct counters *cpu, int pos)
|
||||
struct counters *unhalt;
|
||||
double un, ot, con, res;
|
||||
|
||||
/* 19 (UOPS_RETIRED.RETIRE_SLOTS/(4*CPU_CLK_UNHALTED.THREAD_P) look if thresh < .9*/
|
||||
/*
|
||||
* 19 (UOPS_RETIRED.RETIRE_SLOTS/(4*CPU_CLK_UNHALTED.THREAD_P) look
|
||||
* if thresh < .9
|
||||
*/
|
||||
con = 4.0;
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
uops = find_counter(cpu, "UOPS_RETIRED.RETIRE_SLOTS");
|
||||
@ -1555,7 +1632,10 @@ efficiency2(struct counters *cpu, int pos)
|
||||
struct counters *unhalt;
|
||||
double un, ot, res;
|
||||
|
||||
/* 20 - CPU_CLK_UNHALTED.THREAD_P/INST_RETIRED.ANY_P good if > 1. (comp factor)*/
|
||||
/*
|
||||
* 20 - CPU_CLK_UNHALTED.THREAD_P/INST_RETIRED.ANY_P good if > 1.
|
||||
* (comp factor)
|
||||
*/
|
||||
unhalt = find_counter(cpu, "CPU_CLK_UNHALTED.THREAD_P");
|
||||
uops = find_counter(cpu, "INST_RETIRED.ANY_P");
|
||||
if (pos != -1) {
|
||||
@ -1771,6 +1851,7 @@ static void
|
||||
explain_name_broad(const char *name)
|
||||
{
|
||||
const char *mythresh;
|
||||
|
||||
if (strcmp(name, "eff1") == 0) {
|
||||
printf("Examine (UOPS_RETIRED.RETIRE_SLOTS)/(4 *CPU_CLK_UNHALTED.THREAD_P)\n");
|
||||
mythresh = "thresh < .75";
|
||||
@ -1933,6 +2014,7 @@ static void
|
||||
set_expression(char *name)
|
||||
{
|
||||
int found = 0, i;
|
||||
|
||||
for (i = 0; i < the_cpu.number; i++) {
|
||||
if (strcmp(name, the_cpu.ents[i].name) == 0) {
|
||||
found = 1;
|
||||
@ -1980,11 +2062,10 @@ process_header(int idx, char *p)
|
||||
{
|
||||
struct counters *up;
|
||||
int i, len, nlen;
|
||||
|
||||
/*
|
||||
* Given header element idx, at p in
|
||||
* form 's/NN/nameof'
|
||||
* process the entry to pull out the name and
|
||||
* the CPU number.
|
||||
* Given header element idx, at p in form 's/NN/nameof' process the
|
||||
* entry to pull out the name and the CPU number.
|
||||
*/
|
||||
if (strncmp(p, "s/", 2)) {
|
||||
printf("Check -- invalid header no s/ in %s\n",
|
||||
@ -2013,20 +2094,18 @@ build_counters_from_header(FILE *io)
|
||||
int i, len, cnt;
|
||||
size_t mlen;
|
||||
|
||||
/* We have a new start, lets
|
||||
* setup our headers and cpus.
|
||||
/*
|
||||
* We have a new start, lets setup our headers and cpus.
|
||||
*/
|
||||
if (fgets(buffer, sizeof(buffer), io) == NULL) {
|
||||
printf("First line can't be read from file err:%d\n", errno);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Ok output is an array of counters. Once
|
||||
* we start to read the values in we must
|
||||
* put them in there slot to match there CPU and
|
||||
* counter being updated. We create a mass array
|
||||
* of the counters, filling in the CPU and
|
||||
* counter name.
|
||||
* Ok output is an array of counters. Once we start to read the
|
||||
* values in we must put them in there slot to match there CPU and
|
||||
* counter being updated. We create a mass array of the counters,
|
||||
* filling in the CPU and counter name.
|
||||
*/
|
||||
/* How many do we get? */
|
||||
len = strlen(buffer);
|
||||
@ -2209,6 +2288,7 @@ process_file(char *filename)
|
||||
}
|
||||
if (filename == NULL) {
|
||||
int cnt;
|
||||
|
||||
/* For the ones we dynamically open we print now */
|
||||
for (i = 0, cnt = 0; i < MAX_CPU; i++) {
|
||||
do_expression(glob_cpu[i], (line_at - 1));
|
||||
@ -2228,6 +2308,7 @@ process_file(char *filename)
|
||||
my_pclose(io, pid_of_command);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__amd64__)
|
||||
#define cpuid(in,a,b,c,d)\
|
||||
asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in));
|
||||
@ -2281,15 +2362,20 @@ get_cpuid_set(void)
|
||||
printf("Intel PII\n");
|
||||
goto not_supported;
|
||||
break;
|
||||
case 0x6: case 0x16:
|
||||
case 0x6:
|
||||
case 0x16:
|
||||
printf("Intel CL\n");
|
||||
goto not_supported;
|
||||
break;
|
||||
case 0x7: case 0x8: case 0xA: case 0xB:
|
||||
case 0x7:
|
||||
case 0x8:
|
||||
case 0xA:
|
||||
case 0xB:
|
||||
printf("Intel PIII\n");
|
||||
goto not_supported;
|
||||
break;
|
||||
case 0x9: case 0xD:
|
||||
case 0x9:
|
||||
case 0xD:
|
||||
printf("Intel PM\n");
|
||||
goto not_supported;
|
||||
break;
|
||||
@ -2310,14 +2396,10 @@ get_cpuid_set(void)
|
||||
goto not_supported;
|
||||
break;
|
||||
case 0x1A:
|
||||
case 0x1E: /*
|
||||
* Per Intel document 253669-032 9/2009,
|
||||
* pages A-2 and A-57
|
||||
*/
|
||||
case 0x1F: /*
|
||||
* Per Intel document 253669-032 9/2009,
|
||||
* pages A-2 and A-57
|
||||
*/
|
||||
case 0x1E: /* Per Intel document 253669-032 9/2009, pages
|
||||
* A-2 and A-57 */
|
||||
case 0x1F: /* Per Intel document 253669-032 9/2009, pages
|
||||
* A-2 and A-57 */
|
||||
printf("Intel COREI7\n");
|
||||
goto not_supported;
|
||||
break;
|
||||
@ -2407,7 +2489,6 @@ get_cpuid_set(void)
|
||||
}
|
||||
memset(valid_pmcs, 0, sz);
|
||||
}
|
||||
|
||||
while (fgets(linebuf, sizeof(linebuf), io) != NULL) {
|
||||
if (linebuf[0] != '\t') {
|
||||
/* sometimes headers ;-) */
|
||||
@ -2456,6 +2537,7 @@ static void
|
||||
explain_all(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
printf("For CPU's of type %s the following expressions are available:\n", the_cpu.cputype);
|
||||
printf("-------------------------------------------------------------\n");
|
||||
for (i = 0; i < the_cpu.number; i++) {
|
||||
@ -2543,6 +2625,7 @@ add_it_to(char **vars, int cur_cnt, char *name)
|
||||
{
|
||||
int i;
|
||||
size_t len;
|
||||
|
||||
for (i = 0; i < cur_cnt; i++) {
|
||||
if (strcmp(vars[i], name) == 0) {
|
||||
/* Already have */
|
||||
@ -2570,11 +2653,9 @@ static char *
|
||||
build_command_for_exp(struct expression *exp)
|
||||
{
|
||||
/*
|
||||
* Build the pmcstat command to handle
|
||||
* the passed in expression.
|
||||
* /usr/sbin/pmcstat -w 1 -s NNN -s QQQ
|
||||
* where NNN and QQQ represent the PMC's in the expression
|
||||
* uniquely..
|
||||
* Build the pmcstat command to handle the passed in expression.
|
||||
* /usr/sbin/pmcstat -w 1 -s NNN -s QQQ where NNN and QQQ represent
|
||||
* the PMC's in the expression uniquely..
|
||||
*/
|
||||
char forming[1024];
|
||||
int cnt_pmc, alloced_pmcs, i;
|
||||
@ -2676,6 +2757,7 @@ static void
|
||||
run_tests(void)
|
||||
{
|
||||
int i, lenout;
|
||||
|
||||
printf("Running tests on %d PMC's this may take some time\n", valid_pmc_cnt);
|
||||
printf("------------------------------------------------------------------------\n");
|
||||
for (i = 0; i < valid_pmc_cnt; i++) {
|
||||
@ -2688,6 +2770,7 @@ static void
|
||||
list_all(void)
|
||||
{
|
||||
int i, cnt, j;
|
||||
|
||||
printf("PMC Abbreviation\n");
|
||||
printf("--------------------------------------------------------------\n");
|
||||
for (i = 0; i < valid_pmc_cnt; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user