Измерение загрузки ЦП демона за часть времени его работы на настенных часах - PullRequest
0 голосов
/ 27 мая 2010

Я имею дело с сетевым демоном: он принимает данные, обрабатывает их и выплевывает. Я хотел бы повысить производительность этого демона, профилируя его и уменьшая его загрузку процессора. Я могу сделать это легко на Linux с gprof. Тем не менее, я также хотел бы использовать что-то вроде «времени» для измерения общей загрузки ЦП за определенный период времени. Если возможно, я бы хотел рассчитать его на период, который меньше его общего времени выполнения: таким образом, я хотел бы запустить демон, подождать некоторое время, сгенерировать статистику ЦП, прекратить генерировать их, а затем остановить демона позднее .

Команда "time" будет работать хорошо для меня, но, похоже, мне нужно, чтобы я запускал и останавливал демона как ребенка времени. Есть ли способ измерить загрузку ЦП только для части времени настенных часов демона?

1 Ответ

2 голосов
/ 27 мая 2010

Файл /proc/<pid>/stat содержит необходимую информацию - вы заполняете поля utime и stime. Это кумулятивные счетчики используемого процессорного времени процесса и режима ядра; прочитайте их в начале интервала измерения, затем прочитайте их снова в конце и вычислите разницу.

Это даст вам время ЦП в jiffies. Чтобы определить общее истекшее время настенных часов в jiffies (чтобы вы могли преобразовать в среднее использование), суммируйте числа в строке cpu0 в /proc/stat (до и после, точно так же как /proc/<pid>/stat).

Это расположение первых нескольких полей в /proc/<pid>/stat, начиная с Documentation/filesystems/proc.txt в источнике Linux:

Table 1-3: Contents of the stat files (as of 2.6.22-rc3)
..............................................................................
 Field          Content
  pid           process id
  tcomm         filename of the executable
  state         state (R is running, S is sleeping, D is sleeping in an
                uninterruptible wait, Z is zombie, T is traced or stopped)
  ppid          process id of the parent process
  pgrp          pgrp of the process
  sid           session id
  tty_nr        tty the process uses
  tty_pgrp      pgrp of the tty
  flags         task flags
  min_flt       number of minor faults
  cmin_flt      number of minor faults with child's
  maj_flt       number of major faults
  cmaj_flt      number of major faults with child's
  utime         user mode jiffies
  stime         kernel mode jiffies
  cutime        user mode jiffies with child's
  cstime        kernel mode jiffies with child's
...