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

问题描述 投票:2回答:1

我正在尝试使用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返回PAPI_OK,PAPI_add_event返回-1,也就是PAPI_EINVAL-无效参数。我尝试了几种计数器形式perf_event_uncore,但遇到了同样的问题。我是否需要使用其他函数将其添加到事件集中?还是我做错了什么?

c x86-64 perf papi
1个回答
0
投票

我找到了解决方案。在添加如下cpu = 0规范后:PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native)调用PAPI_add_event函数时没有错误。

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

© www.soinside.com 2019 - 2024. All rights reserved.