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