Как оценить (отслеживать использование ЦП) кратковременную команду? - PullRequest
0 голосов
/ 12 июня 2018

Хотя мне известны такие команды, как top (с указанием числа эквивалентов здесь ), я не совсем понимаю, как зафиксировать использование ЦП «недолговечным»процесс.Например, если бы я хотел увидеть производительность команды ls, что я мог бы сделать, чтобы выборка измерения нагрузки была достаточно частой и быстрой для использования?

В большинстве существующих ответов, которые я видел по этой теме, используется цикл, который повторяет что-то вроде top каждые n секунд, что неприменимо для быстрых / кратковременных команд, особенноучитывая, что я не успею вовремя увидеть PID, чтобы кормить его указанными методами.Возможно, я смогу использовать что-то из этого ответа , так как он, кажется, выполняет выборку при довольно малых временных масштабах, но я подозреваю, что есть более прямой / менее интенсивный подход.

1 Ответ

0 голосов
/ 12 июня 2018

Если вы можете обрабатывать каждый прогон вашей недолгой команды, вы можете измерить время настенных, пользовательских и системных процессоров с помощью time ls.

Или для более подробной информации есть perf stat ls.В зависимости от настроек sysctl kernel.perf_event_paranoid = 0 вы можете использовать счетчики производительности HW для измерения циклов ЦП / пропусков кэша / т. Д. В коде ядра, а также в пространстве пользователя.Это также делает программные события как ошибки страницы.Но для очень краткосрочных команд, таких как ls, perf будет иметь значительные накладные расходы при запуске.На процессорах Intel ocperf.py является оболочкой для perf с большим количеством событий.Смотрите Может ли MOV x86 действительно быть "свободным"?Почему я вообще не могу воспроизвести это? для примера использования ocperf.py для микробенчма asm.

strace -c ls будет подсчитывать время, потраченное на системные вызовы.


Если вы не можете выполнить каждую короткую команду под измерительной оболочкой, может работать системный perf record -a.

...