Что означает «1,234 используемых процессоров» в производительности Perf? - PullRequest
1 голос
/ 26 апреля 2020

Когда вы запускаете утилиту perf с командой, одна из выходных строк, которую вы получаете, выглядит следующим образом:

          2.088031      task-clock (msec)         #    0.700 CPUs utilized

, и если вы используете perf stat --all-cpus --no-aggr, вы получаете одну из этих строк на процессор ядро, например:

CPU0             38.518960      cpu-clock (msec)          #    0.528 CPUs utilized
CPU1             38.564135      cpu-clock (msec)          #    0.529 CPUs utilized
CPU2             38.611806      cpu-clock (msec)          #    0.529 CPUs utilized

Я не понимаю, что это значит, точно - в обоих случаях; У меня есть только предположение:

  1. В агрегированном случае это «Среднее число процессоров, на которых были запущены потоки этого процесса между настенным временем запуска процесса и выходом из процесса»?
  2. В дезагрегированном случае - это «доля времени, в течение которого какой-либо поток процесса выполнялся на указанном ядре ЦП»?

Но эти догадки полны предположения. Каково точное значение этих цифр в обоих случаях? Кроме того, как они учитывают время, потраченное на вызовы ядра потоками процесса? Как они учитывают несколько потоков одного процесса, работающих на одном ядре? Подробное объяснение будет с благодарностью.

1 Ответ

1 голос
/ 27 апреля 2020

Строки "комментария" (AFAIK) всегда вычисляются из события / счетчика на , что строка делится на что-то еще. Часто в секунду реального времени, поэтому вы получаете инструкции / секунду в строке инструкций. Но время / время безразмерны, и в этом случае это коэффициент использования.

Обычный выход (для отдельного процесса) (AFAIK) просто
task-clock / wall-time = среднее число используемых ядер.

Я полагаю, что это та же идея, что и в случае с процессором,
cpu-clock / wall-time = среднее использование этого ядра.

...