Process Time

今天遇到要驗證Process的Kernel Mode Time與User Mode Time,詢問Kay之後得知運算方式如下:

  • Kernel Mode Time: stime + cstime (/proc/$pid/stat中的field 15與17)
  • User Mode Time: utime + cutime (/proc/$pid/stat中的field 14與16)

從/proc/$pid/stat中取得的time是以jiffies為單位,將jiffies * CLK_TCK就會得到以秒為單位的時間,而最終希望以100 nanosecond呈現。為了方便我驗證,我寫了一段shellscript去做計算並顯示出來:

pid=$1
 
utime_f=14
cutime_f=16
stime_f=15
cstime_f=17
 
utime=`cat /proc/$pid/stat | cut -d " " -f $utime_f`
cutime=`cat /proc/$pid/stat | cut -d " " -f $cutime_f`
u_mode_time=`expr $utime + $cutime`
 
stime=`cat /proc/$pid/stat | cut -d " " -f $stime_f`
cstime=`cat /proc/$pid/stat | cut -d " " -f $cstime_f`
k_mode_time=`expr $stime + $cstime`
 
clock=`getconf CLK_TCK`
 
ns_100=10000000
nsc=`expr $ns_100 / $clock`
# unit: 100 nanosecond
echo User Mode Time `expr $u_mode_time \* $nsc`
echo Kernel Mode Time `expr $k_mode_time \* $nsc`

友藏內心獨白: 不足的是浮點數運算。