Чтение аппаратных счетчиков из списка perf_event_uncore с помощью PAPI - PullRequest
3 голосов
/ 20 марта 2020

Я пытаюсь прочитать один из счетчиков оборудования с помощью 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, и у меня возникла та же проблема. Нужно ли использовать другую функцию, чтобы добавить это даже в набор событий? или я что-то не так делаю?

1 Ответ

1 голос
/ 22 марта 2020

Я нашел что-то, что кажется решением. После добавления спецификации cpu = 0, например: PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native), при вызове функции PAPI_add_event больше не возникает ошибок.

Также отметим, что я проверил, и этот указанный аппаратный счетчик c не может быть посчитан с другими, поэтому он должен быть единственным событием в наборе событий.

...