linux - What does pcpu signify and why multiply by 1000? -


i reading calculating cpu usage of process.

seconds = utime / hertz  total_time = utime + stime  if include_dead_children      total_time = total_time + cutime + cstime endif  seconds = uptime - starttime / hertz  pcpu = (total_time * 1000 / hertz) / seconds  print: "%cpu" pcpu / 10 "." pcpu % 10 

what don't is, 'seconds' algorithm means time computer spent doing operations other interested process, , before it. since, uptime time our computer spent being operational , starttime means time our [interested] process started.

then why dividing total_time seconds [time computer spent doing else] pcpu? doesn't make sense.

the standard meanings of variables:

 #  name      description 14  utime     cpu time spent in user code, measured in jiffies 15  stime     cpu time spent in kernel code, measured in jiffies 16  cutime    cpu time spent in user code, including time children 17  cstime    cpu time spent in kernel code, including time children  22  starttime time when process started, measured in jiffies  /proc/uptime :the uptime of system (seconds), , amount of time spent in idle process (seconds).  hertz        :number of clock ticks per second 

now you've provided each of variables represent, here's comments on pseudo-code:

seconds = utime / hertz 

the above line pointless, new value of seconds never used before it's overwritten few lines later.

total_time = utime + stime 

total running time (user + system) of process, in jiffies, since both utime , stime are.

if include_dead_children      total_time = total_time + cutime + cstime endif 

this should total_time = cutime + cstime, since definitions seem indicate that, e.g. cutime includes utime, plus time spent children in user mode. so, written, overstates value including contribution process twice. or, definition wrong... regardless, total_time still in jiffies.

seconds = uptime - starttime / hertz 

uptime in seconds; starttime / hertz converts starttime jiffies seconds, seconds becomes "the time in seconds since process started".

pcpu = (total_time * 1000 / hertz) / seconds 

total_time still in jiffies, total_time / hertz converts seconds, number of cpu seconds consumed process. divided seconds give scaled cpu-usage percentage since process start if floating point operation. since isn't, it's scaled 1000 give resolution of 1/10%. scaling forced done use of parentheses, preserve accuracy.

print: "%cpu" pcpu / 10 "." pcpu % 10 

and undoes scaling, finding dividend , remainder when dividing pcpu 10, , printing values in format looks floating point value.


Comments

Popular posts from this blog

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - UML - How would you draw a try catch in a sequence diagram? -

c++ - No viable overloaded operator for references a map -