Почему perf не работает для точных событий на моем сервере Intel Skylake? - PullRequest
0 голосов
/ 26 мая 2020

Я хотел измерить процент обращений к удаленной и локальной памяти в моих рабочих нагрузках. Я столкнулся с некоторыми проблемами, так как чувствую, что не получаю правильные числа для событий mem_load_l3_miss_retired.remote_dram и mem_load_l3_miss_retired.local_dram на моем сервере Skylake. Поэтому я хотел использовать точные события. Но, к моему удивлению, я получаю, что событие не поддерживается машиной. Хотя в Руководстве счетчик упоминается как счетчик PEBS.

Мои результаты следующие:

perf stat -e mem_load_l3_miss_retired.remote_dram:p sleep 2

Performance counter stats for 'sleep 2':

   <not supported>      mem_load_l3_miss_retired.remote_dram:p    

Пожалуйста, помогите мне найти решение.

1 Ответ

2 голосов
/ 28 мая 2020

Вы не можете получить номера событий Precise с помощью perf stat.

perf stat работает в режиме без выборки, в котором perf поддерживает текущий счет всех возникновений событий. В режиме счета записывать Precise events не имеет смысла. Precise events, как упомянул Питер, помогает вам правильно сузить команду (фактически +1 инструкция из инструкции, которая запускает помощь PEBS), которой приписывается запись в примере.

Кроме того, известно, что обработчик прерывания PEBS вызывает конфликты с NMI переполнения счетчика, который запускается при запуске perf stat. Для большего понимания, вы должны посмотреть это обсуждение.

По указанным выше причинам запись precise событий была отключена в режиме без выборки, как можно увидеть здесь .

/* There's no sense in having PEBS for non sampling events: */
    if (!is_sampling_event(event))
            return -EINVAL;

Вы должны использовать perf record для записи precise событий, поскольку кажется, что событие mem_load_l3_miss_retired.remote_dram уже поддерживает PEBS .

perf record -e mem_load_l3_miss_retired.remote_dram:p sleep 2
...