Подтвердить что ты не робот

Первичные события Linux: cpu-clock и task-clock - в чем разница

Linux perf tools (некоторое время назад называемый perf_events) имеет несколько встроенных универсальных программных событий. Двумя основными из них являются: task-clock и cpu_clock (внутренне называемые PERF_COUNT_SW_CPU_CLOCK и PERF_COUNT_SW_TASK_CLOCK). Но что не так с ними - это отсутствие описания.

ysdx пользователь сообщает, что man perf_event_open имеет краткое описание:

    PERF_COUNT_SW_CPU_CLOCK
          This reports the CPU clock, a high-resolution per-
          CPU timer.

    PERF_COUNT_SW_TASK_CLOCK
          This reports a clock count specific to the task
          that is running.

Но описание трудно понять.

Может ли кто-нибудь дать авторитетный ответ о том, как и когда события task-clock и cpu-clock учитываются? Как они относятся к планировщику ядра Linux?

Когда task-clock и cpu-clock будут выдавать разные значения? Какой из них я должен использовать?

4b9b3361

Ответ 1

1) По умолчанию в параметре perf stat отображаются task-clock и не отображаются cpu-clock. Следовательно, мы можем сказать, что ожидаемые task-clock были гораздо более полезными.

2) cpu-clock были просто сломаны и не ремонтировались много лет. Лучше всего игнорировать это.

Исключение: при профилировании CPU или CPU - в отличие от конкретной задачи - например, perf stat -a. perf stat -a показывает cpu-clock вместо task-clock. В этом конкретном случае оба должны были быть эквивалентными. Оригинальное намерение для cpu-clock имеет больше смысла в этом случае. Таким образом, для perf stat -a вы можете просто игнорировать это различие и все равно рассматривать его как task-clock.

Если вы пишете свой собственный код, который профилирует ЦП или ЦП... может быть, будет наиболее perf stat -a следовать поведению perf stat -a... но вы можете perf stat -a на этот вопрос, чтобы объяснить, что вы делаете :-).

Re: perf: некоторые вопросы о событиях perf software

Также в настоящее время я не вижу каких-либо реальных отличий между событиями cpu-clock и task-clock. Кажется, что они оба считают время, прошедшее, когда задача выполняется на процессоре. Я ошибся?

Нет, Фрэнсис уже заметил, что, возможно, я испортил его, когда добавил материал multi-pmu, который стоит посмотреть в моем списке задач (Фрэнсис также вручил мне небольшой патчлет), но я продолжаю отвлекаться на другие вещи:/

ХОРОШО.

Имеет ли смысл корректировать период для них обоих?

Кроме того, при создании события часов задачи передача pid = -1 sys_perf_event_open() не имеет смысла, не так ли?

То же самое с часами процессора и 'pid = n': при любом значении событие измеряет настенные часы процессора.

Возможно, было бы лучше, если бы в API было предложено только одно время и внутренняя привязка этих часов к процессору или часам задач в зависимости от параметров pid или cpu?

Нет, на самом деле имеет смысл подсчитывать как процессор, так и часы задачи (задача в основном настенная).

Другими словами:

Предполагалось, что cpu-clock sleep 1 будут показывать около 1 секунды. Напротив, task-clock показывали бы близко к нулю. Было бы целесообразно использовать cpu-clock для считывания времени настенных часов. Затем вы можете посмотреть на соотношение между cpu-clock и task-clock.

После того, как они так долго были эквивалентны task-clock и не были четко документированы, даже возможно, что "исправление" существующего счетчика может вызвать регрессию в некоторой программе пространства пользователя. Если есть такая программа, Linux может не справиться с этим счетчиком. Linux, возможно, придется определить новый счетчик вместо этого.

Ответ 2

Согласно это сообщение, они измеряют одно и то же.

Они просто отличаются тем, что они пробуют.

cpu-clock - это настенные часы, поэтому образцы берутся на регулярной основе интервалы относительно времени стены. Я считаю, что время выполнения задачи относительно времени выполнения задачи. Так, образцы берутся через регулярные промежутки времени относительно процесса ' во время выполнения.

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

Ответ 3

Вообще говоря: Событие cpu-clock измеряет время прохождения. Он использует часы процессора Linux в качестве источника синхронизации.

Вот углубленная статья о поиске горячих точек исполнения с perf: http://sandsoftwaresound.net/perf/perf-tutorial-hot-spots/

Часы-часы сообщают вам, насколько параллельна ваша работа или сколько было использовано cpus. Этот сборник содержит подробную информацию о выходе, созданной perf: https://doc.zih.tu-dresden.de/hpc-wiki/bin/view/Compendium/PerfTools

Здесь также много информации: fooobar.com/info/210733/...