Hi,

We have been working on PAPI/libpfm support for Red Hat Enterprise Linux, which 
uses an older PAPI-5.2.0 rather than PAPI-5.5.x.  PAPI 5.5.x does NOT suffer 
from this problem, but on this older version of PAPI papi_native_avail on 
power9 would get stuck repeatedly printing out information for "PM_CO0_BUSY".  
The problem is caused when enumerating the various events and papi looks up the 
libpfm event using the name.  When there are multiple events with the same name 
this lookup returns the earliest match in the arrays.  The enumeration code in 
papi ends up looping back to that earlier entry in the table with the same name 
and not continuing through the rest of the entries.

Should libpfm be allowing multiple entries with the same pme_name that could be 
both be available on the same time?  Or should each pme_name be unique?

Should papi be able to handle the case of non-unique pme_name?

Below is a quick survey to see which event files have non-unique pme_name.  It 
looks like only ppc based machines (cell_events.h, power9_events.h, and 
powerpc_nest_events.h) have this issue.

 for i in `ls`;  do echo $i; grep pme_name $i | sort | uniq -c | sort -n |grep 
-v "1 "; done
amd64_events_fam10h.h
amd64_events_fam11h.h
amd64_events_fam12h.h
amd64_events_fam14h.h
amd64_events_fam15h.h
amd64_events_fam15h_nb.h
amd64_events_k7.h
amd64_events_k8.h
arm_1176_events.h
arm_cortex_a15_events.h
arm_cortex_a53_events.h
arm_cortex_a57_events.h
arm_cortex_a7_events.h
arm_cortex_a8_events.h
arm_cortex_a9_events.h
arm_qcom_krait_events.h
arm_xgene_events.h
cell_events.h
      2         {.pme_name = "DATA_ERAT_MISS_TH1",
intel_atom_events.h
intel_bdw_events.h
intel_bdx_unc_cbo_events.h
intel_bdx_unc_ha_events.h
intel_bdx_unc_imc_events.h
intel_bdx_unc_irp_events.h
intel_bdx_unc_pcu_events.h
intel_bdx_unc_qpi_events.h
intel_bdx_unc_r2pcie_events.h
intel_bdx_unc_r3qpi_events.h
intel_bdx_unc_sbo_events.h
intel_bdx_unc_ubo_events.h
intel_coreduo_events.h
intel_core_events.h
intel_glm_events.h
intel_hswep_unc_cbo_events.h
intel_hswep_unc_ha_events.h
intel_hswep_unc_imc_events.h
intel_hswep_unc_irp_events.h
intel_hswep_unc_pcu_events.h
intel_hswep_unc_qpi_events.h
intel_hswep_unc_r2pcie_events.h
intel_hswep_unc_r3qpi_events.h
intel_hswep_unc_sbo_events.h
intel_hswep_unc_ubo_events.h
intel_hsw_events.h
intel_ivbep_unc_cbo_events.h
intel_ivbep_unc_ha_events.h
intel_ivbep_unc_imc_events.h
intel_ivbep_unc_irp_events.h
intel_ivbep_unc_pcu_events.h
intel_ivbep_unc_qpi_events.h
intel_ivbep_unc_r2pcie_events.h
intel_ivbep_unc_r3qpi_events.h
intel_ivbep_unc_ubo_events.h
intel_ivb_events.h
intel_knc_events.h
intel_knl_events.h
intel_knl_unc_cha_events.h
intel_knl_unc_edc_events.h
intel_knl_unc_imc_events.h
intel_knl_unc_m2pcie_events.h
intel_netburst_events.h
intel_nhm_events.h
intel_nhm_unc_events.h
intel_p6_events.h
intel_pii_events.h
intel_pm_events.h
intel_ppro_events.h
intel_skl_events.h
intel_slm_events.h
intel_snbep_unc_cbo_events.h
intel_snbep_unc_ha_events.h
intel_snbep_unc_imc_events.h
intel_snbep_unc_pcu_events.h
intel_snbep_unc_qpi_events.h
intel_snbep_unc_r2pcie_events.h
intel_snbep_unc_r3qpi_events.h
intel_snbep_unc_ubo_events.h
intel_snb_events.h
intel_snb_unc_events.h
intel_wsm_events.h
intel_wsm_unc_events.h
intel_x86_arch_events.h
itanium2_events.h
itanium_events.h
mips_74k_events.h
montecito_events.h
perf_events.h
power4_events.h
power5_events.h
power5+_events.h
power6_events.h
power7_events.h
power8_events.h
power9_events.h
      2         .pme_name = "PM_CO0_BUSY",
      2         .pme_name = "PM_DSLB_MISS",
      2         .pme_name = "PM_ISLB_MISS",
      2         .pme_name = "PM_L2_INST",
      2         .pme_name = "PM_L2_INST_MISS",
      2         .pme_name = "PM_L2_LD_DISP",
      2         .pme_name = "PM_L2_LD_HIT",
      2         .pme_name = "PM_L2_RTY_LD",
      2         .pme_name = "PM_L2_RTY_ST",
      2         .pme_name = "PM_L2_SN_M_WR_DONE",
      2         .pme_name = "PM_L2_ST_DISP",
      2         .pme_name = "PM_L2_ST_HIT",
      2         .pme_name = "PM_L3_CO0_BUSY",
      2         .pme_name = "PM_L3_CO_MEPF",
      2         .pme_name = "PM_L3_P0_CO_RTY",
      2         .pme_name = "PM_L3_P0_PF_RTY",
      2         .pme_name = "PM_L3_P1_CO_RTY",
      2         .pme_name = "PM_L3_P1_PF_RTY",
      2         .pme_name = "PM_L3_PF0_BUSY",
      2         .pme_name = "PM_L3_RD0_BUSY",
      2         .pme_name = "PM_L3_SN0_BUSY",
      2         .pme_name = "PM_L3_WI0_BUSY",
      2         .pme_name = "PM_RC0_BUSY",
      2         .pme_name = "PM_SN0_BUSY",
powerpc_events.h
powerpc_nest_events.h
      2         .pme_name = "MCS_00",
      2         .pme_name = "MCS_01",
      2         .pme_name = "MCS_02",
      2         .pme_name = "MCS_03",
ppc970_events.h
ppc970mp_events.h
s390x_cpumf_events.h
sparc_niagara1_events.h
sparc_niagara2_events.h
sparc_ultra12_events.h
sparc_ultra3_events.h
sparc_ultra3i_events.h
sparc_ultra3plus_events.h
sparc_ultra4plus_events.h
torrent_events.h

-Will

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to