Для измерения общего процессорного времени пользователя я использую поле «utime» из /proc/[pid]/stat
:
utime %lu Amount of time that this process has been scheduled in user
mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time
(time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do
not lose that time from their calculations.
(от man proc (5) )
Итак, «user utime» - это сумма utime
всех идентификаторов PID, запущенных этим пользователем.
Я надеюсь, что это даст мне точное значение количества процессорных секунд, которые потратил этот пользователь. Я на правильном пути?
Некоторые вещи, которые я пока не понимаю и не принимаю во внимание:
- Каждый PID также имеет родительский PID (или ноль). Но я считаю все PID, а не только те, у которых ppid равен 0. Это правильно?
- Есть, кроме utime, stime, cutime и cstime. Нужно ли беспокоиться о них? Я предполагаю, что utime - это общее количество процессорных секунд для PID, не считая родителя.
Если я вычисляю общее время процессора в системе /proc/uptime
, это значение довольно близко к моей сумме для всех пользователей, но разница значительна. Например (в минутах):
system cpu_time: 96.13
sum of users_cputime: 111.45
Исправление:
Я получаю "разумно выглядящие" значения для всех видов вещей. На данный момент я использую сумму utime, stime, cutime и cstime. И он сообщает значения, которые, хотя я их не понимаю, очень хорошо коррелируют с измерениями из time
.
Если я полностью на неправильном пути, есть другой вопрос:
- Какой самый справедливый способ контролировать общее время процессора - на пользователя? (+500 Bounty) в Ask Ubuntu
/proc/uptime
? Тогда я думаю, что ввод-вывод, относящийся к неработающей задаче, объяснит разницу. Я ничего не знаю об этой теме, поэтому я подозреваю, что упускаю что-то важное: я не ожидал бы, что так много произойдет в бездействующей задаче, особенно если учесть, что ваша сумма пользователей cputime, вероятно, пропускает много коротких живые процессы.
/proc/cputime
У меня нет никакой информации о времени, затрачиваемом процессорами на выполнение процессов, поэтому я озадачен тем, как выглядит ваш «системный cpu_time». Если вы что-то делаете со вторым номером, это время, потраченное на простое задание ; Я не знаю точно, что это значит на практике.