Skip to content

Commit

Permalink
intel_rdt: Use pqos_mon_get_value api to obtain event values
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksinx committed Apr 26, 2024
1 parent 97ac63c commit 846e064
Showing 1 changed file with 92 additions and 46 deletions.
138 changes: 92 additions & 46 deletions src/intel_rdt.c
Expand Up @@ -144,87 +144,133 @@ static void rdt_submit_gauge(const char *cgroup, const char *type,
plugin_dispatch_values(&vl);
}

static int rdt_get_value(const struct pqos_mon_data *group,
const enum pqos_mon_event event_id, uint64_t *value) {
int ret;

#if PQOS_VERSION >= 40400
ret = pqos_mon_get_value(group, PQOS_PERF_EVENT_LLC_REF, value, NULL);

#else
const struct pqos_event_values *values = &group->values;
#if PQOS_VERSION < 40000
const enum pqos_mon_event events = group->event;
#endif

ret = PQOS_RETVAL_OK;

switch (event_id) {
case PQOS_MON_EVENT_L3_OCCUP:
*value = values->llc;
break;
case PQOS_PERF_EVENT_LLC_MISS:
*value = values->llc_misses;
break;
case PQOS_MON_EVENT_LMEM_BW:
*value = values->mbm_local;
break;
case PQOS_MON_EVENT_TMEM_BW:
*value = values->mbm_total;
break;
case PQOS_MON_EVENT_RMEM_BW:
#if PQOS_VERSION < 40000
if (events & (PQOS_MON_EVENT_TMEM_BW | PQOS_MON_EVENT_LMEM_BW))
*value = values->mbm_total - values->mbm_local;
#else
*value = values->mbm_remote;
#endif
default:
ret = PQOS_RETVAL_ERROR;
break;
}
#endif

if (ret != PQOS_RETVAL_OK)
return ret;

// Apply scale factor
if (event_id == PQOS_MON_EVENT_LMEM_BW ||
event_id == PQOS_MON_EVENT_TMEM_BW ||
event_id == PQOS_MON_EVENT_RMEM_BW) {
const struct pqos_monitor *mon = NULL;

ret = pqos_cap_get_event(g_rdt->pqos_cap, event_id, &mon);
if (ret == PQOS_RETVAL_OK && mon->scale_factor != 0)
*value = *value * mon->scale_factor;
}

return ret;
}

static void rdt_submit(const struct pqos_mon_data *group) {
#if PQOS_VERSION >= 40400
const struct pqos_event_values *values = &group->values;
#endif
const char *desc = (const char *)group->context;
const enum pqos_mon_event events = group->event;

if (events & PQOS_MON_EVENT_L3_OCCUP)
rdt_submit_gauge(desc, "bytes", "llc", values->llc);
if (events & PQOS_MON_EVENT_L3_OCCUP) {
uint64_t value;

int ret = rdt_get_value(group, PQOS_MON_EVENT_L3_OCCUP, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_gauge(desc, "bytes", "llc", value);
}

if (events & PQOS_PERF_EVENT_IPC)
rdt_submit_gauge(desc, "ipc", NULL, values->ipc);
if (events & PQOS_PERF_EVENT_IPC) {
double value;
int ret = PQOS_RETVAL_OK;

#if PQOS_VERSION >= 40400
ret = pqos_mon_get_ipc(group, &value);
#else
value = values->ipc;
#endif

if (ret == PQOS_RETVAL_OK)
rdt_submit_gauge(desc, "ipc", NULL, value);
}

#if PQOS_VERSION >= 40400
if (events & PQOS_PERF_EVENT_LLC_REF) {
uint64_t value;

int ret = pqos_mon_get_value(group, PQOS_PERF_EVENT_LLC_REF, &value, NULL);
int ret = rdt_get_value(group, PQOS_PERF_EVENT_LLC_REF, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_derive(desc, "bytes", "llc_ref", value);
}
#endif

if (events & PQOS_PERF_EVENT_LLC_MISS) {
#if PQOS_VERSION >= 40400
uint64_t value;

int ret = pqos_mon_get_value(group, PQOS_PERF_EVENT_LLC_MISS, &value, NULL);
int ret = rdt_get_value(group, PQOS_PERF_EVENT_LLC_MISS, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_derive(desc, "bytes", "llc_miss", value);
#else
rdt_submit_derive(desc, "bytes", "llc_miss", values->llc_misses);
#endif
rdt_submit_derive(desc, "bytes", "llc_miss", values->llc_misses);
}

if (events & PQOS_MON_EVENT_LMEM_BW) {
const struct pqos_monitor *mon = NULL;

int retval =
pqos_cap_get_event(g_rdt->pqos_cap, PQOS_MON_EVENT_LMEM_BW, &mon);
if (retval == PQOS_RETVAL_OK) {
uint64_t value = values->mbm_local;

if (mon->scale_factor != 0)
value = value * mon->scale_factor;
uint64_t value;

int ret = rdt_get_value(group, PQOS_MON_EVENT_LMEM_BW, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_derive(desc, "memory_bandwidth", "local", value);
}
}

if (events & PQOS_MON_EVENT_TMEM_BW) {
const struct pqos_monitor *mon = NULL;

int retval =
pqos_cap_get_event(g_rdt->pqos_cap, PQOS_MON_EVENT_TMEM_BW, &mon);
if (retval == PQOS_RETVAL_OK) {
uint64_t value = values->mbm_total;

if (mon->scale_factor != 0)
value = value * mon->scale_factor;
uint64_t value;

int ret = rdt_get_value(group, PQOS_MON_EVENT_TMEM_BW, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_derive(desc, "memory_bandwidth", "total", value);
}
}

if (events & PQOS_MON_EVENT_RMEM_BW) {
const struct pqos_monitor *mon = NULL;

int retval =
pqos_cap_get_event(g_rdt->pqos_cap, PQOS_MON_EVENT_RMEM_BW, &mon);
if (retval == PQOS_RETVAL_OK) {
uint64_t value = values->mbm_remote;

#if PQOS_VERSION < 40000
if (events & (PQOS_MON_EVENT_TMEM_BW | PQOS_MON_EVENT_LMEM_BW))
value = values->mbm_total - values->mbm_local;
#endif

if (mon->scale_factor != 0)
value = value * mon->scale_factor;
uint64_t value;

int ret = rdt_get_value(group, PQOS_MON_EVENT_RMEM_BW, &value);
if (ret == PQOS_RETVAL_OK)
rdt_submit_derive(desc, "memory_bandwidth", "remote", value);
}
}
}

Expand Down

0 comments on commit 846e064

Please sign in to comment.