Хорошо.
Я посмотрел немного дальше и думаю, что нашел ответ.
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
.