Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libpmc/libpmc_pmu_util.c
Show First 20 Lines • Show All 140 Lines • ▼ Show 20 Lines | if (strcasecmp(name, pa->pa_alias) == 0) | ||||
return (pa->pa_name); | return (pa->pa_name); | ||||
return (name); | return (name); | ||||
} | } | ||||
struct pmu_event_desc { | struct pmu_event_desc { | ||||
uint64_t ped_period; | uint64_t ped_period; | ||||
uint64_t ped_offcore_rsp; | uint64_t ped_offcore_rsp; | ||||
uint64_t ped_l3_thread; | |||||
uint64_t ped_l3_slice; | |||||
uint32_t ped_event; | uint32_t ped_event; | ||||
uint32_t ped_frontend; | uint32_t ped_frontend; | ||||
uint32_t ped_ldlat; | uint32_t ped_ldlat; | ||||
uint32_t ped_config1; | uint32_t ped_config1; | ||||
int16_t ped_umask; | int16_t ped_umask; | ||||
uint8_t ped_cmask; | uint8_t ped_cmask; | ||||
uint8_t ped_any; | uint8_t ped_any; | ||||
uint8_t ped_inv; | uint8_t ped_inv; | ||||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | while ((kvp = strsep(&event, ",")) != NULL) { | ||||
else if (strcmp(key, "ldlat") == 0) | else if (strcmp(key, "ldlat") == 0) | ||||
ped->ped_ldlat = strtol(value, NULL, 16); | ped->ped_ldlat = strtol(value, NULL, 16); | ||||
else if (strcmp(key, "fc_mask") == 0) | else if (strcmp(key, "fc_mask") == 0) | ||||
ped->ped_fc_mask = strtol(value, NULL, 16); | ped->ped_fc_mask = strtol(value, NULL, 16); | ||||
else if (strcmp(key, "ch_mask") == 0) | else if (strcmp(key, "ch_mask") == 0) | ||||
ped->ped_ch_mask = strtol(value, NULL, 16); | ped->ped_ch_mask = strtol(value, NULL, 16); | ||||
else if (strcmp(key, "config1") == 0) | else if (strcmp(key, "config1") == 0) | ||||
ped->ped_config1 = strtol(value, NULL, 16); | ped->ped_config1 = strtol(value, NULL, 16); | ||||
else if (strcmp(key, "l3_thread_mask") == 0) | |||||
ped->ped_l3_thread = strtol(value, NULL, 16); | |||||
else if (strcmp(key, "l3_slice_mask") == 0) | |||||
ped->ped_l3_slice = strtol(value, NULL, 16); | |||||
else { | else { | ||||
debug = getenv("PMUDEBUG"); | debug = getenv("PMUDEBUG"); | ||||
if (debug != NULL && strcmp(debug, "true") == 0 && value != NULL) | if (debug != NULL && strcmp(debug, "true") == 0 && value != NULL) | ||||
printf("unrecognized kvpair: %s:%s\n", key, value); | printf("unrecognized kvpair: %s:%s\n", key, value); | ||||
} | } | ||||
} | } | ||||
free(r); | free(r); | ||||
return (0); | return (0); | ||||
▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Lines | for (pe = pme->table; pe->name || pe->desc || pe->event; pe++) { | ||||
if (pe->metric_name != NULL) | if (pe->metric_name != NULL) | ||||
printf("metric_name: %s\n", pe->metric_name); | printf("metric_name: %s\n", pe->metric_name); | ||||
if (pe->metric_group != NULL) | if (pe->metric_group != NULL) | ||||
printf("metric_group: %s\n", pe->metric_group); | printf("metric_group: %s\n", pe->metric_group); | ||||
} | } | ||||
} | } | ||||
static int | static int | ||||
pmc_pmu_amd_pmcallocate(const char *event_name __unused, struct pmc_op_pmcallocate *pm, | pmc_pmu_amd_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm, | ||||
struct pmu_event_desc *ped) | struct pmu_event_desc *ped) | ||||
{ | { | ||||
struct pmc_md_amd_op_pmcallocate *amd; | struct pmc_md_amd_op_pmcallocate *amd; | ||||
const struct pmu_event *pe; | |||||
int idx = -1; | |||||
amd = &pm->pm_md.pm_amd; | amd = &pm->pm_md.pm_amd; | ||||
amd->pm_amd_config = AMD_PMC_TO_EVENTMASK(ped->ped_event); | |||||
if (ped->ped_umask > 0) { | if (ped->ped_umask > 0) { | ||||
pm->pm_caps |= PMC_CAP_QUALIFIER; | pm->pm_caps |= PMC_CAP_QUALIFIER; | ||||
amd->pm_amd_config |= AMD_PMC_TO_UNITMASK(ped->ped_umask); | amd->pm_amd_config |= AMD_PMC_TO_UNITMASK(ped->ped_umask); | ||||
} | } | ||||
pm->pm_class = PMC_CLASS_K8; | pm->pm_class = PMC_CLASS_K8; | ||||
pe = pmu_event_get(NULL, event_name, &idx); | |||||
if (strcmp("l3cache", pe->topic) == 0){ | |||||
amd->pm_amd_config |= AMD_PMC_TO_EVENTMASK(ped->ped_event); | |||||
amd->pm_amd_sub_class = PMC_AMD_SUB_CLASS_L3_CACHE; | |||||
amd->pm_amd_config |= AMD_PMC_TO_L3SLICE(ped->ped_l3_slice); | |||||
amd->pm_amd_config |= AMD_PMC_TO_L3CORE(ped->ped_l3_thread); | |||||
} | |||||
else if (strcmp("data fabric", pe->topic) == 0){ | |||||
amd->pm_amd_config |= AMD_PMC_TO_EVENTMASK_DF(ped->ped_event); | |||||
amd->pm_amd_sub_class = PMC_AMD_SUB_CLASS_DATA_FABRIC; | |||||
} | |||||
else{ | |||||
amd->pm_amd_config |= AMD_PMC_TO_EVENTMASK(ped->ped_event); | |||||
amd->pm_amd_sub_class = PMC_AMD_SUB_CLASS_CORE; | |||||
if ((pm->pm_caps & (PMC_CAP_USER|PMC_CAP_SYSTEM)) == 0 || | if ((pm->pm_caps & (PMC_CAP_USER|PMC_CAP_SYSTEM)) == 0 || | ||||
(pm->pm_caps & (PMC_CAP_USER|PMC_CAP_SYSTEM)) == | (pm->pm_caps & (PMC_CAP_USER|PMC_CAP_SYSTEM)) == | ||||
(PMC_CAP_USER|PMC_CAP_SYSTEM)) | (PMC_CAP_USER|PMC_CAP_SYSTEM)) | ||||
amd->pm_amd_config |= (AMD_PMC_USR | AMD_PMC_OS); | amd->pm_amd_config |= (AMD_PMC_USR | AMD_PMC_OS); | ||||
else if (pm->pm_caps & PMC_CAP_USER) | else if (pm->pm_caps & PMC_CAP_USER) | ||||
amd->pm_amd_config |= AMD_PMC_USR; | amd->pm_amd_config |= AMD_PMC_USR; | ||||
else if (pm->pm_caps & PMC_CAP_SYSTEM) | else if (pm->pm_caps & PMC_CAP_SYSTEM) | ||||
amd->pm_amd_config |= AMD_PMC_OS; | amd->pm_amd_config |= AMD_PMC_OS; | ||||
if (ped->ped_edge) | if (ped->ped_edge) | ||||
amd->pm_amd_config |= AMD_PMC_EDGE; | amd->pm_amd_config |= AMD_PMC_EDGE; | ||||
if (ped->ped_inv) | if (ped->ped_inv) | ||||
amd->pm_amd_config |= AMD_PMC_EDGE; | amd->pm_amd_config |= AMD_PMC_EDGE; | ||||
if (pm->pm_caps & PMC_CAP_INTERRUPT) | if (pm->pm_caps & PMC_CAP_INTERRUPT) | ||||
amd->pm_amd_config |= AMD_PMC_INT; | amd->pm_amd_config |= AMD_PMC_INT; | ||||
} | |||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
pmc_pmu_intel_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm, | pmc_pmu_intel_pmcallocate(const char *event_name, struct pmc_op_pmcallocate *pm, | ||||
struct pmu_event_desc *ped) | struct pmu_event_desc *ped) | ||||
{ | { | ||||
struct pmc_md_iap_op_pmcallocate *iap; | struct pmc_md_iap_op_pmcallocate *iap; | ||||
▲ Show 20 Lines • Show All 154 Lines • Show Last 20 Lines |