Каковы в действительности параметры атрибута «read_format» структуры «perf_event_attr»? - PullRequest
3 голосов
/ 13 февраля 2020

В настоящее время я использую системный вызов perf_event_open (в системах Linux) и пытаюсь понять параметр конфигурации этого системного вызова, который задается структурой struct perf_event_attr.

Это вариант read_format. Кто-нибудь может увидеть на странице руководства этого системного вызова, этот параметр присваивается выходным данным этого вызова.

Но я не понимаю, что может делать каждый возможный аргумент.


Особенно это две возможности:

  • PERF_FORMAT_TOTAL_TIME_ENABLED
  • PERF_FORMAT_TOTAL_TIME_RUNNING

Может ли кто-нибудь с этой информацией дать мне прямой ответ?

1 Ответ

3 голосов
/ 13 февраля 2020

Хорошо.

Я посмотрел немного дальше и думаю, что нашел ответ.


  • PERF_FORMAT_TOTAL_TIME_ENABLED: Кажется, что «разрешенное время» относится к разнице между временем, когда событие больше не наблюдается, и временем, когда событие зарегистрировано как «подлежащее наблюдению».

  • PERF_FORMAT_TOTAL_TIME_RUNNING: оно кажется, что «время выполнения» относится к сумме времени, в течение которого событие действительно наблюдается ядром. Он меньше или равен PERF_FORMAT_TOTAL_TIME_ENABLED.


Например:

Вы сообщаете ядру, что хотите наблюдать событие X в 1:13 05:00 Ваше ядро ​​создает «зонд» на X и начинает записывать активность. Затем, по неизвестной причине, вы говорите, чтобы остановить запись на данный момент в 13:14:05. Затем вы возобновите запись в 13:15:05. Наконец, вы останавливаете запись в 13:15:35.

У вас есть время 00:02:30 (1:15:35 - 13:13:05 = 00:02:30)

и 00:01:30 во время работы (13:14:05 - 13:13:05 + 13:15:35 - 13:15:05 = 00:01:30)


Атрибут read_format может иметь оба значения с использованием маски. В C ++ это выглядит так:

event_configuration.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_TOTAL_TIME_RUNNING;

, где event_configuration является экземпляром struct perf_event_attr.

...