perf_event_open: обработка последнего записанного сэмпла - PullRequest
0 голосов
/ 09 мая 2018

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

Обновление:

Я проверил значение type, которое является членом struct perf_event_header. Для последней записанной выборки это значение равно нулю, и, согласно заголовочному файлу perf_event.h, значение нуля не имеет соответствующего типа записи выборки!

Другими словами, мой вопрос: как perf_event API справляется со случаем, когда рабочая нагрузка завершает выполнение, но значение счетчика лидера группы меньше, чем значение периода выборки? Данные в этом случае отбрасываются?

1 Ответ

0 голосов
/ 11 мая 2018

Как API perf_event справляется со случаем, когда рабочая нагрузка завершает выполнение, но значение счетчика лидера группы меньше значения периода выборки?

Ничего не происходит. Если количество событий еще не достигнуто, образец не записывается.

Следует учитывать, что выборки обычно являются статистической информацией.

Если вам действительно нужно знать, вы можете использовать какую-то форму ptrace и вручную прочитать значение счетчика до завершения потока.

Если вы прочитаете perf_event_header с type == 0, я буду обеспокоен. Я не думаю, что это когда-либо случится.

Edit: Что касается man-страницы, я считаю, что вы не можете прочитать оставшееся значение из этого конкретного события, потому что выборка и подсчет события являются исключительными.

События бывают двух видов: подсчет и выборка. Подсчет событий тот, который используется для подсчета совокупного количества событий, которые. В общем, результаты подсчета собираются с читать (2) вызов. Событие выборки периодически записывает измерения в буфер к нему можно получить доступ через mmap (2).

...