使用 PAPI 从 perf_event_uncore 列表中读取硬件计数器

Reading hardware counters from perf_event_uncore list with PAPI

我正在尝试使用 PAPI 读取其中一个硬件计数器。当我尝试从 perf_event 列表中读取事件时,它工作正常。 但是现在我需要从 perf_event_uncore 列表中读取一个计数器,它是通过 papi_native_avail 获得的,但我收到一个错误。 运行 级联湖架构,linux 5.4.0-3-amd64 版本。

int err = PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL",&native);
if (err != PAPI_OK)
    printf("PAPI_event_name_to_code error: %d\n", err);

err = PAPI_add_event(EventSet, native);

if (err!= PAPI_OK)
      printf("PAPI_add_event error: %d\n", err);

即使 PAPI_event_name_to_code returns PAPI_OK, PAPI_add_event returns -1 即 PAPI_EINVAL - 无效参数。我尝试了几个计数器形式 perf_event_uncore,但我遇到了同样的问题。我是否需要使用不同的功能将其添加到事件集中?还是我做错了什么?

我找到了一些似乎是解决方案的东西。像这样添加 cpu=0 规范后: PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native) 调用 PAPI_add_event 函数时没有进一步的错误。

还要注意,我已经检查过,这个特定的硬件计数器不能和其他的一起计数,所以它应该是事件集中唯一的事件。